https://youtu.be/uandR5M30ho [유튜버: 케이디]님의 유니티 3D강좌 영상을 보고 따라하면서 유니티 공부용으로 제작한 게임입니다.
유니티의 지형만들기 기능을 사용해서 간단한 굴곡이 있고 언덕이 있는 산맥을 만들어 주었다.
영상을 따라서 아무것도 들고 있지 않은 상태의 팔과 자연스러운 위치 값을 조절하고 Holder,HandHolder와 WeaponCamera를 만들어서 넣어 주었다.
아무것도 들고 있이 않을 때의 손의 애니메이션을 조작하는 명령이다.
중간 중간에 카메라의 시점이나 Holder폴더를 만들어서 자연스러운 카메라 동작과 시점들을 이어주기 위해 영상을 따라 수정을 거쳤는데 여기부분이 물리적인 법칙같은 것들을 이해하고 넘어가느라 시간이 오래걸렸다.
private void TryAttack()
{
if (Input.GetButton("Fire1"))
{
if (!isAttack)
{
StartCoroutine(AttackCoroutine());
}
}
}
마우스 왼쪽 클릭을 누르면 공격을 하고 AttackCoroutine()을 실행한다.
IEnumerator AttackCoroutine()
{
isAttack = true;
currentHand.anim.SetTrigger("Attack");
yield return new WaitForSeconds(currentHand.attackDelayA);
isSwing = true;
StartCoroutine(HitCoroutine());
yield return new WaitForSeconds(currentHand.attackDelayB);
isSwing = false;
yield return new WaitForSeconds(currentHand.attackDelay - currentHand.attackDelayA - currentHand.attackDelayB);
isAttack = false;
}
주먹을 휘두르는 공격상태와 다음 동작으로 이뤄지는 딜레이와 공격을 하는지 않하는지 확인해주는 과정을 거친다.
IEnumerator HitCoroutine()
{
while (isSwing)
{
if (CheckObject())
{
isSwing = false;
Debug.Log(hitInfo.transform.name);
}
yield return null;
}
}
private bool CheckObject()
{
if(Physics.Raycast(transform.position, transform.forward, out hitInfo, currentHand.range)){
return true;
}
return false;
}
}
오브젝트와 충돌하면 어떤 오브젝트와 충돌했는지 확인해주는 로그를 띄워주는 명령이다.
이렇게 3-4강의를 따라하여 맵과 맨주먹을 휘두르는 동작들의 애니메이션을 관리해주는 작업을 해보았다.
혹시 팔 에셋 어디서 구하는지 아시나요?