Name Last Update
.vscode Loading commit data...
Assets Loading commit data...
ProjectSettings Loading commit data...
UnityPackageManager Loading commit data...
.gitignore Loading commit data...
LICENSE Loading commit data...
README.md Loading commit data...

대문

Unity-OpenVR-Shooter-Template
유니티 OpenVR 슈터 템플릿

사용하기 쉽게 템플릿화 되어 완성된 유니티 VR 슈터 게임 제작 템플릿입니다.

Oculus VR 과 HTC Vive (Steam VR) 에 모두 대응합니다.

총 모듈만 따로 때어 FPS 게임을 제작할때 사용할 수 있습니다.

상세한 설명 주석 달아놨음. 이것 기반으로 만듬
https://github.com/IJEMIN/Unity-OpenVR-Power-Blade-Example


다운로드

최신 버전의 패키지를 releases 에서 받아주세요.
저장소에는 현재 작성중인 미완성의 코드가 포함되 있을 수 있습니다.

제공하는 기능

코드 동작이 내부에서 간결하게 완결되어 있어, 드래그-드롭으로 쓸 수 있습니다.

VR 트래킹 기능

  • 현실 부위 1:1 트래킹
  • VR 컨트롤러 입력 대응 함수 제공
  • 간결한 코드와 높은 확장성

VR 인터렉션과 VR UI

  • VR 카메라가 응시하는 사물과 상호작용 가능
  • 상호작용 이벤트를 제공
  • 상호작용 UI 예제 첨부

건 슈터 (FPS Shooter) 기능

  • 단발/연사
  • 피탄 이펙트
  • 발사 이펙트
  • 재장전
  • 증강현실 탄약 UI
  • 간결한 외부 함수
    • Gun.Reload - 장전
    • Gun.Fire - 발사

선행조건

유니티 Input Manager 에 OpenVR에 대응되는 Axes 이름이 지정되어 있어야 합니다.
각 스틱과 버튼에 대한 식별자는 유니티 OpenVR 입력 테이블 문서 에서 찾을 수 있습니다.

이 템플릿 프로젝트에는 해당 설정이 미리 지정되어 있으므로 별다른 설정을 요구하지는 않습니다.
미리 설정된 VR Input 테이블은 Edit > Proejct Settings > Input Manager 에서 확인할 수 있습니다.

VR 컨트롤러에 대응하는 자세한 원리는 VRInput 스크립트의 주석에 있습니다.

동작과 사용 방법

미리 만들어진 예제 씬을 참고하면 좋습니다.

프리팹 Prefab

미리 만들어진 예제 프리팹을 제공합니다.

  • VR Player: VR 카메라와 왼손과 오른손 트래킹, (사람) 키 대응이 미리 완성되어 있는 프리팹입니다.
  • Gun: 사격할수 있는, 미리 완성된 총 입니다.
  • Cube: Gun 에 의해 데미지를 받아 파괴될 수 있는 큐브 입니다.

VR 컨트롤러 트래킹

트래킹1
어떤 오브젝트든 VRControllerTracking 만 붙여주면, 현실의 VR 컨트롤러와 위치와 동기화됩니다.

트래킹2
부착한 다음, 원하는 추적 부위를 지정해주세요.

위치와 회전 동기화는 로컬 좌표계를 기준으로 합니다.

VR 컨트롤러 입력 감지

VRInput 를 통해 왼손과 오른손 VR 컨트롤러의 현재 입력을 확인할 수 있습니다.

두가지 정적 함수를 제공합니다.

  • bool GetVRButtonDown(Button button)

    • VR 컨트롤러의 방아쇠 버튼을 막 누른 그 한 순간에만 true 를 반환
    • 클릭이나 단발 사격을 구현할때 사용할 수 있습니다
  • bool GetVRButton(Button button)

    • VR 컨트롤러의 방아쇠 버튼을 누르는 동안 지속적으로 true 를 반환

두 함수 모두 입력으로 방아쇠 버튼의 종류를 받습니다.

  • LeftIndex: 왼손 VR 컨트롤러의 검지 방아쇠
  • RightIndex: 오른손 VR 컨트롤러의 검지 방아쇠
  • LeftGrip: 왼손 VR 컨트롤러의 그립(쥐는) 방아쇠
  • RightGrip: 오른손 VR 컨트롤러의 그립(쥐는) 방아쇠

VR 입력 대응 예시 코드

예제의 GunController 스크립트는 VR 입력에 따라 Gun 을 제어하는 스크립트 입니다.
별다른 코드 없이, GetVRButtonDown 와 GetVRButton 으로 입력을 체크하여 총을 제어합니다.

검지 방아쇠를 당기고 있는 동안 계속 총을 발사합니다.
그립 방아쇠는 Down 함수를 사용하여, 쥐는 그 한 순간에만 재장전을 합니다.

    public Gun gun;

    void Update()
    {
        if(VRInput.GetVRButton(VRInput.Button.RightIndex))
        {
            gun.Fire();
        }

        if(VRInput.GetVRButtonDown(VRInput.Button.RightGrip))
        {
            gun.Reload();
        }
    }

VR 인터렉션과 VR UI

VR에서 UI와 상호작용하는 예제가 데모에 있습니다.
상호작용 자체는 UI가 아니더라도, 콜라이더를 가진 다른 모든 오브젝트와도 가능합니다.

데모의 VR UI Canvas 오브젝트에 있는, Interatable UI Image 를 플레이어가 응시하면 색이 바뀝니다.
다시 다른 곳을 바라보면 원래 색으로 돌아갑니다. 플레이어가 해당 오브젝트를 바라보는 상태에서 오른손 검지 방아쇠를 당기면 색이 무작위로 지정됩니다.

사용법

선행조건

  • 레이캐스팅을 통해 감지하므로, 상호작용할 물체는 3D 콜라이더 컴포넌트를 가지고 있어야 합니다.
  • UI 오브젝트도 예외없이 3D 콜라이더를 가져야 합니다.

절차

  • 카메라 VREyeRaycaster 스크립트를 부착합니다.
    VRRaycaster
    • 해당 스크립트는 응시하고 있는 오브젝트가 가진 함수를 발동시킬 수 있습니다.
  • 인터렉션이 필요한 오브젝트에게 콜라이더를 부착합니다.
    VRUICollider
  • 인터렉션할 오브젝트에게 VRInteractable 스크립트를 부착합니다.
    VRInteractable
    • 이 스크립트는 세가지 유니티 이벤트를 제공합니다. 이들은 VREyeRaycaster에 의해 자동으로 발동됩니다.
      • OnClick: VR 오른손 컨트롤러의 검지 방아쇠를 클릭하면 발동됩니다.
      • OnVREyeEnter: VREyeRaycaster 를 가진 카메라의 시선 중심에 오브젝트가 들어오는 순간 발동됩니다.
      • OnVREyeExit: VREyeRaycaster 를 가진 카메라의 시선이 오브젝트를 벗어나는 순간 발동됩니다.
  • 원하는 유니티 이벤트의 슬롯을 추가하고, 연동할 함수를 등록합니다.

건 슈터 Gun Shooter

캡슐화 되어있습니다. 그냥 프리팹을 가져다 쓰면 됩니다.

총프리팹

외부 함수로 Gun.Fire 와 Gun.Reload 를 제공하여, 총을 쏘고 재장전 할 수 있습니다.

총알 데미지 처리

IDamageable 인터페이스를 상속받는 오브젝트는 총에 의해 데미지를 입을 수 있습니다.

예시 코드


public class HitCube : MonoBehaviour,IDamageable {
    public float hp = 100f; 
    public void OnDamage(float damage)
    {
        Debug.Log("큐브가 맞았다!");
        hp -= damage;

        if(hp <= 0)
        {
            Destroy(gameObject);
        }
    }
}

크레딧과 연락처

I_Jemin

  • 메일: i_jemin@hotmail.com
  • 블로그: ijemin.com

기타

유니티 애셋 스토어에서 제공되는 무료 애셋을 사용하였습니다.
이 프로젝트는 교육용입니다.

상업적 용도로 해당 애셋들을 사용하지 않았으며, 라이센스 문제가 있는 모델과 음원은 추후 삭제하거나 대체할 것입니다.

Unity-OpenVR-Shooter-Template

Easy to use VR Shooter template for Unity OpenVR Input System. Works for Oculus Rift and Vive.

Only use Unity built-in VR codes.

Credit

I_Jemin (i_jemin@hotmail.com, ijemin.com)