bons = #()
boneName = ""
boundingBox = undefined
bipLength = undefined
bipwidth = undefined
bipheight = undefined
objs = selection as array
fn changeName strs oldStr newStr =
(
findFlag = findstring strs oldStr
if (findFlag != undefined) do
(
changeStr = replace strs findFlag oldStr.count newStr
)
changeStr
)
for i = 1 to objs.count do
(
if((classof objs[i] == Biped_Object) and (objs[i].name != "Bip01 Footsteps")) do append bips objs[i]
)
clearSelection()
for i = 1 to bips.count do
(
boneName = bips[i].name
boneName = changeName boneName "bip" "bone"
boundingBox = nodeGetBoundingBox bips[i]bips[i].transform
bipLength = boundingBox[2].x
bipheight = boundingBox[2].y
bipwidth = boundingBox[2].z
madeBone = Bonesys.createBone[0,0,0][1,0,0][0,0,1]
madeBone.name = boneName
madeBone.width = bipWidth
madeBone.height = bipheight
madeBone.length = bipLength
madeBone.boxmode = on
madeBone.rotation = (inverse(biped.getTransform bips[i] #rotation))
madeBone.position = (bips[i].transform.pos)
madeBone.position.controller = Position_Constraint()
madeBone.position.controller.appendTarget bips[i] 50.0
madeBone.rotation.controller= Orientation_Constraint()
madeBone.rotation.controller.appendTarget bips[i] 50.0
append bons madeBone
)
for i = 1 to bips.count do
(
if(bips[i].parent != undefined) do
(
parentBip = bips[i].parent
boneName = parentBip.name
boneName = changeName boneName "bip" "bone"
bons[i].parent = execute("$'" + boneName + "'")
)
)
select bons
사용법은
1. 바이패드를 생성한 후에 선택을 한다.
2. 스크립트를 실행하면 바이패드선택이 해제 되고 흉내내기 본이 만들어진 후에 본이 선택된다.
3. 구조는 'Bip01 Footsteps'을 제외하고 모두 동일하다.
4. 노드의 이름은 'Bip'를 'Bone'로 변경하고 나머지는 동일하게 생성한다.
5. 기본적으로 바이패드의 링크 구조를 따르면서 바이패드를 움직이면 본이 따라 움직인다.
6. 바이패드 일부만 선택하고 실행해도
8. 링크 구조도 정상적으로 생성된다.
추가 할것은
1. 본이름을 생성할때 이름을 정할 수 있도록 할것.
2. 목이 머리와 가슴의 중간값을 유지하도록 하는것.(이건 고민좀 할것 같다.)
3. 어께 손목 허벅지등의 트위스트 본 추가 선택.