我正在努力让一个角色推动周围的物体。问题是,一旦他接触到一个物体,他就会开始移动它,即使触摸是偶然的,并且角色没有面向物体的方向。
我想要做的是在发生碰撞时获得物体的方向,如果卡马拉真的面向那个方向,则允许玩家移动它。
现在我只设法得到物体的方向,但我不知道如何将它与相机的方向进行比较。
这就是我现在正在尝试的事情:
void OnCollisionEnter(Collision col) {
float maxOffset = 1f;
if (col.gameObject.name == "Sol") {
// Calculate object direction
Vector3 direction = (col.transform.position - transform.position).normalized;
// Check the offset with the camera rotation (this doesn't work)
Vector3 offset = direccion - Camera.main.transform.rotation.eulerAngles.normalized;
if(offset.x + offset.y + offset.z < maxOffset) {
// Move the object
}
}
答案 0 :(得分:0)
您可以尝试以多种方式实现此目的。而且它有点依赖于你对面对框的精确程度。
当某个对象在某个摄像机中可见,以及使用以下功能进入或离开时,您可以获取事件。使用这些命令时,使用该摄像机渲染框(即使只有一条边可见),您的碰撞也会触发。
OnWillRenderObject,Renderer.isVisible Renderer.OnBecameVisible,OnBecameInvisible
或者您可以尝试计算对象框和对象框是否属于相机的视锥体,因为您可以使用以下几何命令
GeometryUtility.CalculateFrustumPlanes,GeometryUtility.TestPlanesAABB
或者,如果你想要一个非常精确的面对,你也可以选择Physics.Raycast那么你只会在光线撞击物体时触发事件。
希望这有助于你。
答案 1 :(得分:0)
拿一个指南针obj并将它对准你的设备对不起对象,而不是当你移动它时,你总能知道指向它的位置。
理论上它应该可以工作,但也许你的对象只是因为模拟器运动引擎中的错误而移动。