Unity 获取BoxCollider八个点的世界坐标
2016-10-26 17:14
501 查看
我们想把场景中的BoxCollider的坐标点导出出来让服务器也能用。虽然BoxCollider自身的大小可以获取出来,但是如果有父对象,并且有坐标的变化那算起来就比较麻烦了。还好unity提供了一个方法,真的很便捷。如下图所示,我用了8个标记点来标记获取到的boxcollider的坐标。旋转、缩放都可以计算出正确的坐标点来。
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour
{
//8个标志位 ,用来在scene里预览
public Transform[] points;
//需要提取Boxcollier顶点的对象
public BoxCollider cube;
void Start()
{
//父节只能调节位置, 不能调节旋转和缩放。
Transform parent = cube.transform.parent;
while(parent!=null)
{
parent.localRotation = Quaternion.Euler(Vector3.zero);
parent.localScale = Vector3.one;
parent = parent.parent;
}
}
void Update()
{
Vector3 [] veces = GetBoxColliderVertexPositions(cube);
for(int i =0; i< veces.Length; i++)
{
points[i].transform.position = veces[i];
}
}
Vector3[] GetBoxColliderVertexPositions (BoxCollider boxcollider)
{
var vertices = new Vector3[8];
//下面4个点
vertices[0] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f);
vertices[1] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f);
vertices[2] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f);
vertices[3] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f);
//上面4个点
vertices[4] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f);
vertices[5] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f);
vertices[6] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f);
vertices[7] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f);
return vertices;
}
}
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour
{
//8个标志位 ,用来在scene里预览
public Transform[] points;
//需要提取Boxcollier顶点的对象
public BoxCollider cube;
void Start()
{
//父节只能调节位置, 不能调节旋转和缩放。
Transform parent = cube.transform.parent;
while(parent!=null)
{
parent.localRotation = Quaternion.Euler(Vector3.zero);
parent.localScale = Vector3.one;
parent = parent.parent;
}
}
void Update()
{
Vector3 [] veces = GetBoxColliderVertexPositions(cube);
for(int i =0; i< veces.Length; i++)
{
points[i].transform.position = veces[i];
}
}
Vector3[] GetBoxColliderVertexPositions (BoxCollider boxcollider)
{
var vertices = new Vector3[8];
//下面4个点
vertices[0] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f);
vertices[1] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f);
vertices[2] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f);
vertices[3] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f);
//上面4个点
vertices[4] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f);
vertices[5] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f);
vertices[6] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f);
vertices[7] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f);
return vertices;
}
}
相关文章推荐
- Unity3D之获取BoxCollider八个点的世界坐标
- Flare3d 如何获取骨骼部位的世界坐标
- Unity 世界坐标转换到NGUI坐标
- unity中世界坐标和绝对坐标之间的转换
- Unity世界坐标与屏幕坐标之间如何转换
- Unity之计算子节点世界坐标
- OSG中获取视点的世界坐标
- 京城游戏人-Day6:Unity 点击坐标与世界坐标
- 从kinect获取世界坐标
- Unity 坐标转换 世界坐标转换到NGUI坐标
- Unity如何获取鼠标当前帧和上一帧的屏幕坐标差
- Unity 世界坐标转换到NGUI坐标
- 将Unity中的世界坐标转换成NGUI中的坐标
- unity3d鼠标点击,获取世界坐标
- opengl 获取鼠标在世界坐标系中的坐标
- [unity基础教程]Unity3D中世界坐标转如何化成屏幕坐标?
- unity 3d 获取鼠标当前坐标
- [unity3d]navmesh 自动寻路 鼠标点击的坐标获取 鼠标点击的世界坐标
- Unity中的世界坐标和NGUI中的坐标的相互转换
- 计算获取Unity物体下面的地面的坐标点