최소한의 구성 요소로 간단한 게임 프로젝트 준비

Unity의 Tutorial에서 배운 내용을 복습하거나 나름대로 변경할 때를 위해
최소한의 요소로 구성된 프로젝트를 준비했습니다.
원래 프로젝트에서 작업하면 다른 요소가 방해가 되거나 버그의 원인을 파악하기 어려울 수 있기 때문입니다.

이 환경에서 할 수 있는 내용은 다음과 같습니다.
  • 방향키로 캐릭터를 이동시킨다
  • 카메라가 캐릭터에 추적한다

  • 향후 3D 게임의 내용에 관해서, 이 프로젝트에 추가해 나가는 형태로 학습한 것을 아웃풋 해 가려고 생각하고 있습니다.



    Player.cs
    public class Player : MonoBehaviour
    {
        public float m_Speed = 6f;  // 移動速度
    
        Animator m_Animator;
        Rigidbody m_Rigidbody;
        Vector3 m_Movement;
    
        void Awake ()
        {
            m_Animator = GetComponent<Animator> ();
            m_Rigidbody = GetComponent<Rigidbody> ();
        }
    
        void FixedUpdate ()
        {
            // キー入力の取得
            float h = Input.GetAxisRaw ("Horizontal");
            float v = Input.GetAxisRaw ("Vertical");
    
            // キー入力からベクトルを設定する
            m_Movement.Set (h, 0f, v);
    
            Move ();
            Turn ();
            Animate ();
        }
    
        private void Move ()
        {
            // ベクトルから移動量を取得する
            m_Movement = m_Movement.normalized * m_Speed * Time.deltaTime;
            m_Rigidbody.MovePosition (transform.position + m_Movement);
        }
    
        private void Turn ()
        {
            // 移動中でなければ回転処理は行わない
            if (!isRunning ())
                // NOP.
                return;
    
            // ベクトルから回転方向を取得する
            Quaternion targetRotation = Quaternion.LookRotation (m_Movement);
    
            // 回転処理
            transform.rotation = Quaternion.RotateTowards (transform.rotation, targetRotation, 360.0f * Time.deltaTime);
        }
    
        private void Animate ()
        {
            // 走るアニメーションの有効、無効化
            m_Animator.SetBool ("Running", isRunning ());
        }
    
        private bool isRunning ()
        {
            // ベクトルの長さでキャラクターが移動中か判断する
            return m_Movement.magnitude != 0f;
        }
    }
    

    CameraController.cs
    public class CameraController : MonoBehaviour {
        public Transform m_Target;      // カメラの追尾対象(プレイヤー)の位置
        public float m_Smoothing = 5f;  // カメラの追尾速度
    
        private Vector3 offset;         // カメラからm_Targetまでの距離、
                                        // カメラは常にプレイヤーからoffset分の距離を保つことになる
    
        void Start ()
        {
            // プレイヤーの初期位置からoffsetを初期化する
            offset = transform.position - m_Target.position;
        }
    
    
        void FixedUpdate ()
        {
            // プレイヤーの位置から追尾後のカメラ位置を算出する
            Vector3 targetCamPos = m_Target.position + offset;
    
            // プレイヤーの位置を元にカメラを移動させる
            transform.position = Vector3.Lerp (transform.position, targetCamPos, m_Smoothing * Time.deltaTime);
        }
    }
    

    소스 코드는 GitHub에 업로드 중입니다.

    적(장애물) 추가 에 계속됩니다.

    좋은 웹페이지 즐겨찾기