반응형
테스트를 하기 위해서는 최대한 간략하게 기능만 봐야한다.
새로운 씬 만들기
0. 캐릭터 생성 및 건 피봇, 건 생성하기
1. IK를 사용하려면 먼저 캐릭터에 애니메이터에서 IK를 체크를 해줘야한다,.
틀린방법
{
2. 캐릭터와 총을 새로운 게임오브젝트에 자식으로 넣고 IKTest 스크립터(IK 테스트를 할)를 넣어준다.
}
3. 스크립터를 작성하고, 핸들에 손을 붙여준다..
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class IKTest : MonoBehaviour
{
public Animator anim;
public Transform leftHandMount;
public Transform rightHandMount;
private void OnAnimatorIK(int layerIndex)
{
// 0..1 범위의 가중치 값을 설정하여 IK가 조준 할 시작 위치와 목표 위치 사이의 거리를 결정합니다.
anim.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1);
anim.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1);
//위치 자체는 SetIKPosition을 사용하여 별도로 설정됩니다 .
anim.SetIKPosition(AvatarIKGoal.LeftHand, leftHandMount.position);
anim.SetIKRotation(AvatarIKGoal.LeftHand, leftHandMount.rotation);
anim.SetIKPositionWeight(AvatarIKGoal.RightHand, 1);
anim.SetIKRotationWeight(AvatarIKGoal.RightHand, 1);
anim.SetIKPosition(AvatarIKGoal.RightHand, rightHandMount.position);
anim.SetIKRotation(AvatarIKGoal.RightHand, rightHandMount.rotation);
}
}
이렇게 했는데 안된다...
문제해결 -> 2. 캐릭터와 총을 새로운 게임오브젝트에 자식으로 넣고 IKTest 스크립터(IK 테스트를 할)를 넣어준다.
이부분이 새로운 오브젝트에 자식으로 넣는게 아니라, 기존 캐릭터에 넣는것이다. (즉, 애니메이터가 안에 있어야한다.)
--->>
2. (수정) 기존 우먼에 건피봇과 건을 넣어주고, 안에 스크립터를 넣어준다.
이런식으로 제일 상위계층(woman)안에 건을 넣고, 스크립터를 달아줘야한다.
즉. 애니메이터가 안에 있어야한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class IKTest : MonoBehaviour
{
public Animator anim;
public Transform leftHandMount;
public Transform rightHandMount;
private void OnAnimatorIK(int layerIndex)
{
// 0..1 범위의 가중치 값을 설정하여 IK가 조준 할 시작 위치와 목표 위치 사이의 거리를 결정합니다.
anim.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1);
anim.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1);
//위치 자체는 SetIKPosition을 사용하여 별도로 설정됩니다 .
anim.SetIKPosition(AvatarIKGoal.LeftHand, leftHandMount.position);
anim.SetIKRotation(AvatarIKGoal.LeftHand, leftHandMount.rotation);
anim.SetIKPositionWeight(AvatarIKGoal.RightHand, 1);
anim.SetIKRotationWeight(AvatarIKGoal.RightHand, 1);
anim.SetIKPosition(AvatarIKGoal.RightHand, rightHandMount.position);
anim.SetIKRotation(AvatarIKGoal.RightHand, rightHandMount.rotation);
}
}
SetIKPositionWeight() 는 목표지점과 목표 위치 사이의 거리를 결정을 함
SetIKPosition() 는 현재 IK의 goal (손, 팔꿈치 등등)을 value -> Vecter3의 위치로 옮겨주는 것을 뜻함
---
반응형
'Unity > 엔진프로그래밍' 카테고리의 다른 글
0415_좀비슈터 단계별 테스트 _ LineRenderer (0) | 2021.04.15 |
---|---|
0415_좀비슈터 단계별 테스트 _ 자동발사 (0) | 2021.04.15 |
0415_좀비슈터 단계별 테스트 _ RayCast 사용 (0) | 2021.04.14 |
0413_ Button 누르고 있을 때 슬라이드, 떼었을 때 (0) | 2021.04.13 |
0409 _ 레트로의 유니티 게임 예제 (0) | 2021.04.09 |