Priv's Blog

마우스 휠을 이용해 캐릭터가 발사할 총알 종류 바꾸기 본문

Dev. Study Note/Unity

마우스 휠을 이용해 캐릭터가 발사할 총알 종류 바꾸기

Priv 2020. 2. 29. 21:44

RGB 게임 제작하면서 추가한 기능.

게임 플레이 도중에 스프라이트를 변경하는 코드를 응용해 구현했다.

(중간 부분만 따로 자르기가 애매해서 전체 다 업로드)

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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class PlayerController : MonoBehaviour
{
    Rigidbody2D rigidbody2D;
    SpriteRenderer SpriteRenderer;
    ProjectileController projectileController;
 
    public Sprite[] RGB;
    public GameObject[] projectile;
 
    public float Speed = 7.0f;
    public int Life = 3;
 
    int n = -1;
 
 
    void Start()
    {
        rigidbody2D = GetComponent<Rigidbody2D>();
        SpriteRenderer = GetComponent<SpriteRenderer>();
    }
 
    void Update()
    {
        // Player Move
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
 
        Vector2 move = new Vector2(horizontal, vertical);
        Vector2 Position = rigidbody2D.position;
 
        //Position.x = (Position.x + Speed * horizontal * Time.deltaTime);
        //Position.y = (Position.y + Speed * vertical * Time.deltaTime);
 
        Position = Position + (move * Speed * Time.deltaTime);
        rigidbody2D.MovePosition(Position);
 
 
        // Player Sight
        Vector2 PlayerPos = rigidbody2D.position;
        Vector2 MousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
 
        float dy = MousePos.y - PlayerPos.y;
        float dx = MousePos.x - PlayerPos.x;
 
        float rotateDg = Mathf.Atan2(dy, dx) * Mathf.Rad2Deg;
 
        transform.rotation = Quaternion.Euler(0.0f, 0.0f, rotateDg);
 
        // 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);
        }
 
 
        // Player RGB Change
        if (Input.GetAxis("Mouse ScrollWheel"> 0)  // F
        {
            if (n >= 2)
            {
                n = 0;
                SpriteRenderer.sprite = RGB[n];
            }
            else
            {
                n++;
                SpriteRenderer.sprite = RGB[n];
            }
        }
        else if (Input.GetAxis("Mouse ScrollWheel"< 0)  // B
        {
            if (n <= 0)
            {
                n = 2;
                SpriteRenderer.sprite = RGB[n];
            }
            else
            {
                n--;
                SpriteRenderer.sprite = RGB[n];
            }
        }
 
 
 
 
 
 
 
 
    }
}
 
cs

 

Player Shoot 주석 부분 참고.

Instantiate()를 이용해 게임오브젝트를 복제하는데, 이 때 복제하는 게임오브젝트를 리스트 형태로 구현하면 된다.

코드 상에서는 projectile[ ] 형태로 리스트가 구현되어 있으며, Instantiate() 코드 안에 있는 projectile[n] 에서 n 변수는 플레이어의 색상을 바꾸기 위해 생성한 리스트에 쓸려고 선언한 변수 값.

마우스 휠을 위로 굴리면, n의 값이 1씩 늘어나고, 마우스 휠을 아래로 굴리면 n의 값이 1씩 감소한다.

이 n의 값을 이용해서 리스트에 저장된 스프라이트를 뽑아와 게임 플레이 도중, 마우스 휠을 이용해 캐릭터의 색상을 바꾸도록 구현했는데, 이 기능을 그대로 가져와 탄환의 색상 변경에도 적용시켰다.

 

 

Comments