타임 파일럿 이라는 아케이드 게임있었다.
사실 난 접해보지 못한 오락실 게임이였는데, 당시 비행 슈팅게임의 한 획을 그은 게임이라고 한다.
보시는 것 처럼,
전투기가 8방향으로 움직인다.
유니티로 아군 기체를 위와 같은 움직임으로 만들어 보면 어떨까란 생각을 해본다.
하기 처럼 말이다.
위 처럼 8방향으로 동작하기 위해서는
8방향의 이미지가 모두 필요할 수 도 있지만, 필자는 하기 3장의 이미지를 활용하여 8방향을 구현해 보았다.
이미지 로테이션을 통해서 가능하다.
P1 은 가로 오른쪽,왼쪽
P2 는 상하
P3 는 대각선 4방향
코드는 하기와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class OnkeyPressMove : MonoBehaviour
{
public static int direction = 4;
public Sprite[] sprites = new Sprite[direction]; // 방향에 따른 이미지를 교체하기 위해서.
private SpriteRenderer spriteRenderer;
public float speed = 10; // 아군 비행기 속도
float vx = 0;
float vy = 0;
Rigidbody2D rbody; // 자연스러운 비행기 움직임을 위해서...
bool leftFlag = false;
// Start is called before the first frame update
void Start()
{
rbody = GetComponent<Rigidbody2D>();
rbody.gravityScale = 0;
rbody.constraints = RigidbodyConstraints2D.FreezeRotation;
spriteRenderer = GetComponent<SpriteRenderer>();
spriteRenderer.sprite = sprites[0];
}
void Update()
{
// 계속 시행한다
vx = 0;
vy = 0;
if ( Input.GetKey("right") && Input.GetKey("up"))
{ // 만약 오른쪽 키가 눌리면
vy = speed;
vx = speed; // 오른쪽으로 나아가는 이동량을 넣는다
spriteRenderer.sprite = sprites[2];
if (spriteRenderer.flipX == true)
{
this.transform.rotation = Quaternion.Euler(0, 0, -135);
}
else
this.transform.rotation = Quaternion.Euler(0, 0, 45);
//leftFlag = false;
}else if (Input.GetKey("left") && Input.GetKey("up"))
{ // 만약 오른쪽 키가 눌리면
vy = speed;
vx = -speed; // 오른쪽으로 나아가는 이동량을 넣는다
spriteRenderer.sprite = sprites[2];
if (spriteRenderer.flipX == true)
this.transform.rotation = Quaternion.Euler(0, 0, -45);
else
this.transform.rotation = Quaternion.Euler(0, 0, 135);
//leftFlag = false;
}
else if (Input.GetKey("right") && Input.GetKey("down"))
{ // 만약 오른쪽 키가 눌리면
vy = -speed;
vx = speed; // 오른쪽으로 나아가는 이동량을 넣는다
spriteRenderer.sprite = sprites[2];
if (spriteRenderer.flipX == true)
this.transform.rotation = Quaternion.Euler(0, 0, -135);
else
this.transform.rotation = Quaternion.Euler(0, 0, -45);
}
else if (Input.GetKey("left") && Input.GetKey("down"))
{ // 만약 오른쪽 키가 눌리면
vy = -speed;
vx = -speed; // 오른쪽으로 나아가는 이동량을 넣는다
spriteRenderer.sprite = sprites[2];
if (spriteRenderer.flipX == true)
this.transform.rotation = Quaternion.Euler(0, 0, 45);
else
this.transform.rotation = Quaternion.Euler(0, 0, -135);
}
else if (Input.GetKey("right"))
{ // 만약 오른쪽 키가 눌리면
speed = 20;
vx = speed; // 오른쪽으로 나아가는 이동량을 넣는다
leftFlag = false;
spriteRenderer.sprite = sprites[0];
spriteRenderer.flipX = false;
this.transform.rotation = Quaternion.Euler(0, 0, 0);
}
else if (Input.GetKey("left"))
{ // 만약 왼쪽 키가 눌리면
speed = 20;
vx = -speed; // 왼쪽으로 나아가는 이동량을 넣는다
// this.transform.Rotate(0, 0, -90);
leftFlag = true;
spriteRenderer.sprite = sprites[0];
spriteRenderer.flipX = true;
this.transform.rotation = Quaternion.Euler(0, 0, 0);
}
else if (Input.GetKey("up"))
{ // 만약 위쪽 키가 눌리면
speed = 20;
vy = speed; // 위 방향으로 나아가는 이동량을 넣는다
spriteRenderer.sprite = sprites[1];
spriteRenderer.flipX = false;
this.transform.rotation = Quaternion.Euler(0, 0, 90);
}
else if (Input.GetKey("down"))
{ // 만약 아래 키가 눌리면
speed = 20;
vy = -speed; // 아래로 나아가는 이동량을 넣는다
// Z축 90도 방향으로
spriteRenderer.sprite = sprites[1];
spriteRenderer.flipX = false;
this.transform.rotation = Quaternion.Euler(0, 0, -90);
}
}
void FixedUpdate()
{ // 계속 시행한다(일정 시간마다)
// 이동한다
rbody.velocity = new Vector2(vx, vy);
}
}
|
cs |
여기에도 중요한 포인트가 있다.
바로, 하기 함수를 사용하여 transform의 방향을 바꾼다는 것. 즉, 스프라이트의 Z축 각도를 개발자가 원하는 대로 변경할 수 있다. Quaternion 객체를 잘 활용하자.
this.transform.rotation = Quaternion.Euler(0, 0, 45);
감사합니다 :)
반응형
'앱 만들기 > 유니티2D 게임 만드는 방법' 카테고리의 다른 글
유니티-8방향으로 총알을 발사하다. (1) | 2021.07.01 |
---|---|
유니티-스프라이트 변경하기. (2) | 2021.06.30 |
유니티 - 디버그 로그 출력하기 (4) | 2021.06.28 |
유니티-화면 전환하기 (2) | 2021.06.19 |
유니티-충돌시 오브젝트 사라지게 하기 (2) | 2021.06.17 |
댓글