1. 터치로 플레이어를 위, 아래로 움직이자

...더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    private void TouchMove()
    {
        if(Input.touchCount > 0)
        {
            Touch _touch = Input.GetTouch(0);
            float _touchPosY = Camera.main.ScreenToWorldPoint(_touch.position).y;
            
            switch (_touch.phase)
            {
                case TouchPhase.Began:
                    touchDeltaY = _touchPosY - transform.position.y;
                    break;
                case TouchPhase.Moved:
                    rb2d.MovePosition(new Vector2(0f, _touchPosY - touchDeltaY));
                    break;
                case TouchPhase.Ended:
                    rb2d.velocity = Vector2.zero;
                    break;
            }
        }
    }
cs

이 게임에서 플레이어 조작은 위, 아래만 조절 하면 되므로 Y측만 움직입니다.

게임화면 어디에 터치하여도 동일한 움직임을 보여주도록 하기 위해, 터치 시작 점을 기준좌표로 플레이어가 움직이도록 하였습니다.

 

_touch : 터치 조작 상태를 저장합니다. 이 _touch 필드의 상태 값(Began, Moved, Ended)을 통해 터치 입력을 상황에 따라 다르게 처리합니다.

_touchPosY : 화면 상의 터치 된 위치를 레이캐스트 방식으로 구해서 저장합니다.

_touch.Began : 터치를 시작했을 때 입니다.  (터치 위치 - 플레이어 위치)로 기준점을 구해서 touchDeltaY에 저장합니다.

_touch.Move : 터치로 드래그 했을 때 입니다. (터치 위치 - 기준점 위치[touchDeltaY])를 통해 플레이어를 위, 아래로 움직입니다.

플레이어의 움직임은 RigidBody를 통해 수행합니다.

_touch.Ended : 터치가 종료되었을 때 입니다. RigidBody의 velocity에 (0, 0)을 주어 플레이어를 멈춥니다. 

 

2. 플레이어 꼬리의 화염 이펙트 처리

플레이어의 꼬리에 있는 화염 이펙트 처리는 라인 렌더러를 이용합니다.

궤적이나 미사일 화염을 간단히 표현하고 싶을떄 상당히 유용한 컴포넌트입니다.

...더보기
1
2
3
4
5
6
7
8
9
    private void ProcessBackFire()
    {
        float _length = (StatusManager.instance.GetScrollSpeed() * 20f) / StatusManager.instance.scrollMaxSpeed;
        backFire.SetPosition(1new Vector3(_length, 0f, 0f));
 
        float _widthHead = Random.Range(0.1f, 0.4f);
        float _widthTail = Random.Range(0.01f, 0.1f);
        backFire.SetWidth(_widthHead, _widthTail);
    }
cs

게임의 디테일을 위해 현재 속도에 따른 꼬리 화염 길이를 조절합니다.

: 화염길이(_length) = (현재속도 * 20) / 최고속도

를 통해서 구합니다.

 

역시 화염이 흩날리는 디테일을 위해 화염의 머리와 꼬리 부분의 값을 랜덤으로 줍니다.

(_widthHead, _widthTail)

 

8번 줄과 같이 SetWidth로 머리와 꼬리 폭을 라인렌더러에 적용하면 끝납니다.

화염은 굉장히 빠르게 흩날리기 때문에, 따로 코루틴등으로 변화에 딜레이를 주지 않고 이 루틴을 계속 매 프레임 마다 호출해주면 화염이 뿜어져 나오는 것처럼 보이게 됩니다.

 

Posted by Haedo
,