我们想把场景中的BoxCollider的坐标点导出出来让服务器也能用。虽然BoxCollider自身的大小可以获取出来,但是如果有父对象,并且有坐标的变化那算起来就比较麻烦了。还好unity提供了一个方法,真的很便捷。如下图所示,我用了8个标记点来标记获取到的boxcollider的坐标。旋转、缩放都可以计算出正确的坐标点来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
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; } } |
最后,欢迎大家测试~ 欢迎在下面给我留言~
- 本文固定链接: https://www.xuanyusong.com/archives/4222
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!
扩展 boxcollider 给他设置一个唯一的别名 怎么弄呀.
CharacterController和其他碰撞体碰撞后CharacterController.collisionflags很奇怪有些情况是等于4有些情况等于5
因为同时满足了两个条件, 你可以用 (xx&x!=0)来判断
真的不错,学习了!
雨神,你好我在用射线拾取物体的纹理坐标时,RaycastHit hit; Physics.Raycast (camera.ScreenPointToRay(Input.mousePosition), hit);发现hit的其他值正常,而获取uv纹理坐标 Vector2 pixelUV = hit.textureCoord; 的值一直都是(0,0)
在使用hit.textureCoord时,有没有什么需要特别注意的地方?例如 mesh Colider 和 mesh Renderer 怎么设置图片格式要求还是少了什么前置的条件?在网上查了很久,关于 .textureCoord 的说明感觉很少
大神你好,请问下在unity 怎么在真机调试c#脚本呀?我用网上那个方法,在player setting里面沟选debug script,然后生成xcode工程,app运行到真机上然后打开monodevelop ,attach to process界面可以看到正在运行程序的机器,可点击attach的时候总是提示could not connect to the debugger..
真机我也没调过。。。
难道UNITY一定不会出现”编辑器可行,但是真机不可行”的BUG之类的么?好多开发者都不考虑真机调试
一般逻辑上的问题 真机出编辑器也会出。 但是有些crash的问题只会在真机上出, 我们会用dsym在真机上找crash的地方。。
也许并不是CRASH,只是表现上有差异,那只能借助打LOG了吧?挺麻烦的…虽然出现可能性低,但是一旦出现就难处理了。大神有空研究下如何真机调试开个教程哈?我上面那个步骤在安卓上是可以调的…IOS就不行
能讲讲布尔运算吗
真非为假,假非为真, AB非等于A非或B非, 真或任意值为真,假与任何值为假, 也就是这些规则,不麻烦吧
假作真时真亦假