응용프로그램/유니티(Unity)

Unity2D_캐릭터 움직이기

zelkova 2017. 2. 8. 10:13

<목차로 돌아가기>


 Unity2D_캐릭터 움직이기

GameObject에서 Create Empty를 클릭하고 Player로 이름을 바꿔줍니다.




임의의 그림파일(gif추천)을 객체에 드래그 해 주시고~




Inspector -> Add Component -> Physics 2D를 클릭!



그리고 Rigibody 2D를 클릭!



RigidBody2D 컴포넌트에 중력속성값을 0으로 설정합니다.

0이 아니면 아래로 떨어집니다.



2D물리컴포넌트를 장착했으니 2D물리컴포넌트를 조작할 스크립트를 작성해 봅시다. 


하이라키에서 Player 객체를 클릭 -> Inspector 창의 Add Component 클릭 ->New Script에서 Player로 이름을 지정하고 C# 스크립트를 생성합니다.



생성한 스크립트를 더블클릭하면! C# 소스를 넣을 수 있는 창이 뜨는데 아래와 같이 입력합니다.



  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;

  4. public class Player : MonoBehaviour {

  5.     private Animator animator;

  6.     Rigidbody2D rb2d;
  7.     Vector2 MoveVelocity;
  8.     public float moveSpeed=10;

  9. void Start () 
  10.         {
  11.            rb2d = GetComponent<Rigidbody2D> ();
  12. }
  13. void Update () 
  14.         {
  15.            Vector2 moveInput = new Vector2(Input.GetAxisRaw("Horizontal"),
               Input.GetAxisRaw("Vertical"));

  16.            MoveVelocity = moveInput.normalized*moveSpeed;
  17. }

  18.     void FixedUpdate()
  19.     {
  20.       rb2d.MovePosition(rb2d.position+MoveVelocity*Time.fixedDeltaTime); 
  21.     }
  22. }

15줄

Player에서 생성한 2D물리컴포넌트를 rb2d로 명명합니다.


20줄 

좌, 우, 위, 아래를 입력받습니다.

wasd가 방향키입니다.


22줄 

움직임을 정규화하고 여기에 속도를 곱해서 속력을 지정합니다.


27줄

지정한 수치(현재위치+방향*속력)로 2D물리컴포넌트를 움직입니다.





 기타

Ridgidbody로 캐릭터 움직이는 방법은

velocity, addforce, position이 있다.


position을 사용할시에는 velocity와 addforce 고장난다 ㅋㅋ ㅠㅠ




  1. float hor = input.getAxis("Horizontal");
  2. float xVel = GetPlatform().GetComponent<Rigidbody2D>().velocity.x;

  3. public float GetSpeedOnMovingPlatform(float speed) {
  4.    if (OnMovingPlatform()) {

  5.       if ((hor < 0 && xVel < 0) || (hor > 0 && xVel > 0)) 
  6.       {
  7.          speed = Mathf.Abs(xVel) + speed;
  8.       } 
  9.       else if ((hor > 0 && xVel < 0) || (hor < 0 && xVel > 0)) 
  10.       {
  11.          speed = Mathf.Abs(Mathf.Abs(xVel) - speed);
  12.       }
  13.       else if (hor == 0) 
  14.       {
  15.          speed = Mathf.Abs(xVel);
  16.       }
  17. }





반응형