前提・実現したいこと
Unity、OculusLiftを用いてVRゲームを作っています。
敵のコライダとレイキャストが正確に交わったかどうか判定を取りたいです
発生している問題・エラーメッセージ
敵を捕らえるため、レイを利用してレーザーポインターを作り、HMDの動きでレーザーポインターを動かせるようにしたのですが、敵のコライダと交差したときにレーザーポインターの色を変えるスクリプトを組んでも、敵と交差した判定をとってくれませんでした。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.XR; 5 6// LineRendererによるレーザーポインタ 7public class Aim : MonoBehaviour 8{ 9 public bool m_IsActive = true; // 稼働フラグ falseにすることでポインターを消せる 10 public float m_DefaultLength = 5.0f; // ヒットなしのときのレーザーの長さ 11 12 public bool m_ShotRay = true; // Ray を撃つ(false のときは target に指す位置を入れる) 13 public float m_RayLength = 1000f; // Ray の長さ 14 public LayerMask m_RayExclusionLayers; // Ray 判定を除外するレイヤー 15 16 17 public Transform m_Target; // 指す位置(shotRay=true のときはヒットしたオブジェクトの transform が入る) 18 public Transform m_Anchor; // 発射位置(コントローラの位置) 19 public LineRenderer m_LineRenderer; // レーザーを描画するラインレンダラ 20 21 public Vector3 m_AimLaserPos; // レーザーの実際の始点 22 public Vector3 m_CenterEyeAnchor; // ChenterEyeAnchorの座標を取る 23 24 public bool m_LockPoss; // ロックオン可能か否か 25 26 private Color m_RayDefaColor; // レーザーのデフォルトカラー 27 private Color m_RayCollColor; // レーザーが敵に触れてるときのカラー 28 29 30 // 主に初期化 31 void Awake() 32 { 33 // m_LineRendererがNULLならLineRendererコンポーネントを割り当てる 34 if(m_LineRenderer == null) 35 { 36 m_LineRenderer = GetComponent<LineRenderer>(); 37 } 38 m_AimLaserPos = new Vector3(0, 0, 0); 39 m_CenterEyeAnchor = new Vector3(0, 0, 0); 40 m_LockPoss = false; 41 m_RayDefaColor = Color.cyan; // 色をシアンに指定 42 m_RayCollColor = Color.red; // 色をレッドに指定 43 } 44 45 void Update() 46 { 47 LaserStartPos(); // レーザーポインターの始点決める 48 49 if (m_ShotRay) 50 { 51 Ray m_Ray = new Ray(m_Anchor.position, m_Anchor.forward); 52 RaycastHit m_Hit; 53 54 // ポインタの当たり判定←ここを通ってくれない。コライダと交差してるのは確認済み 55 if (Physics.Raycast(m_Ray, out m_Hit, m_RayLength, m_RayExclusionLayers)) 56 { 57 // 敵と障害物のみ当たったら縮ませたい 58 if (m_Hit.collider.gameObject.tag == "Enemy") // 当たったオブジェクトのタグがEnemyだったら 59 { 60 //敵のみ当たったらRayの色を赤にする 61 m_LineRenderer.startColor = m_RayCollColor; // 赤色に変更 62 m_Target = m_Hit.transform; 63 DrawTo(m_Hit.point); // 当たったらそのオブジェクトに向かって描写 64 m_LockPoss = true; // ロック可能判定を真に 65 66 Debug.Log("敵に当たった"); 67 return; 68 } 69 else if(m_Hit.collider.gameObject.tag == "Obstacle") // 当たったオブジェクトのタグがObstacleだったら 70 { 71 // 敵→障害物ときた時のために色を青にする 72 m_LineRenderer.startColor = m_RayDefaColor; // 青色に変更 73 m_Target = m_Hit.transform; 74 DrawTo(m_Hit.point); // 当たったらそのオブジェクトに向かって描写 75 m_LockPoss = false; 76 Debug.Log("障害物に当たった"); 77 return; 78 } 79 Debug.Break(); 80 // 何も当たってない時の処理 81 Debug.Log("何も当たってない"); 82 83 // それ以外は縮ませない 84 return; 85 } 86 m_Target = null; 87 } 88 89 if(m_Target != null) 90 { 91 DrawTo(m_Target.position); 92 } 93 else 94 { 95 // 当たってない時は正面に描写 96 DrawTo(m_Anchor.position + m_Anchor.forward * m_DefaultLength); 97 } 98 } 99 // レーザーを描く 100 void DrawTo(Vector3 pos) 101 { 102 m_LineRenderer.enabled = true; 103 m_LineRenderer.SetPosition(0, m_Anchor.position); 104 m_LineRenderer.SetPosition(1, pos); 105 106 } 107 // レーザーの始点を決める 108 void LaserStartPos() 109 { 110 // HMDのCenterEyeAnchorの座標を取ってくる 111 m_CenterEyeAnchor = InputTracking.GetLocalPosition(XRNode.CenterEye); 112 m_AimLaserPos.x = m_CenterEyeAnchor.x + 0.1f; 113 m_AimLaserPos.y = m_CenterEyeAnchor.y - 0.1f; // 視点からすこし下げる 114 m_AimLaserPos.z = m_CenterEyeAnchor.z; 115 m_Anchor.transform.localPosition = m_AimLaserPos; // 始点のローカル座標を反映 116 } 117} 118
参考にしたサイト
【Unity】VRレーザーポインター(ビーム)を作る
http://fantom1x.blog130.fc2.com/blog-entry-259.html?sp
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。