【问题标题】:Check if camera if facing a specific direction检查相机是否面向特定方向
【发布时间】:2014-11-14 01:32:52
【问题描述】:

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

我想要做的是在碰撞发生时获取对象的方向,如果相机真的朝向那个方向,允许玩家移动它。

目前我只能获得物体的方向,但我不知道如何将其与相机的方向进行比较。

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

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

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    您可以尝试通过几种不同的方式来实现这一目标。这有点取决于您的意思是面对盒子的精确程度。

    您可以使用以下函数在某个对象在某个相机内可见以及当它进入或离开时获取事件。从使用该相机渲染框的那一刻起,使用这些命令(因此即使只有一个边缘可见),您的碰撞也会触发。

    OnWillRenderObject, Renderer.isVisible Renderer.OnBecameVisible, OnBecameInvisible

    或者您可以尝试计算物体边界框是否落在相机的视锥内,您可以使用以下几何命令

    GeometryUtility.CalculateFrustumPlanes, GeometryUtility.TestPlanesAABB

    或者,如果您希望有一个非常精确的朝向,您也可以选择Physics.Raycast,那么您只会在光线击中对象时触发事件。

    希望这对您有所帮助。

    【讨论】:

      【解决方案2】:

      拿一个指南针 obj 并将其对准您的设备抱歉对象,而不是当您移动它时,您总是可以知道它指向的位置。

      理论上它应该可以工作,但由于模拟器运动引擎中的错误,您的对象可能只是四处移动。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-10
        • 1970-01-01
        • 2018-08-06
        • 2021-06-02
        相关资源
        最近更新 更多