zoukankan      html  css  js  c++  java
  • Kinect用体感来实现UI控件的点击

    用体感来实现UI控件的点击,如点击按钮。

    做法:用一个图片表示左手手掌,图片位置追踪左手手掌移动,当手掌位于UI控件的矩形内时,握拳表示点击该控件。

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    
    /// <summary>
    /// 用Kinect实现UI的点击:追踪左手手掌,移动到UI矩形内握拳表示点击该按钮。
    /// </summary>
    
    public class UIClick : MonoBehaviour {
        public Canvas canvas;
        public Image leftHandImage;  // 表示左手
        public Image btnImage;       // 要被点击的UI控件
        KinectManager _manager;
    void Start() { } void Update() { if (_manager == null) { _manager = KinectManager.Instance; } // 是否初始化完成 if (_manager && _manager.IsInitialized()) { // 是否人物被检测到 if (_manager.IsUserDetected()) { // 获取用户ID long userId = _manager.GetPrimaryUserID(); // 获取目标关节点的索引(以左手为例) int jointIndex = (int)KinectInterop.JointType.HandLeft; // 判断目标关节点是否被追踪 if (_manager.IsJointTracked(userId, jointIndex)) { // 获取目标关节点在Kinect坐标系(世界坐标)的位置 Vector3 leftHandPos = _manager.GetJointKinectPosition(userId, jointIndex); // 左手的世界坐标 --> 屏幕坐标 Vector3 leftHandScreenPos = Camera.main.WorldToScreenPoint(leftHandPos); Vector2 leftHandScreenPosTemp = new Vector2(leftHandScreenPos.x, leftHandScreenPos.y); // 降维 // 判断左手的UGUI坐标是否在Canvas所表示的矩形内 Vector2 leftHandUguiPos; if (RectTransformUtility.ScreenPointToLocalPointInRectangle((RectTransform)canvas.transform, leftHandScreenPosTemp, null, out leftHandUguiPos)) { RectTransform leftHandRTF = rightHandImage.transform as RectTransform; // 屏幕坐标 --> UGUI坐标 leftHandRTF.anchoredPosition = leftHandUguiPos; } // 判断左手的UGUI坐标是否在Button所表示的矩形内 if (RectTransformUtility.RectangleContainsScreenPoint(btnImage.rectTransform, leftHandScreenPosTemp, null)) { Debug.Log("在按钮中"); // 获取左手的手势状态 KinectInterop.HandState leftHandState = _manager.GetLeftHandState(userId); if (leftHandState == KinectInterop.HandState.Closed) { Debug.Log("左手握拳"); // todo:点击按钮触发的事件 } } else { Debug.Log("在按钮外"); } } } } } }

    注意点:

    摄像机的坐标要设为Vector3.zero,且设为透视图。

    获取关节点坐标要用GetJointKinectPosition()而不是GetJointPosition()

    此博客出自TaoHu,转载请注明原文地址 | 博客地址:http://www.cnblogs.com/htwzl/ | -- Unity3D 学习交流 --
  • 相关阅读:
    年末反思
    Flink运行时架构
    Phoenix 启动报错:Error: ERROR 726 (43M10): Inconsistent namespace mapping properties. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.
    Clickhouse学习
    Flink简单认识
    IDEA无法pull代码到本地,Can't Update No tracked branch configured for branch master or the branch doesn't exist.
    第1章 计算机系统漫游
    简单的 Shell 脚本入门教程
    开源≠免费 常见开源协议介绍
    MySQL 视图
  • 原文地址:https://www.cnblogs.com/htwzl/p/7133396.html
Copyright © 2011-2022 走看看