unity VR凝視gaze
3919 ワード
VRヘッドをつけて、物体を見つめていると進捗バーがあり、完成を待つとクールなテクニックができます.
多くのVRのSDKにもこのスキルがあり、その原理は視線で探知し、下にコードを貼ることです
新しいスクリプトの名前はGazeControllerです.
GazeItemスクリプトには3つのインタラクションがあり、GazeInメソッドとGazeOut、GazeFireがあります.具体的な実現は異なる需要を見る.
物体と対話する必要がある場合は、次のインタフェースを使用します.
多くのVRのSDKにもこのスキルがあり、その原理は視線で探知し、下にコードを貼ることです
新しいスクリプトの名前はGazeControllerです.
//
public Canvas rectileCanvas;
//
public Text rectileText;
//
public Image rectileImage;
//
public GameObject Target;
//
private Vector3 originPos;
//
private Vector3 originScale;
//
private float countDownTime=3;
//
private float currentTime=0;
bool isdone=false;
void Start () {
//
rectileImage.fillAmount = 0;
//
originPos = rectileCanvas.transform.position;
//
originScale=rectileCanvas.transform.localScale;
}
// Update is called once per frame
void Update () {
Ray ray = new Ray (transform.position, transform.forward);
RaycastHit hit;
//
//LineRenderer a;
// a = GetComponent ();
//a.SetPosition (0, transform.position);
if (Physics.Raycast (ray, out hit, 3))
{ // Vector3 LonDis = new Vector3 (0.3f,0.1f,0.3f);
//a.SetPosition (1, hit.point);
//
//
//rectileCanvas.transform.position =hit.point + LonDis;
// , 3d
// rectileCanvas.transform.localScale=originScale*hit.distance;
//rectileText.transform.position = rectileImage.transform.position;
//
//rectileCanvas.transform.forward=Camera.main.transform.forward;
// ;
if (hit.transform.tag == "GazeUI" || hit.transform.tag == "GazeObj") {
rectileCanvas.gameObject.SetActive (true);
} else
{
// ,
currentTime = 0;
rectileCanvas.gameObject.SetActive (false);
}
if (hit.transform.gameObject != Target)
{
if (Target != null)
{
VRGazeItem oldItem = Target.GetComponent ();
if (oldItem)
{
oldItem.GazeOut ();
}
}
Target = hit.transform.gameObject;
VRGazeItem newItem = Target.GetComponent ();
if (newItem)
{
//
newItem.GazeIn();
}
}
else //
{
currentTime += Time.deltaTime;
//
if (countDownTime - currentTime > 0 )
{
rectileImage.fillAmount = currentTime / countDownTime;
rectileText.text = Mathf.Ceil(rectileImage.fillAmount*100)+"%";
rectileText.transform.forward = Camera.main.transform.forward;
//rectileText.transform.localPosition = rectileCanvas.transform.position;
}
else// (3 )
{
//VRGazeItem ,
VRGazeItem gazeFireItem = Target.GetComponent ();
if (gazeFireItem)
{
gazeFireItem.GazeFire (hit);
}
rectileCanvas.gameObject.SetActive (false);
}
}
}
else
//
{
rectileCanvas.gameObject.SetActive (false);
// rectileCanvas.transform.position = originPos; //
rectileCanvas.transform.localScale=originScale;
// rectileCanvas.transform.forward = Camera.main.transform.forward;
rectileImage.fillAmount = 0;
}
}
}
GazeItemスクリプトには3つのインタラクションがあり、GazeInメソッドとGazeOut、GazeFireがあります.具体的な実現は異なる需要を見る.
物体と対話する必要がある場合は、次のインタフェースを使用します.
interface IRayInteractor
{
///
///
///
GameObject TempObj
{
get;
}
///
///
///
float NeedStayTime
{
get
;
set;
}
///
///
///
float StayTime { get; }
///
///
///
///
void OnRayEnter(GameObject temp);
///
///
///
void OnRayExit();
///
///
///
void OnRayStay();
}