우주선 이동, 회전, 소행성

MOON·2022년 12월 17일
0

유니티_VR_우주선

목록 보기
2/3
post-thumbnail

우주선 이동

빈 게임 오브젝트 만들기 : Head (위 : 0, 0, 0)
메인 카메라를 Head 자식으로 둠
앞으로 이동이 가능

이제 앞으로 이동시켜보자.

SpaceShipMovement라는 스크립트를 만들며 카메라가 바라보는 방향으로 이동이 가능하게 해야 한다.

	public GameObject Head;
    public GameObject Cam;
    public GameObject SpaceShip;
    
    void Update()
    {
        Head.transform.Translate(Cam.transform.forward * Time.deltaTime * 5f);
    }

Head 오브젝트가 카메라의 앞의 방향으로 이동이 되게하는 코드이다.

게임오브젝트 변수의 할당해주자.

실행해보면 앞으로 이동하는지 구분이 안간다.

그러므로 앞에 간단한 도형을 만들고 지나가는 느낌이 드는지 확인해보면 된다.

우주선 회전

    float CurrRot; // 현재 회전 값
    float PrevRot; // 이전 회전 값
    float DelRot;  // 현재 회전과 이전 회전과의 차이

회전값 차이를 통해 우주선의 우측, 좌측 회전을 결정한다.

보간함수를 이용한 회전보간으로

Quaternion.Lerp(시작값, 목표값, 시간)함수를 이용해 자연스럽게 회전하도록 하였다.

Quaternion.Euler()함수를 통해 오일러각을 쿼터니언 값으로 변경해주어 축의 값을 계산하기 원활하게 해주었다.

오일러각을 그대로 사용 시 축이 겹칠 수 있어 정확한 각도 계산이 힘들다.

이제 실행을 해보면 회전이 되는게 느껴지는데 문제가 있다.

비행기가 한번 회전을 하고 나면 중심 잡기가 어렵다. 회전을 안할시 원래 각도로 변경시켜야 한다.

위에 적은 회전 코드와 거의 비슷하다. if문을 통해 회전 유무를 판단하여 다르게 구현한다.

파티클

우주선이 이동만하면 재미없으니 간단한 소행성을 배치하여 우주 효과를 내보겠다.

StarSparrow - Prefabs - BonusContent
Asteroid Lava Blue
Asteroid Lava Red

아까 전 다운 받은 에셋을 통해 소행성을 배치하려 한다.

소행성 충돌 효과, 우주선 비행 효과를 주기 위해 에셋을 하나 다운 받는다.

Standard Assets 다운로드

필요한 부분만 임포트하자. 오류가 발생할 수 있다.

다운받은 파티클 중 AfterBunner 파티클을 계층 창에 이동

우주선의 자식 노드로 옮긴 뒤 위치를 우주선 뒤에 적절히 조절하자.

이제 소행성 충돌효과를 주려고 한다.

소행성 이펙트 : ExplosionMobile
ExplosionMobile를 Asteroid Lava Blue의 자식노드로 셋팅
ExplosionMobile를 비활성화
Explosion Physics Force / Particle System Multiplier 스크립트 비활성화

Asteroid 스크립트를 수정하자.

ExpObj 변수에 파티클을 할당시켜준다.

OnTriggerEnter을 통해 충돌시 활성화 시켜준 뒤 MeshRenderer 컴포넌트를 가져와 false를 한다.

이후 Invoke() 함수를 통해 시간이 지난 후 행성을 없애준다.

이렇게 만든 행성을 프리팹으로 만든 다음 배치하면 된다.

다음에는 간단한 메뉴, 우주선 선택 등을 만들겠다.

profile
나만의 공간

0개의 댓글