티스토리 뷰



1. if 사용


 소스코드

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
using UnityEngine;
 
public class UseIf : MonoBehaviour {
 
    // Update is called once per frame
    void Update () {
 
        if(Input.GetKeyDown(KeyCode.A))
        {
            KeyDown_A();
        }
 
        if(Input.GetKeyDown(KeyCode.B))
        {
            KeyDown_B();
        }
 
        if(Input.GetKeyDown(KeyCode.C))
        {
            KeyDown_C();
        }
 
    }
    private void KeyDown_A()
    {
        Debug.Log("A");
    }
    private void KeyDown_B()
    {
        Debug.Log("B");
    }
    private void KeyDown_C()
    {
        Debug.Log("C");
    }
}
 
cs


2. switch 사용


 소스코드

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
using UnityEngine;
 
public class UseSwitch : MonoBehaviour {
 
    void Update()
    {
        switch (Input.inputString)
        {
            case "A":
                KeyDown_A();
                break;
 
            case "B":
                KeyDown_B();
                break;
 
            case "C":
                KeyDown_C();
                break;
        }
 
    }
    private void KeyDown_A()
    {
        Debug.Log("A");
    }
    private void KeyDown_B()
    {
        Debug.Log("B");
    }
    private void KeyDown_C()
    {
        Debug.Log("C");
    }
}
 
cs

3. Dictionary, delegate 사용


 소스코드

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
using System;
using System.Collections.Generic;
using UnityEngine;
 
public class UseDictionaryDelegate : MonoBehaviour {
 
    Dictionary<KeyCode, Action> keyDictionary;
 
    void Start () {
        keyDictionary = new Dictionary<KeyCode, Action>
        {
            { KeyCode.A, KeyDown_A },
            { KeyCode.B, KeyDown_B },
            { KeyCode.C, KeyDown_C }
        };
    }
    
    // Update is called once per frame
    void Update () {
        if(Input.anyKeyDown)
        {
            foreach (var dic in keyDictionary)
            {
                if(Input.GetKeyDown(dic.Key))
                {
                    dic.Value();
                }
            }
        }
 
    }
 
    private void KeyDown_A()
    {
        Debug.Log("A");
    }
    private void KeyDown_B()
    {
        Debug.Log("B");
    }
    private void KeyDown_C()
    {
        Debug.Log("C");
    }
}
 
cs


4. 유니티에서 키보드 입력 값을 받는 세 가지 방법 비교


4-1 if 사용

장점 : 

1. 직관적임으로 이해가 쉬움


단점 : 

1. 입력하는 키의 종류가 늘어남에 따라 코드의 양이 늘어나며 중복이 심하다. 

2. if 문이 여러군데 중구난방으로 사용될 수 있을 가능성이 높아 관리의 어려움이 생길 수 있다.


4-2 switch 사용

장점 : 

1. 직관적임으로 이해가 쉽다. 

2. 하나의 switch문 안에 키보드 입력할 때의 로직을 작성하기 때문에 코드 관리가 용이하다.


단점 :  

1. if 문의 사용보다는 덜 하지만 입력하는 키의 종류가 늘어남에 따라 코드의 양이증가한다.

2.  KeyCode.A 는  소문자 a, 대문자 A 모두 가능하지만 switch문은 case에 사용된 대문자 A 만을 인식한다.


4-2 Dictionary, delegate 사용

장점 : 

1. 입력하는 키의 종류가 늘어나도 입력 키를 구분하는 코드의 증가가 없다. 

2. 코드 관리가 용이하다.


단점 : 

1. C# 과 Unity 초보자에게는 이해가 어려운 코드가 될 수 있다.

2. 키를 눌렀을 때 호출되는 함수의 형식이 다양할 경우 적용이 어렵다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
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
글 보관함