[Unity 학습노트] Cinemachine을 사용하여 적을 잠그는 기능을 가진 3인칭 카메라 방안을 신속하게 실현합니다.

10478 단어 Unity

Unity 공식적인 Cinemachine 도구는 기능이 매우 강하고 사용하기 편리하며 다양한 기능을 쉽게 실현할 수 있습니다.본고는 적기를 잠그는 것을 간단하고 신속하게 실현하는 제3기 방안을 소개했다.다음 그림과 같은 효과



직접 소개하다.


Unity 2018.3 이상의 버전을 준비하고 공백 3d 프로젝트를 새로 만들고 Pakage Manager에서 Cinemachine 설치를 다운로드합니다(본고는 Unity 2019.3.0f3+Cinemachine 2.3.4를 사용합니다).



2. 3인칭 허카메라 Cinemachine Free Look, Follow라는 빈 물체, Look At라는 빈 물체를 새로 만든다.Hierarchy를 청결하게 유지하기 위해 CameraRoot라는 빈 물체를 새로 만들어 상기 세 가지와 Main Camera를 모두 포함시켰다.



3. CM FreeLook의 기본 속성 설정



CM Free Look의 Follow를 Follow 빈 물체로 설정하고, Look At을 Look At 빈 물체로 설정합니다(여기서 Follow를 유저 자체로 설정하지 않고, Look At을 잠글 적으로 설정하지 않습니까? 뒤에 놓고 구체적으로 실현할 때 설명합니다).나머지 항목은 기본값으로 유지됩니다.

4. CM FreeLook 두 축의 속성 설정


  • Yaixs의 Value는 1로 설정되어 있으며 항상 변경되지 않습니다.이 프로젝트는 처음에 TopRig 설정을 사용했고 MiddleRig 및 BottomRig를 사용하지 않았습니다.
  • X Aixs 와 Y Aixs 의 InputAxisName 의 MouseX 와 MouseY 를 삭제합니다.XY축의 운동을 수동으로 조작하여
  • Orbits 아래의 바인딩 모드, Lock To Target With World Up 설정.물론 Follow 대상이 어떻게 회전하는지, Follow의 회전축은 시종 세계 좌표의 Up 방향, 즉 회전 궤적면은 시종 세계 좌표의 수평 평면에 평행한다.
  • 5. CM FreeLook의 동작 속성 설정


  • TopRig의 Body 속성 아래의 XYZ Damping은 세 축의 방향에서 가상 카메라 위치와 동반되는 Follow 물체의 버퍼링값으로 실제 수요에 따라 설정됩니다.0은 버퍼링되지 않으며 위상 회전축 중심의 위치 좌표와 Follow 객체는 항상 일치합니다.이 프로젝트는 위의 버퍼에 따라 위치가 필요하지 않기 때문에 모두 0으로 설정됩니다.
  • YawDamping은 모터 Yaw축(간단하게 y축 방향으로 이해)의 회전값과 Follow의 회전값의 버퍼값으로 0은 버퍼가 되지 않고 실제 수요에 따라 설정됩니다.이 안건에서 그것을 0.2로 설정하다.
  • Aim 속성 아래의 각 속성은 기본적으로 기본값으로 유지됩니다.본 안건의 설정은 그림에서 보듯이
  • 6. Player 물체와 몇 개의 Enemy 물체를 만듭니다.



    물체의 형상은 마음대로 설정할 수 있다. 본문은 고무주머니형으로 설정하기 편리하도록 하고 작은 공을 추가하여 Z축의 정방향에서 물체의 전방을 표시한다.

    7. 카메라 제어 스크립트 작성


    카메라가 따라가는 것을 제어하기 위해 새 CameraController를 만듭니다.CameraRoot에 추가하고 속성을 설정합니다.

    CameraController.cs
    using UnityEngine;
    using Cinemachine;
    public class CameraController : MonoBehaviour
    {
        [SerializeField]
        private CinemachineFreeLook CmFreeLook;
        [SerializeField]
        private Transform follow;
        [SerializeField]
        private Transform lookAt;
        [SerializeField]
        private Transform player;
        [SerializeField]
        private Transform[] enemies;
        [SerializeField]
        private AimMark aimMark;
    
        // 当前锁定的敌人的Index
        private int lockedEnemyIndex;
    
        private void Start()
        {
            // 给FreeLook虚拟相机设置Follow和LookAt的物体
            CmFreeLook.Follow = follow;
            CmFreeLook.LookAt = lookAt;
    
            // 设置锁定标记的跟随对象
            aimMark.SetAimTarget(lookAt);
        }
    
        private void Update()
        {
            // 按下空格时切换锁定的敌人
            if(Input.GetKeyDown(KeyCode.Space))
            {
                lockedEnemyIndex = (lockedEnemyIndex + 1) % enemies.Length;
                aimMark.PlayAimAnimation();
            }
    
            // 使lookAt的位置和旋转都和锁定的目标保持一致
            lookAt.position = enemies[lockedEnemyIndex].position;
            lookAt.rotation = enemies[lockedEnemyIndex].rotation;
    
            // 使follow的位置和玩家一致
            follow.position = player.position;
            // 使follow的z轴正方向指向lookAt
            follow.LookAt(lookAt);
        }
    }
    
    이 중 AimMark 은 잠금 시 나타나는 UI로 관련 기능과 상관없이 볼 수 있습니다.
    여기에서 LookAt 빈 물체의 위치와 회전을 시작하여 잠금 중인 적과 일치하게 하고, Follow는 위치를 Player와 일치하게 유지하며 Z축을 LookAt으로 향하게 합니다.
    왜 CM Free Look의 Follow와 Look At을 플레이어와 잠금 중인 Enemy로 직접 설정하지 않고 두 개의 간접 물체가 필요합니까?

    Follow 빈 물체를 만들고 위치가 Player를 따라가며 LookAt 물체를 보는 목적은 카메라, Player, Enemy를 일직선에 위치시키기 위한 것이다



    Orbits의 Binding Mode가 Lock To Tartget으로 설정되면 Follow 대상의 위치에 따라 회전 값이 Follow 대상의 회전 값이 됩니다.
    Lock To Target의 세 가지 변체는 카메라의 회전축 위치는 모두 Follow 대상을 따르는 위치이지만 회전값의 따르는 방식은 다르다
    Lock To Tartget:                旋转值跟随Follow对象的旋转值
    Lock To Target On Assign:       Start时或Follow对象更变时,旋转值设置为Follow对象的旋转值一次,之后则不再变化。
    Lock To Target With World Up:   只有Yaw轴的旋转值跟随Follow对象的旋转值。
    Lock To Target No Roll:         Pitch轴和Yaw轴跟随Follow对象的旋转值,Roll轴不跟随
    

    LookAt 빈 물체를 만드는 목적은 적을 잠글 때 렌즈가 매끄럽게 방향을 바꿀 수 있도록 전환하는 것이다.


    CM FreeLook의 LookAt 객체를 직접 교환하면 렌즈가 순간적으로 객체를 가리키며 트윈되지 않습니다.그리고 LookAt 대상을 항상 빈 물체로 만들고 잠금을 전환할 때 빈 물체의 위치를 적의 위치를 잠그는 위치로 변경하면 카메라의 방향을 트위닝합니다.

    8. 요점 요약

  • Cinemachine의 Free Look 위상을 사용하고 Follow와 Look At 속성은 각각 Follow 빈 물체와 Look At 빈 물체로 설정합니다.
  • Orbits 아래의 Binding Mode를 Lock To Target With World Up으로 설정합니다.
  • 스크립트를 사용하여 Follow 빈 물체 위치가 Player를 따라 LookAt 빈 물체를 가리키도록 회전합니다.LookAt 빈 물체의 위치와 회전은 잠긴 Enemy를 동반합니다.
  • Cinemachine의 신속한 구현을 통해 적기를 잠그고 3인칭 카메라를 사용할 수 있습니다.

    좋은 웹페이지 즐겨찾기