마시일이 발사 될때 그냥 직진이 아닌 유도탄이 발사되면 재미있지 않을까?
바로 하기 처럼 말이다.
오브젝트를 화면에 배치하고,
미사일 에는 BoxCollider 2D 와 Rigidbody 2D 를 적용.
전투기 에는 BoxCollider 2D 를 컴포넌트로 추가한다.
그리고, 마시일 구현부는 하기처럼 구현한다.
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
|
public class Chaser : MonoBehaviour
{
public string targetObjectName;
public float speed = 1;
GameObject targetObject;
Rigidbody2D rbody;
// Start is called before the first frame update
void Start()
{
// 추격할 타겟 오브젝트 이름을 넣는다.
targetObject = GameObject.Find(targetObjectName);
rbody = GetComponent<Rigidbody2D>();
rbody.gravityScale = 0; //중력 무시
rbody.constraints = RigidbodyConstraints2D.FreezeRotation; //Z축 회전무시
}
// Update is called once per frame
void FixedUpdate()
{
// 추격할 타겟 오브젝트의 방향을 구하기.(normalized : 방향은 유지하고 길이가 1인벡터 생성. 일정한 속도로 쫓아감)
Vector3 dir = (targetObject.transform.position - this.transform.position).normalized;
float vx = dir.x * speed;
float vy = dir.y * speed;
// 해당 방향으로의 속도를 세팅하기
rbody.velocity = new Vector2(vx, vy);
//x축을 넘어가면 반전하기
this.GetComponent<SpriteRenderer>().flipX = (vx < 0);
}
}
|
cs |
참고로, noralized 가 없을때는 두 오브젝트간의 거리를 계산하기에 거리가 멀때는 값이 커지고, 가까울때는 작아진다.
그렇기에 해당 값을 사용해서 속도를 조정하게되면 미사일이 빨라졌다가 점점 느려지게된다.
이는 특정 오브젝트별로 잘 다루어 사용하면 좋을거 같다.
감사합니다.
반응형
'앱 만들기 > 유니티2D 게임 만드는 방법' 카테고리의 다른 글
유니티-충돌 처리 하기(2) 게임 중지시키기 (1) | 2021.06.16 |
---|---|
유니티-충돌 처리 하기(1) 방향 전환 (1) | 2021.06.15 |
유니티-키보드로 오브젝트 움직이기(2) (2) | 2021.06.06 |
유니티-비주얼스튜디오 연동하기 IntelliCode 사용하기 (2) | 2021.06.01 |
유니티- 키보드로 오브젝트 움직이기. 상하좌우 (2) | 2021.05.31 |
댓글