본문 바로가기

Unity/3D

Unity 3D 기본적인 이동 구현 [JavaScript]

반응형

이번에 졸업작품을 하게 되면서 Unity를 본격적으로 만지게 되었다.

평소에 프로그래밍을 전공하고 취미로도 프로그래밍을 했었고, 희망직무를 게임 프로그래머로 하였지만

실질적인 게임 제작은 이번이 처음이다.



역시나 새로운 플랫폼을 접하는것은 너무나도 어색하였고, 처음엔 헤매면서 남의 소스를 보면서 이것저것 만저보았지만

이해가 잘 가지 못하는 부분이 많았다.



그래서 택한 방법은 Unity 메뉴얼을 통한 API접근이었다.

설명이 간결히 되어있고 번역도 듬성듬성 되어있어서 읽는 것이 오래걸리긴 하지만

그럭저럭 괜찮았다.



이번 장에서는 기본적인 이동을구현하려 한다.

여기서 말하는 기본적인 이동이란? 캐릭터가 회전하지 않고 WASD가 고정적인 방향을 가르키며 나아가도록 하는 것이다.

거기에 점프를 구현해봤다.


먼저, 기본적인 Unity에 대한 조작법을 알고, 스크립트를 다룰 줄 안다는 가정하에 작성하겠다.


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

필요한 변수를 설명하겠다.


public var Speed : float; //속도를 저장한다.

public var rb : Rigidbody; // 본 캐릭터(물체)의 강체 컴포넌트를 저장한다.

private var mv : Vector3; // 이동방향을 계산할 벡터3 변수다.

public var jumpPower : float; //처음에 Unity를 통해서 고정값을 저장하는 점프력이다.

private var jp:float; // 변경할 수 있는 점프력이다.

private var h : float; //수평 방향을 저장한다.

private var v : float; //수직 방향을 저장한다.



## public으로 해놓은 변수는 유니티를 통해서 값을 받을 것이다.

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

다음은 함수다


jump() - 점프한다

run() - 이동한다.

OnCollisionEnter(col) - 지형과의 충돌을 감지한다.

FixedUpdate() - 매 프레임 불러질 함수다


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

적용법은 물체(예시로 cube)를 만들어서 스크립트를 적용 후

rigidbody (강체)를 적용하고


스크립트에 Speed, rb, jumpPower에 값을 적용해준다.


나는 20 / cube rb / 50을 적용하고

Edit -> Project Setting -> Physics -> gravity로 이동하여 중력(y축)을 -80 정도로 적용해두었다.


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

function Jump(){  

rb.AddForce(Vector3.up * jp,ForceMode.Impulse); 

//위로 순간적인 힘을 가한다. 위 방향에 점프력을 곱한 힘을 가하며, 순간힘(Impulse)를 적용한다.

jp=0f; //이후 점프력을 0으로 없애버린다. 이렇게 하면 점프를 다시하지 못한다.


function OnCollisionEnter(col){

 jp= jumpPower;

//지형 충돌 시 점프력을 되찾는다.

}

function FixedUpdate(){

h = Input.GetAxisRaw("Horizontal"); //수평 방향을 얻는다.

v = Input.GetAxisRaw("Vertical"); //수직 방향을 얻는다.

if(Input.GetButtonDown("Jump")) //점프키를 누르면 점프한다.

Jump();

run(); //이동한다. 별도의 if문이 없어도 되는 이유는, 수평,수직방향은 방향키나 WASD를 안누르면 적용이 안되기 때문이다.

}


function run(){ 

mv.Set(h,0,v); 

mv=mv.normalized * Speed * Time.deltaTime;

rb.MovePosition(transform.position + mv);


 //방향과 힘을 설정하여, 현포지션 + 값을 넣어 이동시킨다.

}

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


반응형