(Unity・Oculus)VR空間内で対象に変化を加える(RaycastとAボタンの活用)

(1)LineRendererの設定

  • 新規にCreate Emptyを作成
  • 名前を「RayController」に変更
  • 「Line Renderer」コンポーネントを追加
  • 「Width」を「0.01」に変更
  • 減衰曲線は自由に設定
  • マテリアルを作成して好きな色を設定

 

(2)ブロック(対象物)の作成

  • 新規にCubeを作成
  • 名前を「Block」に変更
  • 「Tag」に「Block」を設定(ポイント)
  • 今回はVR空間内で、このBlockの色を変化させます。

 

(3)スクリプトの作成

  • 新規にC#スクリプトを作成
  • 名前を「RayController」に変更
  • 下記のコードを書いてチェック

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

public class RayController : MonoBehaviour
{
    public Transform anchor;
    public AudioClip sound;
    private float maxDistance = 100;
    private LineRenderer lineRenderer;

    void Start()
    {
        lineRenderer = GetComponent<LineRenderer>(); 
    }

    void Update()
    {
        RaycastHit hit;
        Ray ray = new Ray(anchor.position, anchor.forward);

        lineRenderer.SetPosition(0, ray.origin);

        if(Physics.Raycast(ray, out hit, maxDistance))
        {
            lineRenderer.SetPosition(1, hit.point);

            GameObject target = hit.collider.gameObject;

            // 右コントローラのAボタンを押した場合
            if(OVRInput.GetDown(OVRInput.RawButton.A))
            {
                if(target.CompareTag("Block"))
                {
                    // 効果音を鳴らす。
                    AudioSource.PlayClipAtPoint(sound, transform.position);

                    // ブロックを赤色に変化させる。
                    target.GetComponent<MeshRenderer>().material.color = Color.red;
                }
            }
        }
        else
        {
            lineRenderer.SetPosition(1, ray.origin + (ray.direction * maxDistance));
        }
    }
}

 


(4)設定

  • スクリプトをRayControllerオブジェクトに追加
  • Anchor(起点)はRight Hand Anchorを設定
  • 効果音は自由

 

(5)ビルド&ゲーム再生

  • 設定が完了したらOculus Quest2にビルドして再生
  • 右手からレーザー光線が出ているのを確認。
  • ブロックにレーザー光線を当ててAボタンを押すと、ブロックが赤色に変化すれば成功です。