본문 바로가기

Unity/3D

Unity 3D CharacterController를 이용한 움직임 제어 [C#]

반응형

캐릭터 제어 부분을 하면서 느낀 것은... javascript는 코딩이 참 정말정말 피곤하다.

자동완성도 없고.. 연관있는 코드가 안떠서 힘들었다...


`그래서 한번도 안해본 C#으로 갈아탔다. 이거로 어차피 자바스크립트처럼 스크립팅 하는 정도니까

차라리 이걸로 보고 따라하는게 더 편하더라카더라...



-----------------------------------------------------------------------------------------------------

1. Unity Chan을 사용했다. 


2. 카메라는 ThirdPersonCamera(s)을 구매하여 3인칭 카메라를 약간 손봐서 만들었다.


-------------------------------------------------------------------------------------------------

using System.Collections;

using System.Collections.Generic;

using UnityEngine;


[RequireComponent(typeof(CapsuleCollider))]


public class ctrlmove2 : MonoBehaviour {  

    [Tooltip("캐릭터의 이동속도")]

public float speed = 20.0f;

    [Tooltip("캐릭터의 점프력")]

    public float jumpPower = 30.0f;


    private float tmpJumpPower; //땅이 아닐경우 잔여 점프력을 저장하여 점차적으로 바닥을 향하도록 만든다.

private float X,Y;

private float DashTime, Dash=1.0f;

    private Vector3 dr;




    // Use this for initialization

    void Start () {

ctrler = GetComponent <CharacterController> ();

        

}


void FixedUpdate () { //매 프레임 불러와짐. 물리적 처리를 위함

        CharacterController();

        dr = new Vector3(0, 0, 0);

}


    void CharacterController() {

        if (Input.GetButtonUp("Vertical")) {

            DashTime = Time.time;

            Dash = 1.0f;

            

           

        } else if (Input.GetButtonDown("Vertical") && Time.time - DashTime <= 0.1f) { 

        Dash = 1.7f;

       

         }

     

Y = Input.GetAxis("Vertical");

X = Input.GetAxis("Horizontal");



        dr += transform.forward  * Y; //앞뒤에 대한 방향 및 속도를 연산한다.

        dr += transform.right * X; //좌우에 대한 방향을 연산한다.

        dr *= speed * Dash; //속도를 곱한다.

transform.right = Camera.main.transform.right; //3인칭 카메라가 회전을 하면 따라서 회전한다.

       

        if (ctrler.isGrounded) //땅인가?

        {

            

            if (Input.GetButton("Jump")) //점프를 눌렀는가?

            {

                

                tmpJumpPower += jumpPower * Dash; //초기 점프력 대입

            }

        }

        else

        {

            tmpJumpPower += Physics.gravity.y * 5 * Time.deltaTime; //중력에 따라서 점차 줄어든 후 아래로 향하도록 한다.

            

       

        }


        dr.y += tmpJumpPower;//연산된 y에 대한 힘을 적용한다.


        ctrler.Move(dr * Time.deltaTime); //연산한 벡터를 적용한다.

       





    }


-----------------------------------------------------------------------------------------

파일은 첨부하였다!

ctrlmove2-1.cs


하지만... 카메라는 저작권상 제가 막 올려드릴 수 없습니다 ㅎ..


---------------------------------------------------

여담이지만......

캐릭터콘트롤러를 이리저리 다뤄봤는데

결국은 지터? 랄까 캐릭터가 흔들리더군요


3인칭 카메라가 독자적으로 캐릭터를 쫓아가니 그게 눈에 다 보여서

어떻게 하나 고민하다가


캐릭터의 자식객체로 바꿔서 쫓아다니도록 하니

해결되었다.


하.... 토하는줄

반응형