private void computeScoreLife(ref bool isOutScreen) { //出界 if (isOutScreen == true) { if (curFruit.getType() != Constant.Type_Bomb) { //水果出界,扣生命值 lifeCount--; } } //切中 else { if (curFruit.getType() == Constant.Type_Bomb) { //切中炸弹,扣生命值 lifeCount--; } else { //切中水果,加分 score++; } } lifeContent.setLife(lifeCount); scoreTxt.text = "" + score; }
// Update is called once per frame void Update() { bool needDestroyFruit = false; bool isOutDestroy = false; if (currentFruit != null) { if (KinectManager.Instance.IsUserDetected()) { //检测到玩家 long userId = KinectManager.Instance.GetPrimaryUserID(); //获取玩家id //Vector2 userPos = KinectManager.Instance.GetUserPosition(userId);//获取整个玩家相对于体感的坐标信息 int jointRightType = (int)KinectInterop.JointType.HandRight; //表示右手 if (KinectManager.Instance.IsJointTracked(userId, jointRightType)) { //追踪到关节点 Vector3 HandPos = KinectManager.Instance.GetJointKinectPosition(userId, jointRightType); //获取右手信息 rightTrail.position = HandPos; Vector3 HandScreenPos = Camera.main.WorldToScreenPoint(HandPos); //右手转换到屏幕坐标 Vector2 HandScrPos = new Vector2(HandScreenPos.x, HandScreenPos.y); //三维坐标转换到二维 //KinectInterop.HandState rightHandState = KinectManager.Instance.GetRightHandState(userId);rightHandState == KinectInterop.HandState.Open && if (RectTransformUtility.RectangleContainsScreenPoint(currentFruit.transform as RectTransform, HandScrPos, Camera.main)) { needDestroyFruit = true; } } int jointLeftType = (int)KinectInterop.JointType.HandLeft; //表示左手 if (KinectManager.Instance.IsJointTracked(userId, jointLeftType)) { //追踪到关节点 Vector3 HandPos = KinectManager.Instance.GetJointKinectPosition(userId, jointLeftType); //获取左手信息 leftTrail.position = HandPos; Vector3 HandScreenPos = Camera.main.WorldToScreenPoint(HandPos); //右手转换到屏幕坐标 Vector2 HandScrPos = new Vector2(HandScreenPos.x, HandScreenPos.y); //三维坐标转换到二维 //KinectInterop.HandState leftHandState = KinectManager.Instance.GetLeftHandState(userId);leftHandState == KinectInterop.HandState.Open && if (RectTransformUtility.RectangleContainsScreenPoint(currentFruit.transform as RectTransform, HandScrPos, Camera.main)) { needDestroyFruit = true; } } } RectTransform rtf = currentFruit.transform as RectTransform; float curFruitY = rtf.anchoredPosition.y; //获取当前水果的y轴位置 if (curFruitY < fruitOutY) { needDestroyFruit = true; isOutDestroy = true; } if (needDestroyFruit) { //切中水果或出界 if (isOutDestroy) { if (currentFruit.type == Contant.Type_Boom) { scoreNum++; } else { lifeNum--; } } else { if (currentFruit.type == Contant.Type_Boom) { lifeNum--; } else { scoreNum++; } } } lifeContent.setLife(lifeNum); scoreTxt.text = scoreNum + ""; if (needDestroyFruit) { if (isOutDestroy == false) { if (currentFruit.type != Contant.Type_Boom) { //切得不是炸弹才会生成左右水果 createRightLeftFruit(); playMusic(slatter); Destroy(currentFruit.gameObject); } else { playMusic(boom); Destroy(currentFruit.gameObject); } } if (lifeNum > 0) { createFruit(); } else { if (GameObject.FindWithTag("PlayOver") == null) { createPlayOver(); } gameOverImg.gameObject.SetActive(true); } } } detectedClickGameOver(); }
void Update() { timer += Time.deltaTime * creatSpeed; if (timer >= creatTime) { // random time to create fruit int num = Random.Range(1, 3); for (int i = 0; i < num; i++) { _currentFruitArray[i] = CreatFruit(); } timer = 0; } bool isRightOverFrult = false; bool isLeftOverFrult = false; if (_manager == null) { _manager = KinectManager.Instance; } for (int i = 0; i < _currentFruitArray.Length; i++) { if (_currentFruitArray [i] != null) { RectTransform rt = _currentFruitArray [i].transform as RectTransform; if (_manager && _manager.IsInitialized()) //如果初始化成功 { #region 检测切割,更新划线 //先检查人物是否被检测 if (_manager.IsUserDetected()) { long userId = _manager.GetPrimaryUserID(); //获取左右手手掌的关节视口坐标 Vector3 leftJointPos = KinectUtils.GetViewportToScreenPoint(KinectInterop.JointType.HandLeft); Vector3 rightJointPos = KinectUtils.GetViewportToScreenPoint(KinectInterop.JointType.HandRight); //将左右手坐标转换为ugui坐标 Vector2 leftHandScreenpos; bool isLeftHandOver = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, leftJointPos, Camera.main, out leftHandScreenpos); Vector2 rightHandScreenpos; bool isRightHandOver = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, rightJointPos, Camera.main, out rightHandScreenpos); //左手是否悬浮在区域上 isLeftOverFrult = RectTransformUtility.RectangleContainsScreenPoint(rt, leftJointPos, Camera.main); //右手是否悬浮在区域上 isRightOverFrult = RectTransformUtility.RectangleContainsScreenPoint(rt, rightJointPos, Camera.main); //更新显示线位置 leftLine.UpdateCutLine(leftHandScreenpos); rightLine.UpdateCutLine(rightHandScreenpos); } else { leftLine.UpdateCutLine(new Vector2(-1000, 1000)); rightLine.UpdateCutLine(new Vector2(1000, 1000)); } #endregion } #region 切水果 if (isLeftOverFrult || isRightOverFrult) { int t = _currentFruitArray[i].type; if (t == 0) //切到最终boom { lifeNum--; } else //切到水果加分 { scoreNum++; CreatLeftRightFurit(t, _currentFruitArray[i]); } Destroy(_currentFruitArray[i].gameObject); } #endregion } } lifeContent.setLife(lifeNum); gameUIControlOne.SetScore(scoreNum, lifeNum); }