前提・実現したいこと
コントローラーのレーザーを時間経過で消したい。
Unityを使ったVIVE(SteamVR)のソフトを作成してます。
↑のサイトのスクリプトを拝借してコントローラーからレーザーが出るようにしました。
↓がそのスクリプトです。
C#
1using UnityEngine; 2 3public class LaserController : MonoBehaviour 4{ 5 6 protected GameObject laser; 7 protected GameObject cursor; 8 9 public float thickness = 0.002f; 10 public float cursorSize = 0.04f; 11 public Color laserColor = new Color(1, 1, 0); 12 13 void Start() 14 { 15 16 //レーザーポインタを作成する 17 CreateLaserPointer(); 18 } 19 20 //------------------------------------------------------------------------------------------------------------------------------// 21 protected void CreateLaserPointer() 22 { 23 24 laser = GameObject.CreatePrimitive(PrimitiveType.Cube); 25 laser.transform.SetParent(transform, false); 26 laser.transform.localScale = new Vector3(thickness, thickness, 2.0f); 27 laser.transform.localPosition = new Vector3(0.0f, 0.0f, 1.0f); 28 laser.GetComponent<MeshRenderer>().material.color = laserColor; 29 Object.DestroyImmediate(laser.GetComponent<BoxCollider>()); 30 31 cursor = GameObject.CreatePrimitive(PrimitiveType.Sphere); 32 cursor.transform.SetParent(transform, false); 33 cursor.transform.localScale = new Vector3(cursorSize, cursorSize, cursorSize); 34 cursor.transform.localPosition = new Vector3(0.0f, 0.0f, 2.0f); 35 cursor.GetComponent<MeshRenderer>().material.color = laserColor; 36 Object.DestroyImmediate(cursor.GetComponent<SphereCollider>()); 37 } 38 39 public void AdjustLaserDistance(float distance) 40 { 41 42 if (laser == null) { return; } 43 distance += 0.01f; 44 45 //レーザーの長さを調整 46 laser.transform.localScale = new Vector3(thickness, thickness, distance); 47 laser.transform.localPosition = new Vector3(0.0f, 0.0f, distance * 0.5f); 48 cursor.transform.localPosition = new Vector3(0.0f, 0.0f, distance); 49 } 50}
時間経過でボタンを出現させてレーザーで選択する(ボタンを押す)仕組みを作っています。
ボタンがないときはレーザーが邪魔になるので、ボタンが出現している間だけレーザーを出そうと考えました。
レーザーのスクリプトはコントローラーのコンポーネントに張り付けているので,そのコンポーネントのチェックボックスをつけたり外したりすることでレーザーのONとOFFを切り替えられるようにしました。
↓5秒でレーザーを出現させ、10秒で消すという仕組みのスクリプトです。
これもコントローラーのコンポーネントに張り付けました。
C#
1using System.Collections; 2using UnityEngine; 3 4public class LaserDelete : MonoBehaviour { 5 6 private LaserController Lasers; 7 8 void Start() 9 { 10 StartCoroutine("startPush"); 11 Lasers = GetComponent<LaserController>(); 12 } 13 14 15 IEnumerator startPush() 16 { 17 18 yield return new WaitForSeconds(5.0f); 19 Lasers.enabled = !Lasers.enabled; 20 21 yield return new WaitForSeconds(10.0f); 22 Lasers.enabled = !Lasers.enabled; 23 24 } 25}
発生した問題
以上2つのスクリプトをコントローラに張り付け、レーザーのコンポーネントのチェックは外し実行してみました。
5秒経過するとレーザーのコンポーネントにチェックが入り、見事にレーザーが出現しました。
しかし、10秒後にレーザーのコンポーネントのチェックは外れたのですが、いくら待ってもレーザーは消えませんでした。
コンポーネントのON,OFFは切り替えることができたので、恐らくレーザーのスクリプトに問題があるのではないかと思われます。
どこをどのように修正したらよろしいでしょうか。
ちなみに当たり前ですが、最初からコンポーネントのチェックを外して実行するとレーザーは現れませんでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/23 01:36