从leap的手掌发出射线,射线碰撞到物体,用红色的小球表示碰撞点,并把碰撞点用linerenderer渲染出来

目录

方案一

方案二

第三种方案

第四种方案

第五种方案


方案一

1,在手掌上设置

 

 

 

2, beam.cs

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

using Leap;
using Leap.Unity;

// PlanA 	cube
//PlanB plamnormal



public class beam : MonoBehaviour {

	private LeapProvider mProvider;
	Frame mFrame;
	Hand mHand;

	public float thickness = 0.002f;
	public float thicknessIn = 0.008f;
	public GameObject pointer;

	private LineRenderer line; 
	private int i = 0;  

	Vector3 RunStart = Vector3.zero;
	Vector3 RunNext = Vector3.zero;

	bool isNUll = true;

	//beam pos and direction
	Vector3 pos = Vector3.zero;
	Vector3 dir = Vector3.zero;

	//finger tip
	GameObject tip;
	GameObject move;

	private GameObject clone; 
	public GameObject obs;  
	private GameObject ARP; 


	// Use this for initialization
	void Start () {
		mProvider = FindObjectOfType<LeapProvider> () as LeapProvider;


		pointer = GameObject.CreatePrimitive(PrimitiveType.Cube);
		pointer.transform.parent = this.transform;
		pointer.transform.localScale = new Vector3(0.000f, 0.000f, 10.0f);
		pointer.transform.position = this.transform.position;
		pointer.transform.rotation = this.transform.rotation;//如果没有这一句,射线会偏一个角度


		tip = GameObject.Find("tip");

		line = this.GetComponent<LineRenderer>();//获得该物体上的LineRender组件 

	}

	// Update is called once per frame
	void Update () {


		mFrame = mProvider.CurrentFixedFrame;
		int numHands = mFrame.Hands.Count;

		if (numHands >0) {

			if (numHands == 1) {


				foreach (var itemFingers in mFrame.Hands) {
					int numF =	itemFingers.Fingers.Count;

					float dis =	itemFingers.PinchDistance;
					float disN = itemFingers.PinchStrength;




					if (dis < 40.0f || disN > 0.5f) {
						pointer.transform.localScale = new Vector3(0.0009f, 0.0009f, 10.0f);

						Ray ray = new Ray (transform.position, -transform.forward);
						//var point = Camera.main.ScreenToWorldPoint(Input.mousePosition);
						Debug.DrawLine(transform.position, -transform.forward*100, Color.red);  //这个就是绘制出的射线了,包含发射位置,发射距离和射线的颜色; 

						RaycastHit hit;

						if (Physics.Raycast (ray, out hit, 100)) { 
							//print ("hello");
							//print (hit.point);
							//hit.point;
							tip.transform.position = hit.point;

							var point = hit.point;

							//To have lines using LineRenderer
							if(isNUll)
							{
								RunStart = point;
								isNUll = false;
							}

							RunNext = point;

							if (RunStart != RunNext) {
								i++;
								line.SetVertexCount(i);//设置顶点数 
								line.SetPosition(i-1, point);

							}

							RunStart = RunNext;


						}



					} else {

						pointer.transform.localScale = new Vector3 (0.0003f, 0.0003f, 10.0f);
						this.GetComponent<LineRenderer> ().positionCount = 0;
						isNUll = true;
						i = 0;
						tip.transform.position = Vector3.zero;


					



					}

					//print (numF);
					//itemFingers.PalmNormal
				}
				//print ("Find one hand");
				//pointer.transform.position.z = pointer.transform.position.z + 1.0f;
			}

			if (numHands == 2) {

				//print ("Find two hands");
		

			}
		}

	}
}


 

手势捏住是画线,展开时清除。

方案二

其他和上面一样,实现手势握拳时画线,展开时不画,再次握拳时继续画线,并且上次的线依然在。当是双手是清除线条。

1, 设置。

 

beamGood.cs

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

using Leap;
using Leap.Unity;

// PlanA 	cube
//PlanB plamnormal



public class beamGood : MonoBehaviour {

	private LeapProvider mProvider;
	Frame mFrame;
	Hand mHand;

	public float thickness = 0.002f;
	public float thicknessIn = 0.008f;
	private GameObject pointer;

	private LineRenderer line; 
	private int i = 0;  

	Vector3 RunStart = Vector3.zero;
	Vector3 RunNext = Vector3.zero;

	bool isNUll = true;

	//beam pos and direction
	Vector3 pos = Vector3.zero;
	Vector3 dir = Vector3.zero;

	//finger tip
	GameObject tip;
	GameObject move;

	private GameObject clone; 
	public GameObject obs;  
	private GameObject ARP; 


	// Use this for initialization
	void Start () {
		mProvider = FindObjectOfType<LeapProvider> () as LeapProvider;


		pointer = GameObject.CreatePrimitive(PrimitiveType.Cube);
		pointer.transform.parent = this.transform;
		pointer.transform.localScale = new Vector3(0.000f, 0.000f, 10.0f);
		pointer.transform.position = this.transform.position;
		pointer.transform.rotation = this.transform.rotation;


		tip = GameObject.Find("tip");

		line = this.GetComponent<LineRenderer>();//获得该物体上的LineRender组件 

	}

	// Update is called once per frame
	void Update () {


		mFrame = mProvider.CurrentFixedFrame;
		int numHands = mFrame.Hands.Count;

		if (numHands >0) {

			if (numHands == 1) {

				if(!GameObject.Find("ClearARA"))
				{
					GameObject aras = new GameObject ("ClearARA");
				}

				foreach (var itemFingers in mFrame.Hands) {
					int numF =	itemFingers.Fingers.Count;

					float dis =	itemFingers.PinchDistance;
					float disN = itemFingers.PinchStrength;




					if (dis < 40.0f || disN > 0.5f) {
						pointer.transform.localScale = new Vector3(0.0009f, 0.0009f, 10.0f);

						Ray ray = new Ray (transform.position, -transform.forward);
						//var point = Camera.main.ScreenToWorldPoint(Input.mousePosition);
						Debug.DrawLine(transform.position, -transform.forward*100,Color.red);  //这个就是绘制出的射线了,包含发射位置,发射距离和射线的颜色; 

						RaycastHit hit;

						if (Physics.Raycast (ray, out hit, 100)) { 
							//print ("hello");
							//print (hit.point);
							//hit.point;
							tip.transform.position = hit.point;

							var point = hit.point;

							//To have lines using LineRenderer
							if(isNUll)
							{
								RunStart = point;
								isNUll = false;
							}

							RunNext = point;

							if (RunStart != RunNext) {
								i++;
								line.SetVertexCount(i);//设置顶点数 
								line.SetPosition(i-1, point);

							}

							RunStart = RunNext;


						}



					} else {

						pointer.transform.localScale = new Vector3 (0.0009f, 0.0009f, 10.0f);


						clone = (GameObject)Instantiate(obs, obs.transform.position,obs.transform.rotation);//克隆一个带有LineRender的物体  
						clone.name = "ARParent";
						//line = clone.GetComponent<LineRenderer>();//获得该物体上的LineRender组件
						line = obs.GetComponent<LineRenderer>();//获得该物体上的LineRender组件

			

						clone.transform.parent = GameObject.Find("ClearARA").transform;

						i = 0;
					
					

					}

					//print (numF);
					//itemFingers.PalmNormal
				}

			}

			if (numHands == 2) {
				
				pointer.transform.localScale = new Vector3 (0.000f, 0.000f, 10.0f);
				//print ("Find two hands");

				tip.transform.position = Vector3.zero;
				this.GetComponent<LineRenderer> ().positionCount = 0;
				obs.GetComponent<LineRenderer> ().positionCount = 0;
				isNUll = true;
				i = 0;

	
				//Destroy (GameObject.Find("ARParent"));
				Destroy (GameObject.Find("ClearARA"));
				//Destroy (GameObject.Find("ARParent"));
				//Destroy (GameObject.Find("ClearARA").gameObject);

		



			}
		}

	}
}


 

第三种方案

因为通过Leap获取的点集,如何像方案2那样直接绘制,晃动会非常大。

关于晃动比较大,这个问题,我开始时把leap放在了htc上面,这样的话,leap的坐标系相当于一直在动,那坐标系里的点当然也是一直会晃动。这可以通过把leap放在桌子上,让leap的坐标系先不动来缓解,其次可以等时间来采样那些要画线的碰撞点。效果会比较好一些。还有就是碰撞物体距离手势的远近也会影响晃动的程度。物体越远,射线会把晃动的角度放大。

这儿想到,如果类似的问题里,你要评估设计方法或算法的精度,可以考虑角度的变化,因为距离越远,在夹角相同时,偏差会越大。

其他设置和上面一样,用到的脚本是

Sampling.cs

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

using Leap;
using Leap.Unity;

public class Sampling : MonoBehaviour {

	private LeapProvider mProvider;
	Frame mFrame;
	Hand mHand;

	public float thickness = 0.002f;
	public float thicknessIn = 0.008f;
	private GameObject pointer;

	private LineRenderer line; 
	private int i = 0;  

	Vector3 RunStart = Vector3.zero;
	Vector3 RunNext = Vector3.zero;

	bool isNUll = true;

	//beam pos and direction
	Vector3 pos = Vector3.zero;
	Vector3 dir = Vector3.zero;

	//finger tip
	GameObject tip;
	GameObject move;


	private GameObject clone; 
	public GameObject obs;  
	private GameObject ARP; 

	//finger position
	[Header("Move Distance")]
	[Tooltip("conatrol distance")]
	[Range(0, 100)]
	public float pnDistance = 1.0f;
	private Vector3 realTimePos = Vector3.zero;
	private Vector3 proPos = Vector3.zero;
	private Vector3 nextPos = Vector3.zero;

	//sampling

//	[Header("WaitingTime")]
//	[Tooltip("conatrol time")]
//	[Range(0, 1)]
//	public float scaleTime = 0.618f;
	public float proTime = 0.0f;
	public float nextTime = 0.0f;

	private float scaleTime = 0.04f;
	// Use this for initialization
	void Start () {
		mProvider = FindObjectOfType<LeapProvider> () as LeapProvider;


		pointer = GameObject.CreatePrimitive(PrimitiveType.Cube);
		pointer.transform.parent = this.transform;
		pointer.transform.localScale = new Vector3(0.000f, 0.000f, 10.0f);
		pointer.transform.position = this.transform.position;
		pointer.transform.rotation = this.transform.rotation;


		tip = GameObject.Find("tip");

		line = this.GetComponent<LineRenderer>();//获得该物体上的LineRender组件 

	}

	// Update is called once per frame
	void Update () {


		mFrame = mProvider.CurrentFixedFrame;
		int numHands = mFrame.Hands.Count;

		proTime = Time.fixedTime;
		if (proTime - nextTime > scaleTime) {


			if (numHands > 0) {

				if (numHands == 1) {

					if (!GameObject.Find ("ClearARA")) {
						GameObject aras = new GameObject ("ClearARA");
					}

					foreach (var itemFingers in mFrame.Hands) {
						int numF =	itemFingers.Fingers.Count;

						float dis =	itemFingers.PinchDistance;
						float disN = itemFingers.PinchStrength;

					

							Ray ray = new Ray (transform.position, -transform.forward);
							//var point = Camera.main.ScreenToWorldPoint(Input.mousePosition);
							Debug.DrawLine (transform.position, -transform.forward * 100, Color.red);  //这个就是绘制出的射线了,包含发射位置,发射距离和射线的颜色; 

							RaycastHit hit;

							if (Physics.Raycast (ray, out hit, 100)) {

							proPos = hit.point;
							realTimePos = hit.point;
							//你和  Mathf.SmoothStep
							if ((proPos-nextPos).magnitude < pnDistance) //前后两点的距离
							{

								//print ((proPos-nextPos).magnitude);

							if (dis < 40.0f || disN > 0.5f) {
								//pointer.transform.parent = this.transform;
								pointer.transform.localScale = new Vector3 (0.0009f, 0.0009f, 10.0f);
								//print ("hello");
								//print (hit.point);
								//hit.point;
								//tip.transform.position = hit.point;

								var point = hit.point;

								//To have lines using LineRenderer
								if (isNUll) {
									RunStart = point;
									isNUll = false;
								}

								RunNext = point;

								if (RunStart != RunNext) {
									i++;
									line.SetVertexCount (i);//设置顶点数 
									line.SetPosition (i - 1, point);

								}

								RunStart = RunNext;

							} else {
								pointer.transform.localScale = new Vector3 (0.0009f, 0.0009f, 10.0f);


								clone = (GameObject)Instantiate (obs, obs.transform.position, obs.transform.rotation);//克隆一个带有LineRender的物体  
								clone.name = "ARParent";
								//line = clone.GetComponent<LineRenderer>();//获得该物体上的LineRender组件
								line = obs.GetComponent<LineRenderer> ();//获得该物体上的LineRender组件



								clone.transform.parent = GameObject.Find ("ClearARA").transform;

								i = 0;

								//tip.transform.position = Vector3.zero;

							}
							tip.transform.position = realTimePos;

							}



							nextPos = proPos;
						}

						//print (numF);
						//itemFingers.PalmNormal
					}


				}

		
			}
			nextTime = proTime;

		}// scaletime
		if (numHands == 2) {

			pointer.transform.localScale = new Vector3 (0.000f, 0.000f, 10.0f);
			//print ("Find two hands");

			tip.transform.position = Vector3.zero;
			this.GetComponent<LineRenderer> ().positionCount = 0;
			obs.GetComponent<LineRenderer> ().positionCount = 0;
			isNUll = true;
			i = 0;


			//Destroy (GameObject.Find("ARParent"));
			Destroy (GameObject.Find ("ClearARA"));
			//Destroy (GameObject.Find("ARParent"));
			//Destroy (GameObject.Find("ClearARA").gameObject);





		}

	}
}

 

 

第四种方案

不同手势的稳定性不同,影响用户体验。

剪刀或两个手势时清除,手展开时画线。

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

using Leap;
using Leap.Unity;

public class OpenDraw : MonoBehaviour {

	private LeapProvider mProvider;
	Frame mFrame;
	Hand mHand;

	public float thickness = 0.002f;
	public float thicknessIn = 0.008f;
	private GameObject pointer;

	private LineRenderer line; 
	private int i = 0;  

	Vector3 RunStart = Vector3.zero;
	Vector3 RunNext = Vector3.zero;

	bool isNUll = true;

	//beam pos and direction
	Vector3 pos = Vector3.zero;
	Vector3 dir = Vector3.zero;

	//finger tip
	GameObject tip;
	GameObject move;


	private GameObject clone; 
	public GameObject obs;  
	private GameObject ARP; 

	//finger position
	[Header("Move Distance")]
	[Tooltip("conatrol distance")]
	[Range(0, 1)]
	public float pnDistance = 0.030f;
	private Vector3 realTimePos = Vector3.zero;
	private Vector3 proPos = Vector3.zero;
	private Vector3 nextPos = Vector3.zero;

	//sampling

	//	[Header("WaitingTime")]
	//	[Tooltip("conatrol time")]
	//	[Range(0, 1)]
	//	public float scaleTime = 0.618f;
	public float proTime = 0.0f;
	public float nextTime = 0.0f;

	private float scaleTime = 0.04f;
	// Use this for initialization
	void Start () {
		mProvider = FindObjectOfType<LeapProvider> () as LeapProvider;


		pointer = GameObject.CreatePrimitive(PrimitiveType.Cube);
		pointer.transform.parent = this.transform;
		pointer.transform.localScale = new Vector3(0.000f, 0.000f, 1.0f);
		pointer.transform.position = this.transform.position;
		pointer.transform.rotation = this.transform.rotation;


		tip = GameObject.Find("tip");

		line = this.GetComponent<LineRenderer>();//获得该物体上的LineRender组件 

	}

	// Update is called once per frame
	void Update () {


		mFrame = mProvider.CurrentFixedFrame;
		int numHands = mFrame.Hands.Count;

		proTime = Time.fixedTime;
		if (proTime - nextTime > scaleTime) {


			if (numHands > 0) {

				if (numHands == 1) {

					if (!GameObject.Find ("ClearARA")) {
						GameObject aras = new GameObject ("ClearARA");
					}

					foreach (var itemFingers in mFrame.Hands) {
						int numF =	itemFingers.Fingers.Count;

						float dis =	itemFingers.PinchDistance;
						float disN = itemFingers.PinchStrength;



						Ray ray = new Ray (transform.position, -transform.forward);
						//var point = Camera.main.ScreenToWorldPoint(Input.mousePosition);
						Debug.DrawLine (transform.position, -transform.forward * 1, Color.red);  //这个就是绘制出的射线了,包含发射位置,发射距离和射线的颜色; 

						RaycastHit hit;

						if (Physics.Raycast (ray, out hit, 1)) {

							proPos = hit.point;
							realTimePos = hit.point;
							//你和  Mathf.SmoothStep
							//if (0.01 < (proPos-nextPos).magnitude && (proPos-nextPos).magnitude < pnDistance) //前后两点的距离
							if ( (proPos-nextPos).magnitude < pnDistance) //前后两点的距离
							{

								//print ((proPos-nextPos).magnitude);

								if ( disN < 0.5f) {
								//if (dis < 40.0f || disN > 0.5f) {
									//pointer.transform.parent = this.transform;
									pointer.transform.localScale = new Vector3 (0.0009f, 0.0009f, 1.0f);
									//print ("hello");
									//print (hit.point);
									//hit.point;
									//tip.transform.position = hit.point;

									var point = hit.point;

									//To have lines using LineRenderer
									if (isNUll) {
										RunStart = point;
										isNUll = false;
									}

									RunNext = point;

									if (RunStart != RunNext) {
										i++;
										line.SetVertexCount (i);//设置顶点数 
										line.SetPosition (i - 1, point);

									}

									RunStart = RunNext;

								} else {
									pointer.transform.localScale = new Vector3 (0.0009f, 0.0009f, 1.0f);


									clone = (GameObject)Instantiate (obs, obs.transform.position, obs.transform.rotation);//克隆一个带有LineRender的物体  
									clone.name = "ARParent";
									//line = clone.GetComponent<LineRenderer>();//获得该物体上的LineRender组件
									line = obs.GetComponent<LineRenderer> ();//获得该物体上的LineRender组件



									clone.transform.parent = GameObject.Find ("ClearARA").transform;

									i = 0;

									//tip.transform.position = Vector3.zero;

								}
								tip.transform.position = realTimePos;

							}



							nextPos = proPos;
						}

						//print (numF);
						//itemFingers.PalmNormal
						//剪刀手清屏
						//if (extendFingerNum(itemFingers) == 0) {
						if (disN > 0.6f) {
							
							pointer.transform.localScale = new Vector3 (0.0009f, 0.0009f, 1.0f);
							//print ("Find two hands");

							tip.transform.position = Vector3.zero;
							this.GetComponent<LineRenderer> ().positionCount = 0;
							obs.GetComponent<LineRenderer> ().positionCount = 0;
							isNUll = true;
							i = 0;


							//Destroy (GameObject.Find("ARParent"));
							Destroy (GameObject.Find ("ClearARA"));
							//Destroy (GameObject.Find("ARParent"));
							//Destroy (GameObject.Find("ClearARA").gameObject);


						}

					}


				}


			}
			nextTime = proTime;

		}// scaletime
		if (numHands == 2) {

			pointer.transform.localScale = new Vector3 (0.000f, 0.000f, 1.0f);
			//print ("Find two hands");

			tip.transform.position = Vector3.zero;
			this.GetComponent<LineRenderer> ().positionCount = 0;
			obs.GetComponent<LineRenderer> ().positionCount = 0;
			isNUll = true;
			i = 0;


			//Destroy (GameObject.Find("ARParent"));
			Destroy (GameObject.Find ("ClearARA"));
			//Destroy (GameObject.Find("ARParent"));
			//Destroy (GameObject.Find("ClearARA").gameObject);

		}


	}

	public int extendFingerNum(Hand hand)
	{
		int extendedFingers = 0;
		//一个手指的一次遍历
		for (int f = 0; f < hand.Fingers.Count; f++)
		{
			Finger digit = hand.Fingers[f];
			if (digit.IsExtended) {
				print ("Fingers is " + digit);
				extendedFingers++;
			}
		}
		return extendedFingers;
	}


}

 

第五种方案

手势的碰撞器于虚拟物体碰撞且手势展开时画,不碰撞就不会,再次碰撞时继续画,这时之前画的线还在。握拳且不接触没有碰撞时在清除。其他设置同上。

关于碰撞的一些设置参考 Unity 两物体的碰撞 OnTriggerEnter和OnCollisionEnter

把手势一些关键不用的碰撞器取消,不然碰撞点的位置不会是我们希望的。

 

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

using Leap;
using Leap.Unity;

public class KeepHaptic : MonoBehaviour {

	private LeapProvider mProvider;
	Frame mFrame;
	Hand mHand;

	public float thickness = 0.002f;
	public float thicknessIn = 0.008f;
	private GameObject pointer;

	private LineRenderer line; 
	private int i = 0;  

	Vector3 RunStart = Vector3.zero;
	Vector3 RunNext = Vector3.zero;

	bool isNUll = true;

	//beam pos and direction
	Vector3 pos = Vector3.zero;
	Vector3 dir = Vector3.zero;

	//finger tip
	GameObject tip;
	GameObject move;


	private GameObject clone; 
	public GameObject obs;  
	private GameObject ARP; 

	//finger position
	[Header("Move Distance")]
	[Tooltip("conatrol distance")]
	[Range(0, 1)]
	public float pnDistance = 0.030f;
	private Vector3 realTimePos = Vector3.zero;
	private Vector3 proPos = Vector3.zero;
	private Vector3 nextPos = Vector3.zero;

	//sampling

	//	[Header("WaitingTime")]
	//	[Tooltip("conatrol time")]
	//	[Range(0, 1)]
	//	public float scaleTime = 0.618f;
	public float proTime = 0.0f;
	public float nextTime = 0.0f;

	private float scaleTime = 0.04f;


	//collosion
	private float disN = 0.0f;



	// Use this for initialization
	void Start () {
		mProvider = FindObjectOfType<LeapProvider> () as LeapProvider;


		pointer = GameObject.CreatePrimitive(PrimitiveType.Cube);
		pointer.transform.parent = this.transform;
		pointer.transform.localScale = new Vector3(0.000f, 0.000f, 0.06180f);
		pointer.transform.position = this.transform.position;
		pointer.transform.rotation = this.transform.rotation;


		tip = GameObject.Find("tip");

		line = this.GetComponent<LineRenderer>();//获得该物体上的LineRender组件 

	}

	void OnCollisionEnter(Collision other)
	{
		print ("When one door of happiness closes, another opens; " +
			"but often we look so long at the closed door that we do not see the one which has been opened for us. ");
	}


	void OnCollisionStay(Collision other)
	{
		if (!GameObject.Find ("ClearARA")) {
			GameObject aras = new GameObject ("ClearARA");
		}
		//print ("A choice each must make for themselves, something no hero will ever defeat.");
		Ray ray = new Ray (transform.position, transform.forward);
		//var point = Camera.main.ScreenToWorldPoint(Input.mousePosition);
		Debug.DrawLine (transform.position, transform.forward , Color.red);  //这个就是绘制出的射线了,包含发射位置,发射距离和射线的颜色; 

		RaycastHit hit;

		if (Physics.Raycast (ray, out hit, 1)) {

			proPos = hit.point;
			realTimePos = hit.point;
			//你和  Mathf.SmoothStep
			//if (0.01 < (proPos-nextPos).magnitude && (proPos-nextPos).magnitude < pnDistance) //前后两点的距离
			if ( (proPos-nextPos).magnitude < pnDistance) //前后两点的距离
			{

				//print ((proPos-nextPos).magnitude);

				if ( disN < 0.5f) {
					//if (dis < 40.0f || disN > 0.5f) {
					//pointer.transform.parent = this.transform;
					pointer.transform.localScale = new Vector3 (0.0009f, 0.0009f, 0.06180f);
					//print ("hello");
					//print (hit.point);
					//hit.point;
					//tip.transform.position = hit.point;

					var point = hit.point;

					//To have lines using LineRenderer
					if (isNUll) {
						RunStart = point;
						isNUll = false;
					}

					RunNext = point;

					if (RunStart != RunNext) {
						i++;
						line.SetVertexCount (i);//设置顶点数 
						line.SetPosition (i - 1, point);

					}

					RunStart = RunNext;

				} 

				tip.transform.position = realTimePos;

			}



			nextPos = proPos;
		}

	}

	void OnCollisionExit(Collision other)
	{
		//print ("A charming woman doesn't follow the crowd. She is herself.");
		pointer.transform.localScale = new Vector3 (0.0009f, 0.0009f, 0.06180f);


		clone = (GameObject)Instantiate (obs, obs.transform.position, obs.transform.rotation);//克隆一个带有LineRender的物体  
		clone.name = "ARParent";
		//line = clone.GetComponent<LineRenderer>();//获得该物体上的LineRender组件
		line = obs.GetComponent<LineRenderer> ();//获得该物体上的LineRender组件



		clone.transform.parent = GameObject.Find ("ClearARA").transform;

		i = 0;

		tip.transform.position = Vector3.zero;

	}



	// Update is called once per frame
	void Update () {


		mFrame = mProvider.CurrentFixedFrame;
		int numHands = mFrame.Hands.Count;

		proTime = Time.fixedTime;
		if (proTime - nextTime > scaleTime) {


			if (numHands > 0) {

				if (numHands == 1) {

					foreach (var itemFingers in mFrame.Hands) {
						int numF =	itemFingers.Fingers.Count;

						float dis =	itemFingers.PinchDistance;
						 disN = itemFingers.PinchStrength;


						if (disN > 0.7f) {

							pointer.transform.localScale = new Vector3 (0.000f, 0.000f, 0.06180f);
							//print ("Find two hands");

							tip.transform.position = Vector3.zero;
							this.GetComponent<LineRenderer> ().positionCount = 0;
							obs.GetComponent<LineRenderer> ().positionCount = 0;
							isNUll = true;
							i = 0;


							//Destroy (GameObject.Find("ARParent"));
							Destroy (GameObject.Find ("ClearARA"));
							//Destroy (GameObject.Find("ARParent"));
							//Destroy (GameObject.Find("ClearARA").gameObject);


						}

					}// mFrame.Hands


				}//=1


			}//numHands > 0
			nextTime = proTime;

		}// scaletime

		if (numHands == 20) {

			pointer.transform.localScale = new Vector3 (0.000f, 0.000f, 0.06180f);
			//print ("Find two hands");

			tip.transform.position = Vector3.zero;
			this.GetComponent<LineRenderer> ().positionCount = 0;
			obs.GetComponent<LineRenderer> ().positionCount = 0;
			isNUll = true;
			i = 0;


			//Destroy (GameObject.Find("ARParent"));
			Destroy (GameObject.Find ("ClearARA"));
			//Destroy (GameObject.Find("ARParent"));
			//Destroy (GameObject.Find("ClearARA").gameObject);

		}//numHands == 2


	}//Update



	public int extendFingerNum(Hand hand)
	{
		int extendedFingers = 0;
		//一个手指的一次遍历
		for (int f = 0; f < hand.Fingers.Count; f++)
		{
			Finger digit = hand.Fingers[f];
			if (digit.IsExtended) {
				print ("Fingers is " + digit);
				extendedFingers++;
			}
		}
		return extendedFingers;
	}


}

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值