我正在尝试实现类似于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);
}
注意:此脚本附在相关门上。
另外,我的代码并没有考虑到玩家在确定旋转时所在门的哪一侧。有没有人对我从哪里开始有任何提示?
答案 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 插槽中。那就是它。
当站在门前,BackCollider
,click
和hold
鼠标向下时,它会拉打开门。向上移动将关闭它。
当门后的move
,click
和hold
向上移动时,它会推开打开。向上移动将关闭它。
move