从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;
}
}