在Unity3D中打开门前后门,与Amnesia相似

时间:2016-05-10 04:15:53

标签: c# input unity3d rotation quaternions

我正在尝试实现类似于Amnesia的功能:The Dark Descent,让玩家按住鼠标按钮并在门上向前或向后拖动以打开它(如果你不熟悉的话) Door Example大约在36:30)。

我有以下代码,它有点工作,但开口是抖动和来回反弹,我无法弄清楚我是否使用transform.Rotate错误:

    if (previousMousePosition == garbageVector) // if this is the first frame, create a reference for previousMousePosition
        previousMousePosition = Input.mousePosition;
    else
    {
        // else find the difference and rotate
        rotationAmount = (Input.mousePosition.x - previousMousePosition.x);
        if (rotationAmount < 0)
            this.transform.Rotate(Vector3.up * rotationSpeed * Time.deltaTime);
        else if (rotationAmount > 0)
            this.transform.Rotate(Vector3.down * rotationSpeed * Time.deltaTime);

    }

注意:此脚本附在相关门上。

另外,我的代码并没有考虑到玩家在确定旋转时所在门的哪一侧。有没有人对我从哪里开始有任何提示?

1 个答案:

答案 0 :(得分:2)

您问题中的代码太小而无法实现。您可以通过更改transform.localEulerAngles轻松完成此操作。我在这个答案中附带的代码可以做到这一点。 T测试脚本,按照下面的方向。这也描述了如何确定前门和后门。

1 。创建一个名为的简单多维数据集。

2 。删除自动附加到新创建的多维数据集/门的Box Collider

第3 即可。选择,右键单击并单击&#34; 创建空&#34;。将新GameObject重命名为FrontCollider。确保FrontCollider现在是Door GameObject 的孩子。

4 。选择FrontCollider,将BoxCollider添加到其中。将碰撞机定位在门的前部(摄像机前部)。

5 。重复FrontCollider重命名新游戏对象BackCollider。然后将BackCollider GameObject移动到 Door GameObject的后面。 确保对齐良好的最佳方法是FrontCollider的z位置是-2,将BackCollider的z位置设置为2.所以你所做的就是改变{的z位置{1}}和FrontCollider碰撞器相互对立。

5 。创建一个空的GameObject并将其命名为 Door Parent 确保它不是任何GameObject的子项。我们需要使用此GameObject将门的枢轴点更改为左侧。因此,门实际上会像门(一侧)而不是围绕自身的中心一样旋转。

6 。使用移动工具并将 Door Parent Gameobject移动到门的左侧。不要旋转它。移动吧。一旦您认为 Door Parent 现在位于 Door 应该旋转的位置,请将下面的BackCollider附加到 Door Parent GameObject不是 GameObject。

7 。将Door Script GameObject拖到脚本中的 frontDoorCollider 插槽中。 将FrontCollider GameObject拖到脚本中的 backDoorColliderin 插槽中。那就是它。

当站在门前,BackColliderclickhold鼠标向下时,它会打开门。向上移动将关闭它。

当门后的moveclickhold向上移动时,它会推开打开。向上移动将关闭它。

enter image description here

move