Priv's Blog

마우스 위치로 총알 발사 구현 본문

Dev. Study Note/Unity

마우스 위치로 총알 발사 구현

Priv 2020. 2. 29. 22:05

1) 마우스의 벡터 값에 캐릭터의 벡터 값을 빼서 방향을 알아낸다.

2) 알아낸 방향을 Vector 변수에 저장한다.

3) 마우스를 클릭했을 때, 발사체(총알)을 복제해낸다.

4) 각각의 발사체 게임오브젝트에는 총알 이동과 충돌 시, 총알 사라짐 등을 구현할 스크립트가 할당되어 있다.

5) 복제된 발사체의 스크립트를 GetComponent. (프리팹의 컴포넌트를 가져오면 아무 소용이 없다.)

6) 발사체에 연결된 스크립트 내에 총알 발사를 위한 함수를 인자에 맞게 호출


7) 발사체에 할당되어 있는 스크립트에서는 6단계에서 전달 받은 인자에 맞게 총알을 이동시켜야 한다. rigidbody2D.AddForce(Vector2)를 이용하면 이동시킬 수 있다.

8) 충돌이 발생할 경우, 총알이 사라지도록 만들어야 한다. OnCollisionEnter2D를 이용해 구현할 것.

9) 필요에 따라 시간이 지나면 스스로 사라지도록 구현하는 것도 추가한다. transform.position.magnitude의 크기를 비교해서 사라지게 하는 방법이 있다. 타이머를 만들어 사라지게 만드는 것도 방법 중 하나.

 

자세한 것은 아래 코드를 참고할 것.

 

//PlayerController.cs

1
2
3
4
5
6
7
8
9
10
11
        // Player Shoot
        Vector2 Dir = (MousePos - PlayerPos);
 
        if (Input.GetMouseButtonDown(0&& n != -1// SEMI AUTO
        {
            GameObject projectileObject = Instantiate(projectile[n], transform.position, Quaternion.Euler(0.0f, 0.0f, rotateDg));
            
            projectileController = projectileObject.GetComponent<ProjectileController>();
            projectileController.Launch(Dir.normalized, 900);
        }
 
cs

 

//ProjectileController.cs

 

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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class ProjectileController : MonoBehaviour
{
    Rigidbody2D rigidbody2D;
 
    void Awake()
    {
        rigidbody2D = GetComponent<Rigidbody2D>();    
    }
 
    void Update()
    {
        if (transform.position.magnitude > 1000.0f)
        {
            Destroy(gameObject);
        }
    }
    
    public void Launch(Vector2 Direction, float Speed)
    {
        rigidbody2D.AddForce(Direction * Speed);
    }
 
    private void OnCollisionEnter2D(Collision2D collision)
    {
        Destroy(gameObject);
    }
}
cs
Comments