티스토리 뷰



게임에 있어서 움직인다는 것은 가장 중요한 것이다.


시간과 공간이 있어 게임뿐만아니라 이 물질세계가 구현이 되는 것이고,

그것은 지배할 수 있다는 것은 신의 권능을 위협한다는 것.

그러므로 우리는 이 작고 거대한 세계를 지배하기 위한 첫번째 수단으로 시간과 공간을 지배해야만 하는 것이다....

권력에 대한 야망이... 우리의 전두엽에서 비


개소리 그만 집어 치우고

유니티에서는 포지션을 컨트롤 할 수 있는 방법이 상당히 여러가지가 있습니다.

그 중에서 대표적인 것들을 몇 개 꼽아서

스크립트와 영상으로 비교해서 보여드리겠습니다.


영상부터 보시죠.



총 7개의 움직임인데요,

딱봐도 눈에 띄는 게 두 가지가 있죠.

어떤 게 어떤 방식으로 이동했는지 한 번 맞춰보세요.

스크립트 올려드릴게요.

다들 업데이트 문에서 움직이게끔했는데

타입 별로 다 다르게 움직이게 구현했습니다.


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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Hero : MonoBehaviour {
 
    public enum eMoveType
    {
        Position,
        Translate,
        MoveToward,
        Lerp,
        Slerp,
        AddForce,
        CharacterController,
    }
    
    [SerializeField]
    eMoveType moveType;
    [SerializeField]
    Rigidbody rb;
    [SerializeField]
    CharacterController cc;
    [SerializeField]
    Animation anim;
    [SerializeField]
    Transform startTrans;
    [SerializeField]
    Transform endTrans;
 
    [SerializeField]
    float speed = 3;
    float startTime;
    void Start () {
        anim.Play("run@loop");
        startTime = Time.time;
    }
    bool isNotMoving;
    void MoveEnd()
    {
        anim.Play("idle@loop");
        isNotMoving = true;
    }
    
    void Update () {
        if (isNotMoving)
        {
            return;
        }
        switch (moveType)
        {
            case eMoveType.Position:
                {
                    transform.position = transform.position + new Vector3(speed, 00* Time.deltaTime;
                }
                break;
            case eMoveType.Translate:
                {
 
                    transform.Translate(new Vector3(00, speed) * Time.deltaTime);
                }
                break;
            case eMoveType.Lerp:
                {
                    float distCovered = (Time.time - startTime) * speed;
                    float Length = 9// 미리 설정해놓음
                    transform.position = Vector3.Lerp(startTrans.position, endTrans.position, distCovered / Length);
                    // 시작지점, 끝지점, 지금 어느정도 왔는지!
 
                }
                break;
            case eMoveType.MoveToward:
                {
                    transform.position = Vector3.MoveTowards(transform.position, endTrans.position, speed * Time.deltaTime);
                }
                break;
            case eMoveType.Slerp:
                {
 
                    float distCovered = (Time.time - startTime) * speed;
                    float Length = 9// 미리 설정해놓음
                    transform.position = Vector3.Slerp(startTrans.position, endTrans.position, distCovered / Length);
                }
                break;
            case eMoveType.AddForce:
                {
                    rb.AddForce(new Vector3(speed, 00));
                }
                break;
            case eMoveType.CharacterController:
                {
 
                    cc.Move(new Vector3(speed, 00* Time.deltaTime);
                }
                break;
        }
        if ((transform.position - endTrans.position).magnitude < 0.1f)
        {
            MoveEnd();
        }
    }
}
cs



영상 정답 알려드리면요 위에부터 

  • Position,
  • Translate,
  • MoveToward,
  • Lerp,
  • CharacterContoller.Move,
  • RigidBody.AddForce,
  • Slerp

입니다!


speed는 모두 똑같게 만들었습니다.

여기서 가장 작동 방식이 특이한 것은 

AddForce입니다.

RigidBody라는 강체에 힘을 줘서 움직이게 했지요.

당연히 캐릭터를 움직일 때 저렇게 움직이게 하는 분은 없겠지만

투사체 공격을 구현한다든지

운송수단이나 여러가지 측면에서 활용할 수 있는 이동방식입니다.


Slerp도 특이하게 보이는데요.

애시당초 Slerp는 구체를 기준으로 쓰이는거라서요

단순 이동에 Slerp를 쓰는 일은 없겠지만! 각도라든지 구체 이동이라든지 활용할 곳은 있습니다!

실제로 쓴적은 저는 없습니다.


아무튼 여러가지 이동방법이 있다는 것은

여러가지 이동의 의도가 있다는 거겠죠.

필요한 이동을 각자 알아서 잘 구현하시길 바랍니다 ㅎㅎ

댓글
최근에 올라온 글
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