우선, 큐브들을 자동으로 리깅하기 위해 각 큐브에 본을 추가하고, 이 본들이 계층적으로 연결되도록 해야 합니다. 이 과정은 코드로 자동으로 수행됩니다.
각 큐브마다 **본(bone)**을 만들어야 합니다. 본은 Transform을 기반으로 생성되고, 리깅에 필요한 구성 요소가 됩니다.
using UnityEngine;
using UnityEngine.Animations.Rigging;
public class ProceduralRigging : MonoBehaviour
{
public GameObject[] cubes; // 탑을 구성하는 큐브들
public Transform player; // 캐릭터를 추적할 목적지
private void Start()
{
// 각 큐브에 본을 추가하고 리깅 설정
foreach (GameObject cube in cubes)
{
// 큐브마다 빈 본을 추가
GameObject bone = new GameObject(cube.name + "_Bone");
bone.transform.SetParent(cube.transform);
bone.transform.localPosition = Vector3.zero; // 본의 위치는 큐브의 중심
// 본을 부모로 리깅 오브젝트를 생성
Rig rig = cube.AddComponent<Rig>();
// IK Constraint 추가 (Two Bone IK Constraint 사용)
TwoBoneIKConstraint ik = rig.gameObject.AddComponent<TwoBoneIKConstraint>();
ik.data.target = player; // 플레이어를 추적
ik.data.root = cube.transform;
}
}
}
위 코드를 통해 탑을 구성하는 각각의 큐브에 본과 리깅이 자동으로 추가됩니다. 이렇게 하면 씬 뷰에서 일일이 리깅을 설정할 필요 없이, 코드로 리깅과 IK를 자동화할 수 있습니다.
IK 시스템은 특정 본이 타겟(캐릭터)을 향해 움직일 수 있도록 도와줍니다. 위의 코드에서는 TwoBoneIKConstraint를 사용하여 각 큐브가 캐릭터 방향으로 회전하거나 움직이도록 설정했습니다.
이제 큐브들의 본이 캐릭터 쪽으로 움직이도록 하는 코드를 추가합니다. 각 큐브는 개별적으로 캐릭터를 향해 움직일 수 있으며, 상위 큐브(머리 역할을 하는 큐브)는 전체 탑의 머리처럼 행동합니다.
using UnityEngine;
using UnityEngine.Animations.Rigging;
public class ProceduralRigging : MonoBehaviour
{
public GameObject[] cubes; // 탑을 구성하는 큐브들
public Transform player; // 캐릭터를 추적할 목적지
public float ikWeight = 1.0f; // IK의 영향력 (0~1)
private void Start()
{
// 각 큐브에 본을 추가하고 리깅 설정
foreach (GameObject cube in cubes)
{
// 큐브마다 빈 본을 추가
GameObject bone = new GameObject(cube.name + "_Bone");
bone.transform.SetParent(cube.transform);
bone.transform.localPosition = Vector3.zero; // 본의 위치는 큐브의 중심
// 본을 부모로 리깅 오브젝트를 생성
Rig rig = cube.AddComponent<Rig>();
// IK Constraint 추가 (Two Bone IK Constraint 사용)
TwoBoneIKConstraint ik = rig.gameObject.AddComponent<TwoBoneIKConstraint>();
ik.data.target = player; // 플레이어를 추적
ik.weight = ikWeight; // IK의 영향력 설정
}
}
private void Update()
{
// 실시간으로 플레이어의 위치를 추적
foreach (GameObject cube in cubes)
{
// 각 큐브의 본이 플레이어를 향해 움직임
TwoBoneIKConstraint ik = cube.GetComponent<TwoBoneIKConstraint>();
ik.data.targetPosition = player.position;
}
}
}
이 방식은 각각의 큐브에 대해 본과 리깅을 자동으로 추가하고, IK 시스템을 통해 타겟을 추적하게 만듭니다. 따라서, 탑을 구성하는 여러 개의 큐브가 리깅을 통해 유기적으로 움직이고, 개별 큐브들이 머리나 팔처럼 행동할 수 있게 됩니다.
이를 통해 Unity 씬에서 일일이 리깅을 지정할 필요 없이 코드로 프로시저럴 리깅과 IK 제어를 완성할 수 있습니다.
유니티 내비메쉬(NavMesh) 다시 설정하기, 장애물(Obstacle) 설정하기 (0) | 2024.10.01 |
---|---|
유니티 오브젝트 부모(상위),자식(하위) 관계 만들기 (0) | 2024.09.30 |
유니티 버튼 누르면 큐브 생성하기 (0) | 2024.09.29 |
유니티 파티클 시스템 제거하기(Destroy) (1) | 2024.09.28 |
유니티 캐릭터 위치 그대로 저장하고 불러오기 (0) | 2024.09.25 |