0
IEnumeratorを使用して、リセット可能なタイマーとして機能しています。私はウェイポイントシステムをセットアップして、そこにテレポートするためのn秒間のウェイポイントを注視します。私はIEnumeratorをその時間を制御する方法として使用し、偶発的なテレポートを止めさせる。それはうまくいきますが、レイキャストアイテムを注視すると、どこかでロジックが壊れてしまい、ウェイポイントを見直して再びすべてをバックアップする必要があります。この失敗は、私のウェイポイントのすべてのインスタンスでも実行され、1つを見て離れて見ると、別のものをテレポートすることができません。私はGVRレーザーポインターとGVRレティクル1.70(1.100ビルドに失敗)ビルドからGVRレクチルです。IEnumeratorを使ったUnity GVR Gazeイベント
コード:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Gaze_Waypoints : MonoBehaviour {
public int gazeTime = 3; //the amount of time needed to look to teleport
public GameObject playerCam; //the players camera
private Vector3 waypointPosition; //the position of the current waypoint
private Vector3 playerCamPosition; //the current position of the players camera used for height information
private IEnumerator waypointEnumerator; //my co-routine
private bool startCoRoutine; //is the co-routine running
void Start() {
waypointPosition = transform.position; //get the position of the owners waypoint
waypointEnumerator = waypointTimerEvent(); //set the ienumerator to the relevant function below
startCoRoutine = true; //testing this out as true or false
}
void Update() {
playerCamPosition = playerCam.transform.position; //keep track of the players camera, mainly for height info
}
// when I gaze a waypoint
public void PointerEnter() {
Debug.Log("I entered.");
if (startCoRoutine) {
StartCoroutine (waypointEnumerator);
} else {
StopCoroutine (waypointEnumerator);
}
startCoRoutine = !startCoRoutine;
}
// when I look away
public void PointerExit() {
Debug.Log("I exited.");
StopCoroutine (waypointEnumerator);
}
// if I look for 3 seconds teleport the user, if I look away reset the timer
IEnumerator waypointTimerEvent() {
yield return new WaitForSeconds (gazeTime);
playerCam.transform.position = new Vector3 (waypointPosition.x, waypointPosition.y + playerCamPosition.y, waypointPosition.z);
StartCoroutine(waypointEnumerator);
}
}