unitypico开发五UI交互
- 互联网
- 2025-09-13 11:48:01

文章目录 添加画布添加交互组件取消传送射线对UI的控制解决按扳机键会传送的冲突按下按键呼出菜单,并让菜单出现在头的前方 添加画布
创建一个新画布,添加一个Button,将画布改为world space,然后缩放改为0.001,调整到合适的位置
添加交互组件1 为画布添加Tracked Device Graphic Raycaster 2 找到eventSystem,删除自带的输入模块 然后添加XR UI Input Modeule
此时即可进行交互,triiger键是鼠标左键,注意画布本身不受interactionToolkit的layer影响,任何射线都可以控制他
取消传送射线对UI的控制取消勾选这个
解决按扳机键会传送的冲突由于我设置的传送按键是扳机键,在点击UI时会同时触发传送 解决思路是,当抓取射线在UI上时,禁用传送射线,用抓取射线进行UI交互 编写脚本
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.XR.Interaction.Toolkit; public class ActivateTeleportationRay : MonoBehaviour { public GameObject leftTeletportation; public GameObject rightTeletportation; public InputActionProperty leftActivate; public InputActionProperty rightActivate; public InputActionProperty leftCancel; public InputActionProperty rightCancel; public XRRayInteractor leftRay; public XRRayInteractor rightRay; private void Update() { leftRay.TryGetHitInfo(out Vector3 leftPos,out Vector3 leftNormal,out int leftNumber,out bool leftValid); //抓取射线指向了交互物体(UI或可抓取物体),没有按下抓取键,已经扣动了扳机,才激活传送射线 leftTeletportation.SetActive( !leftValid && leftCancel.action.ReadValue<float>() == 0 && leftActivate.action.ReadValue<float>() > 0.1f ); rightRay.TryGetHitInfo(out Vector3 rightPos, out Vector3 rightNormal, out int rightNumber, out bool rightValid); rightTeletportation.SetActive( !rightValid && rightCancel.action.ReadValue<float>() == 0 && rightActivate.action.ReadValue<float>() > 0.1f ); } } 按下按键呼出菜单,并让菜单出现在头的前方编写如下脚本
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; public class GameMenuManager : MonoBehaviour { public GameObject menu; public InputActionProperty showButton; public Transform head; public float spawnDistance = 2; void Update() { if (showButton.action.WasPressedThisFrame()) { menu.SetActive(!menu.activeSelf); menu.transform.position = head.position + new Vector3( head.forward.x, 0, head.forward.z ).normalized*spawnDistance; } menu.transform.LookAt(new Vector3(head.position.x, menu.transform.position.y, head.position.z)); menu.transform.forward *= -1; } }新建一个物体“游戏菜单”,挂载脚本 将菜单的画布设置为游戏菜单的子物体 设置脚本的参数
unitypico开发五UI交互由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“unitypico开发五UI交互”
上一篇
网络安全有必要学编程吗?