当前位置: 首页 > news >正文

unity基础自学2.3:移动和抓握物品

文章目录

  • 前言:
  • 1、基础配置
    • ①XR Interaction Toolkit
    • ②创建一个XR场景
    • ③示例文件实现
    • ④ 一键配置(PICO Building Blocks)
  • 2、射线移动物品和抓握物品
    • 方法一:Grab Interactable
    • 方法二:prefab
  • 3、Box Collider的作用与使用
    • 解析 Box Collider的作用
      • ① 物理碰撞检测
      • ③ 射线检测(Raycast)
    • 如何正确使用 Box Collider
      • (1) 基本配置
      • (2) 与 Rigidbody 的配合
      • (3) 触发区域设置

前言:

根据pico官方文档进行配置交互,其中有一些基础的问题点不是很理解,在这边进行简要的记录。

1、基础配置

①XR Interaction Toolkit

版本:3.0.3 · May 03, 2024
获取方式:window-> packageManager -> 选择需要的package,通过Changelog查看各个版本,在通过Add version by name进行添加

②创建一个XR场景

如何创建一个XR场景
如果是第一次进行实现的话,最好是先看一遍官网创建第一个XR场景,再往下看,不然很多东西是不理解的。

③示例文件实现

如何下载开源示例代码与资源
这个示例文件是PICO官网的交互示例,可以重点看一下,把响应

④ 一键配置(PICO Building Blocks)

PICO Building Blocks 系统可以帮助你在项目里一键完成功能配置,包括 PICO Unity Integration SDK 和 Unity 官方提供的功能。 如何使用PICO Building Blocks进行一键设置

2、射线移动物品和抓握物品

方法一:Grab Interactable

GameObjection -> XR -> Grab Interactable 再将物品作为其子项
在以下截图中,Far Attach Mode设置为near,可实现抓握物品
在这里插入图片描述

方法二:prefab

①在Hierarchy中直接添加一个prefab文件
②添加component -> XR Grab Interactable 进行设置
③Add Component > Physics > Box Collider 添加物理碰撞体,

在这里插入图片描述

3、Box Collider的作用与使用

解析 Box Collider的作用

① 物理碰撞检测

碰撞响应:当两个带有碰撞器(Collider)和刚体(Rigidbody)的物体接触时,触发物理引擎的碰撞计算(如反弹、摩擦)。
② 触发事件检测
触发区域:勾选 Is Trigger 后,碰撞器变为触发区域,物体可穿透但会触发事件。
事件类型

void OnTriggerEnter(Collider other) { /* 进入触发区域 */ }  
void OnTriggerExit(Collider other)  { /* 离开触发区域 */ }

③ 射线检测(Raycast)

碰撞检测基础:Box Collider 为射线检测提供碰撞体积,用于判断是否击中目标。

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit)) {Debug.Log("击中物体:" + hit.collider.name);
}

如何正确使用 Box Collider

(1) 基本配置

为物体添加 Box Collider:
菜单栏:Component > Physics > Box Collider。
调整碰撞体尺寸:
在 Inspector 中修改 Size 和 Center,使其匹配物体的视觉模型。

(2) 与 Rigidbody 的配合

动态碰撞:
若物体需要受物理引擎控制(如重力、外力),需附加 Rigidbody 组件。
csharp
Rigidbody rb = GetComponent();
rb.AddForce(Vector3.forward * 10f);
静态碰撞:
若物体静止(如地面),只需添加 Collider,无需 Rigidbody。

(3) 触发区域设置

勾选 Is Trigger。
编写触发事件逻辑:
csharp
void OnTriggerEnter(Collider other) {
if (other.CompareTag(“Player”)) {
Destroy(gameObject); // 玩家触碰后销毁物体
}
}

相关文章:

  • Qt项目——汽车仪表盘
  • Git SSH 密钥多个 Git 来源
  • 研究夜间灯光数据在估计出行需求方面的潜力
  • MySQL 按照日期统计记录数量
  • python 练习
  • 基于LoRA的Llama 2二次预训练实践:高效低成本的大模型领域适配
  • 使用c++调用deepseek的api(附带源码)
  • AI律师匹配AI分析法律需求意图并匹配律师
  • 为什么在TCP层(即传输层)没有解决半包、粘包的问题
  • 基于SpringBoot的在线抽奖系统测试用例报告
  • unity之协程
  • 算法学习(二)
  • 【Leetcode 每日一题】2145. 统计隐藏数组数目
  • 爬虫学习——LinkEXtractor提取链接与Exporter导出数据
  • OpenCV 图形API(47)颜色空间转换-----将 I420(YUV 4:2:0) 格式的图像数据转换为 RGB 格式
  • 大模型应用开发大纲
  • 什么是SPA,SPA与MAP区别
  • alibaba-JSONObject使用
  • 数据库优化
  • 全球首个人形机器人半程马拉松技术分析:翻车名场面背后的突破与挑战
  • 五一去哪儿| 追着花期去旅行,“赏花经济”绽放文旅新活力
  • 陈文清:推进扫黑除恶常态化走深走实,有力回应人民群众对安居乐业的新期待
  • 青海省林业和草原局副局长旦增主动投案,正接受审查调查
  • BNEF:亚洲、中东和非洲是电力基础设施投资的最大机会所在
  • 中纪报:五一节前公开通报释放强烈信号,以铁律狠刹歪风邪气
  • 校长套取学生伙食费设小金库,重庆通报6起违反八项规定典型问题