这是【Unity3D 教程系列第 19 篇】,如果觉得有用的话,欢迎关注专栏。
前言: 给一个长方体模型添加碰撞盒 BoxCollider,即使手动拖拽也费不了多长时间,但手动拖动不仅显得 Low ,而且准确率也不高,对于重复的工作,除非实现不了的功能,否则坚决反对用手动这种方式。
文章目录
操作一:给一般长方体模型添加 BoxCollider
- 操作一:给一般长方体模型添加 BoxCollider
- 操作二:根据长方体一条对角线的两顶点,添加 BoxCollider
思路 根据模型的 Mesh ,我们可以知道模型的信息,获取到的信息可以赋值给碰撞盒的大小 size 和中心 center 。
举例说明 这里我以 Unity 自带的 Cube 为例,通过编辑器方式,给 Cube 加一个和其一样大小的 BoxCollider,先来看一下效果演示图 点击 A 按钮后,会以所选物体为父物体,添加一个 BoxCollider,实现代码如下所示
///
/// 给普通的长方体模型添加 BoxCollider
///
public void AddNormalBoxCollider()
{
// 所选对象
var selectObj = Selection.activeGameObject;
var bounds = selectObj.GetComponent().sharedMesh.bounds;
// 获得模型原始尺寸的大小
var sizeX = bounds.size.x * selectObj.transform.localScale.x;
var sizeY = bounds.size.y * selectObj.transform.localScale.y;
var scaleZ = bounds.size.z * selectObj.transform.localScale.z;
// 添加碰撞盒,并设置大小及中心点
var boxCollider = Undo.AddComponent(selectObj);
boxCollider.size = new Vector3(sizeX, sizeY,scaleZ);
boxCollider.center = bounds.center;
}
操作二:根据长方体一条对角线的两顶点,添加 BoxCollider
不过,操作一只适合长方体模型,复杂一点的模型就无法通过它来实现了。可有时候一个模型中,有一部分是长方体,除了用手拖的方式添加碰撞盒,有没有可以用代码实现的呢 ?
这就是我们下面需要说的操作二了。
思路 通过选取一条对角线的两顶点,根据这两个顶点我们可以知道其它 6 个顶点的信息,比较这 8 个顶点的位置信息,我们就可以给长方体添加一个指定大小的 BoxCollider 。
举例说明 我们先来看效果演示图 实现代码如下所示
// 通过点击获取到的顶点列表
public List VertexList;
///
/// 通过长方体的一条对角线两个顶点,确定一个 BoxCollider
///
public void VertexBox()
{
if (VertexList == null) VertexList = new List();
VertexList.Add(Selection.activeGameObject.transform.position);
if (VertexList.Count != 2) return;
for (var i = 0; i
关注
打赏
热门博文
- 【综合类型第 33 篇】爆肝!!!什么是天干、地支、两仪、三才、四象、四柱、五行、八卦、二十八星宿(xiù)、六十甲子、六十四卦、百家姓
- 【Flutter 问题系列第 71 篇】Flutter 中 Uint8List 和 Image 之间的相互转换
- 【Word 教程系列第 2 篇】Word 中如何设置每页的表格都有表头
- 【Word 教程系列第 1 篇】如何去除 Word 表格中的箭头
- 【Flutter 问题系列第 70 篇】Flutter 与 Android 原生交互(通信)方式之 MethodChannel(精简教程)
- 【Flutter 问题系列第 69 篇】Flutter 与 Android 原生交互(通信)方式之 MethodChannel(详细教程)
- 【Flutter 问题系列第 68 篇】为什么提示 The plugins “xxx_plugin“ use a deprecated version of the Android embedding
- 【Mac 教程系列第 17 篇】如何找回 Mac 上访达侧边栏上的下载、文稿、隔空投送等文件夹选项
- 【Flutter 问题系列第 66 篇】本地存在多个 Flutter SDK 版本时,项目前后因引用了不同版本的 SDK 导致部分包文件报错的解决方案
- 【Flutter 问题系列第 65 篇】在 Flutter 设置 showModalBottomSheet 最大高度无效的解决方案