[뇌파 VR게임] #6 초능력1 하늘 날기 구현 1

in #kr6 years ago (edited)

뇌파와 VR을 이용한 초능력 체험 게임 시리즈 글입니다.


[게임화면]

이전글 - [뇌파 VR게임] #5 Unity VR앱 구성하기


오늘은 초능력 첫번째로 하늘을 나는 것을 구현해 보겠습니다. VR에서 이것을 해보면 약간 하늘을 나는 느낌을 갖기도 합니다. 다른 초능력들에 비해 느낌이 확실이 나는 것 중 하나죠 ㅎ

구현은 매우 간단히 해볼 것입니다. 뇌파를 측정하여 뇌파가 일정 수준 이상에 도달하면, 지정된 경로로 이동하게끔 할 것입니다. 지면에 있다가 하늘로 날아 오르게 말이죠.

Player GameObject 생성

게임은 1인칭 시점으로 구성할 것입니다. 따라서 주인공 시점으로 화면을 표시하기 위해 Player라는 새로운 GameObject를 생성합니다. 이것의 이름을 "Player"로 수정합니다. 그리고 주인공의 시점에 따라 화면을 표시하기 위해 Main Camera를 Player 밑으로 옮깁니다. 그리고 Player의 Transform 컴포넌트의 값을 아래와 같이 산 중턱에 놓이도록 설정합니다.
image.png

그 다음 Main Camera의 Transform 컴포넌트 값을 아래와 같이 변경합니다. 여기서는 Player의 위치에서 눈높이 카메라를 위치시켰습니다.
image.png

그리고 Player에 Character Controller 컴포넌트를 추가합니다.
image.png
추가하는 방법은 Player를 선택한 후에 Inspector창에서 Add Component를 눌러서 Character Controller를 추가합니다. 그리고 위 그림처럼 Center 속성의 Y값을 1로 수정합니다.

한 번 Unity를 실행시켜 보겠습니다. Game창에 산 중턱에서 내려다 보는 화면이 표시됩니다.
image.png

Waypoints 설정

그러면 Player를 이동시키기 위해 Waypoints를 설정해 보겠습니다. 지정된 Waypoints 순서대로 Player를 이동시키면 Main Camera로 같이 이동하기 때문에 Player가 이동하는 효과가 납니다.

먼저 새로운 GameObject를 만들고 이름을 "Waypoints"라고 수정합니다. 그 다음 Player의 Transform 컴포넌트 속성값과 같이 바꾼 후에, 추가적으로 Scene창에 시각적으로 표시하기 위해 레이블을 지정합니다. 여기서는 노란색으로 선택했습니다. 그러면 Scene창에 Waypoints라는 레이블이 표시됩니다.
image.png

다음으로 Waypoints들을 관리하기 위해 Tag를 추가합니다. 아래 그림과 같이 Inspector창에서 Add Tag를 하여 "WAY_POINT"라고 태그를 하나 생성합니다.
image.png

이제 이 Waypoints 하위에 Waypoint 들을 추가합니다. 첫번째 point는 하늘 높이 위치시킵니다. 바로 날아오르는 것이죠. 위치시키는 방법은 직접 값을 입력해도 되지만 Scene창에서 object를 끌어서 이동시켜도 됩니다.
image.png

Waypoint는 Player 객체가 이곳에 도달하면 다음 Waypoint로 이동하게끔 구현되어야 합니다. 이를 위해 도달했는지 체크하기 위해 Sphere Collider 컴포넌트를 point에 추가합니다. 그리고 반드시 Is Trigger를 체크합니다. 그래야만 어떤 물리적 충돌 현상이 발생하지 않고 Waypoint 도착을 확인할 수 있습니다. 마지막으로 point를 Scene에 시각적으로 표시하기 위해 레이블 색상을 지정해 줍니다. 여기서는 파란색으로 지정했습니다.

두번째는 저 멀리 불 근처 위쪽으로 정합니다. 참고로 Waypoints 생성과 같이 비슷한 Object를 복사하여 새로 만들 때 간편한 단축키는 "Ctrl+D"입니다. 윈도우즈 기준입니다.

세번째는 불 앞으로 합니다. 왜냐하면 두 번째 미션이 바로 불끄기 이니까요.

바닥에 내려올 때 튀어오르는 느낌을 주기 위해 point를 하나 더 생성합니다.

Waypoints들을 대략적으로 설정했습니다. 나중에 보다 정교하게 설정해 보겠습니다. 그런데 이게 쉽지 않네요. Waypoints을 연결하는 부드러운 경로를 생성해야 하는데, 어떤 경우에는 Slerp이라는 알고리듬이 제대로 솔루션을 못찾는 경우가 발생합니다. 이건 나중에 좀 더 알아보겠습니다.

Waypoints를 Scene창에 표시

Scene뷰에 Waypoint들을 선으로 연결지어 이동 경로를 보기 쉽게 해보겠습니다.
Project창에서 Scripts라는 폴더를 생성하고 스크립트를 하나 추가합니다. 이름은 DisplayWaypoints라고 변경하고 아래와 같이 코딩합니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DisplayWaypoints : MonoBehaviour
{
    // way line color
    public Color IineColor = Color.yellow;
    // arry of transforms for waypoints
    private Transform[] points;

    private void OnDrawGizmos()
    {
        // gizmos color
        Gizmos.color = IineColor;
        // extract waypoints objects
        points = GetComponentsInChildren<Transform>();
        // 
        int next_idx = 1;
        //
        Vector3 curr_pos = points[next_idx].position;
        Vector3 next_pos;

        // draw lines
        // note that we start from the index 1 since the index 0 is the group itself
        for (int i = 1; i < points.Length - 1; i++)
        {
            next_pos = points[++next_idx].position;
            // draw
            Gizmos.DrawLine(curr_pos, next_pos);

            // update the current position
            curr_pos = next_pos;
        }
    }

    // Use this for initialization
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {
    }
}

그러면 Scene창에 아래와 같이 노란색으로 Waypoints들이 연결된 선이 표시됩니다.

image.png


다음에 이어서 waypoints 들을 이동하는 부분을 구현해 보겠습니다.

오늘의 실습: 하늘을 나는 기분은 어떤지 상상해 보세요.

Coin Marketplace

STEEM 0.18
TRX 0.15
JST 0.028
BTC 63064.93
ETH 2468.39
USDT 1.00
SBD 2.55