检查相机是否朝向特定方向

时间:2014-11-14 01:32:53

标签: unity3d

我正在努力让一个角色推动周围的物体。问题是,一旦他接触到一个物体,他就会开始移动它,即使触摸是偶然的,并且角色没有面向物体的方向。

我想要做的是在发生碰撞时获得物体的方向,如果卡马拉真的面向那个方向,则允许玩家移动它。

现在我只设法得到物体的方向,但我不知道如何将它与相机的方向进行比较。

这就是我现在正在尝试的事情:

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
        }
 }

2 个答案:

答案 0 :(得分:0)

您可以尝试以多种方式实现此目的。而且它有点依赖于你对面对框的精确程度。

当某个对象在某个摄像机中可见,以及使用以下功能进入或离开时,您可以获取事件。使用这些命令时,使用该摄像机渲染框(即使只有一条边可见),您的碰撞也会触发。

OnWillRenderObjectRenderer.isVisible Renderer.OnBecameVisibleOnBecameInvisible

或者您可以尝试计算对象框和对象框是否属于相机的视锥体,因为您可以使用以下几何命令

GeometryUtility.CalculateFrustumPlanesGeometryUtility.TestPlanesAABB

或者,如果你想要一个非常精确的面对,你也可以选择Physics.Raycast那么你只会在光线撞击物体时触发事件。

希望这有助于你。

答案 1 :(得分:0)

拿一个指南针obj并将它对准你的设备对不起对象,而不是当你移动它时,你总能知道指向它的位置。

理论上它应该可以工作,但也许你的对象只是因为模拟器运动引擎中的错误而移动。