Publish:

태그: ,

카테고리:

📌 Neck Move

배그나 오버워치와 같은 3인칭 게임을 하다보면 플레이어의 움직임을 관찰하게 된다.

애니메이션이 진행중임에도 하늘을 바라보거나 땅을 바라볼 때 목을 움직이는 캐릭터

유니티에서는 어떻게 만들 수 있을까?

📝 Player

Humanoid 캐릭터 에셋을 다운받거나 사용한다면 뼈대를 가지고 있다.

이 뼈대를 사용해서 목을 움직여보자.

현재 사용하는 캐릭터는 다음과 같다.

1

스크립트는 목에 붙여두었다.

📝 원리

2

Unity 내부 게임로직을 보면 Animation Update 는 Update 와 LateUpdate 사이에 위치해 있다.

이는 애니메이션이 동작하고 난 후 우리가 동작을 수정할 수 있음을 뜻한다.

📋 Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using UnityEngine;

public class NeckControl : MonoBehaviour
{
    [SerializeField] float _mouseSensitivity;
    private float _verticalLookRotation, _horizontalLookRotation;
    private float _mx, _my;

    private void Update()
    {
        _my = Input.GetAxisRaw("Mouse Y");
        _mx = Input.GetAxisRaw("Mouse X");

        if (_my != 0)
        {
            _verticalLookRotation += _my * _mouseSensitivity;
            _verticalLookRotation = Mathf.Clamp(_verticalLookRotation, -40, 70);
        }
        if(_mx != 0)
        {
            _horizontalLookRotation += _mx * _mouseSensitivity;
            _horizontalLookRotation = Mathf.Clamp(_horizontalLookRotation, -90, 90);
        }
    }

    private void LateUpdate()
    {
        Vector3 ver = Vector3.forward * _verticalLookRotation;
        Vector3 hori = Vector3.left * _horizontalLookRotation;

        transform.localEulerAngles = ver + hori;
    }
}

💻 Execute

1

방문해 주셔서 감사합니다!😊

업데이트:

댓글남기기