当原点不在网格上时,如何将网格/游戏对象放置在相机的 FoV 中间?
Posted
技术标签:
【中文标题】当原点不在网格上时,如何将网格/游戏对象放置在相机的 FoV 中间?【英文标题】:How to place a Mesh/gameObject in the middle of the camera's FoV when the origin is not on the mesh? 【发布时间】:2021-07-21 15:30:12 【问题描述】:我正在制作一个 Unity 游戏,我需要在其中显示从摄像机 FoV 中心的服务器下载的 3D 模型,问题是某些模型在网格上没有枢轴,所以我的代码在这种情况下效果不佳:
Vector3 positionInFront = CameraCache.Main.transform.position + (CameraCache.Main.transform.forward * 1);
transform.position = positionInFront ;
知道如何在不使用父母/更改层次结构的情况下解决此问题吗? 这解决了我的问题,但是当模型在 polycount 方面很大时,应用程序很难对层次结构进行更改:
GameObject aux = new GameObject();
aux.transform.position = targetCenter;
transform.SetParent(aux.transform);
aux.transform.position = positionInFront;
transform.transform.SetParent(null);
GameObject.Destroy(aux);
【问题讨论】:
可以添加一个对撞机并使用对撞机的中心吗? 【参考方案1】:您可以使用几何中心,例如Renderer
.bounds
.center
以计算移动对象所需的增量向量,使中心最终位于目标位置,例如
// Model pivot in worldspace
var position = yourModel.position;
// Center if geometry in worldspace
var center = yourModel.GetComponent<Renderer>().bounds.center;
// vector from center to pivot
var centerToPositionDelta = position - center;
// Your target position in worldspace
var positionInFront = CameraCache.Main.transform.position + CameraCache.Main.transform.forward * 1;
// By adding the shifting vector center -> position
// you move the object just so the center ends up in the targetPosition
transform.position = positionInFront + centerToPositionDelta;
在智能手机上输入,但我希望思路清晰
【讨论】:
以上是关于当原点不在网格上时,如何将网格/游戏对象放置在相机的 FoV 中间?的主要内容,如果未能解决你的问题,请参考以下文章