Unity/2D RPG

유닛 이동 by Unity

YunSeong 2021. 7. 7. 19:19
728x90
반응형

unity를 이용해서 횡스크롤 rpg 게임을 만들 것이다. 

딱히 이유는 없고 방학을 좀 더 알차게 보내려고 시작했다. 

ERROR는 게임 코드네임이다. 

 

Unity와 C#을 깊이있게 배운 것이 아니기 때문에 단어 선택이 좀 틀릴 수도 있다.

 

 

 

player 캐릭터를 

circleCollider2D와 boxCollider2D를 이용해서 collider을 설정해줬고

Rigidbody2D도 넣어주고 freezeRotation또한 해줬다.

 

playerController C#파일에 

아래와 같은 코드를 입력해서

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
float WalkSpeed = 4.0f;
int Direction;
Rigidbody2D rigid2D;
 
void Walk(int Direction)
{
    this.rigid2D.velocity = new Vector2(Direction * this.WalkSpeed, this.rigid2D.velocity.y);
}
 
void Start()
{
    this.rigid2D = GetComponent<Rigidbody2D>();
}
 
void Update()
{
    Direction = 0;
 
    if (Input.GetKey(KeyCode.D)) Direction = 1//입력에 따른 이동방향
    if (Input.GetKey(KeyCode.A)) Direction = -1;
    
    Walk(this.Direction);
}
cs

키보드의 A, D 버튼에 따라서 Direction을 정해주고

walk함수를 따로 정의해줘서 물체의 속도를 정해주는 방법을 사용했다. 

 

 

하지만 이렇게만 한다면 캐릭터의 방향이 이동방향을 향하지 않기 때문에 부자연스럽다. 그렇기에 

1
2
3
4
if (Direction != 0//케릭터의 이동방향과 몸방향을 일치
    {
        transform.localScale = new Vector3(Direction , 11); 
    }
cs

위 코드를 walk 함수에 입력해서 scale을 조정해서 캐릭터가 이동방향을 바라보게 했다. 

 

 

 

jump를 시키기 위해서 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Rigidbody rigid2D;
float jumpSpeed = 15.0f;
 
void Jump()
{
    this.rigid2D.velocity = new Vector2(this.rigid2D.velocity.x, this.jumpSpeed);
}
 
void Start()
{
    this.rigid2D = GetComponent<Rigidbody2D>();
}
 
void Update()
{
    if (Input.GetKeyDown(KeyCode.W)) Jump(); // 점프
}
 
 

키보드 W키를 인식해서 velocity의 y축 값을 적당한 jumpSpeed로 바꾸게 했다. 

 

 

 

 

 

addForce를 이용해서 이동을 시키게 된다면 플레이 할 때 더 직관적인 움직임이 안 나오는 경향이 있어서 속도를 변경 시키는 방법을 이용했다. 

728x90
반응형

'Unity > 2D RPG' 카테고리의 다른 글

회복 아이템 by Unity  (0) 2021.07.18
캐릭터(슬라임) by Unity  (0) 2021.07.18
원거리 공격 by Unity  (0) 2021.07.14
카메라 무빙 by Unity  (0) 2021.07.08
근접 공격 by Unity  (0) 2021.07.07