[Unity]20.오큘러스 퀘스트 응용 슈팅게임 #3 - 텍스트 문구와 진동

안녕하세요 유랑입니다.



지난 시간에 이어서 오큘러스 퀘스트를 이용한 슈팅게임을 만들어 보겠습니다.

텍스트 문구, 사운드, 진동 효과에 대해 알아볼게요^^




1. 텍스트 문구와 진동



1-1) 텍스트 문구 - ㉠Canvas



총을 쏠 때 총알의 갯수가 보이면 좋겠죠?

텍스트 문구를 추가해줄 차례입니다.

Canvas를 이용할게요.






Render Mode는 꼭 World Space로 설정해 주셔야.

해당 위치에 고정이 됩니다!!!






1-2) 텍스트 문구 - ㉡Text



Canvas 밑으로 텍스트도 추가해 주세요.

렉트 트랜스폼을 캔버스 크기에 맞게 늘려주시고,

폰트와 글자 크기도 조정해 주세요~~~






만들어진 텍스트 문구 오브젝트는 총 밑으로 넣어주겠습니다.





총을 잡았을 때 총알의 갯수를 보여줄 스크립트를 추가해 주겠습니다.



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

public class ShootIfGrabbed : MonoBehaviour
{

    private SimpleShoot simpleShoot;
    private OVRGrabbable ovrGrabbable;
    public OVRInput.Button shootingButton;
    public int maxNumberOfBullets = 10;
    public Text bulletText;

    // Start is called before the first frame update
    void Start()
    {
        simpleShoot = GetComponent();
        ovrGrabbable = GetComponent();
        bulletText.text = maxNumberOfBullets.ToString();
    }

    // Update is called once per frame
    void Update()
    {
        if (ovrGrabbable.isGrabbed && OVRInput.GetDown(shootingButton, ovrGrabbable.grabbedBy.GetController()) && maxNumberOfBullets > 0)
        {
            simpleShoot.TriggerShoot();
            bulletText.text = maxNumberOfBullets.ToString();
            maxNumberOfBullets--;
        }
    }
}



총에 스키립트를 추가 후 텍스트 문구를 넣어주겠습니다.

그리고 트리거 버튼과 총알 갯수도 설정해 주시면 됩니다.








1-3) 사운드 적용



총알 소리가 없으니 허전하겠죠.

총에 Audio Source 컴포넌트를 추가해 주신 다음,

Spatial Blend를 이용해 3d로 설정해 주세요.

VR 공간에서 사운드를 입체감 있게 들을 수 있습니다.






기존의 ShootIfGrabbed 스크립트에 오디오 관련 기능을 추가하겠습니다.



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

public class ShootIfGrabbed : MonoBehaviour
{

    private SimpleShoot simpleShoot;
    private OVRGrabbable ovrGrabbable;
    public OVRInput.Button shootingButton;
    public int maxNumberOfBullets = 10;
    public Text bulletText;
    public AudioClip shootingAudio;

    // Start is called before the first frame update
    void Start()
    {
        simpleShoot = GetComponent();
        ovrGrabbable = GetComponent();
        bulletText.text = maxNumberOfBullets.ToString();
    }

    // Update is called once per frame
    void Update()
    {
        if (ovrGrabbable.isGrabbed && OVRInput.GetDown(shootingButton, ovrGrabbable.grabbedBy.GetController()) && maxNumberOfBullets > 0)
        {
            GetComponent().PlayOneShot(shootingAudio);
            simpleShoot.TriggerShoot();
            bulletText.text = maxNumberOfBullets.ToString();
            maxNumberOfBullets--;
            if (maxNumberOfBullets <= 0) maxNumberOfBullets = 10;
        }
    }
}


사운드 소리는 무료로 가져와도 되지만,

에셋에 있던 문 소리를 넣어봤습니다ㅎㅎ








1-4) 진동 효과



총을 쏠 때 컨트롤러에 진동효과가 있으면 좋겠죠?

VivrationManager를 만들어 주겠습니다.






계속 사용해주기 위해서 싱글턴 처리와

진동효과 기능을 메소드로 만들어 주었습니다.



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

public class VibrationManager : MonoBehaviour
{
    public static VibrationManager singleton;

    // Start is called before the first frame update
    void Start()
    {
        if (singleton && singleton != this) {
            Destroy(this);
        }
        else
        {
            singleton = this;
        }
    }

    public void TriggerVibration(AudioClip vibrationAudio, OVRInput.Controller controller)
    {
        OVRHapticsClip clip = new OVRHapticsClip(vibrationAudio);

        if (controller == OVRInput.Controller.LTouch)
        {
            OVRHaptics.LeftChannel.Preempt(clip);
        }
        else if (controller == OVRInput.Controller.RTouch)
        {
            OVRHaptics.RightChannel.Preempt(clip);
        }
    }
}



진동은 값을 이렇게 바꾸면서 줄 수 있는데 참고해 주세요^^





진동 효과를 조절해 주기위해서 해당 코드도 추가해 줄게요!!





ShootIfGrabbed 스크립트에 해당 기능을 넣어주겠습니다.

트리거 버튼을 눌렀을 때 진동효과를 넣어주는 코드입니다.








2. 마무리



오늘 강의는 여기까지입니다.

오큘러스 퀘스트를 이용해 텍스트 문구와 사운드, 진동 주는걸 배워보았습니다.

슈팅게임이라고 말하기는 모자르지만 대략적인 기능을 적용해 보았네요.

오늘도 고생하셨습니다.

감사합니다.




수업자료: 오큘러스 퀘스트 응용 슈팅게임 #3 - 텍스트 문구와 진동




댓글

Designed by JB FACTORY