这是【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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?