Unity - 完成任务后销毁DoorController

时间:2017-01-18 18:13:04

标签: c# unity3d 3d rotation topdown

我编写了一个控制器,用于在TopDown-Shooter中打开门。

我围绕本地Y轴旋转枢轴点以打开门对象。门应保持打开状态,因此我不再需要Controller和Controller对象。我想在完成工作后将其销毁。

我的脚本看起来像这样:

public class DoorController : MonoBehaviour
{
    public Transform pivotLeftTransform; // the left pivot point
    public Transform pivotRightTransform; // the right pivot point

    int openAngle = 90; // how far should the door open up?
    bool startOpen = false; // start opening?
    float smooth = 2; // smooth rotation

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Player")
        {
            startOpen = true; // when the Player triggers, start opening
        }
    }

    void Update()
    {
        if (startOpen)
        {
            OpenDoor(pivotLeftTransform, openAngle);
            OpenDoor(pivotRightTransform, -openAngle);

            if (pivotLeftTransform.localRotation.y == openAngle && pivotRightTransform.localRotation.y == -openAngle) // when the doors are rotated, destroy this object
            {
                Destroy(gameObject);
            }
        }
    }

    private void OpenDoor(Transform pivotTransform, int rotationAngle)
    {
        Quaternion doorRotationOpen = Quaternion.Euler(0, rotationAngle, 0); // desired door rotation
        pivotTransform.localRotation = Quaternion.Slerp(pivotTransform.localRotation, doorRotationOpen, smooth * Time.deltaTime); // rotate the door to the desired rotation
    }
}

我的问题是,我怎么能破坏这个物体。我的代码

if (pivotLeftTransform.localRotation.y == openAngle && pivotRightTransform.localRotation.y == -openAngle)   

似乎不起作用。在将枢轴点旋转到90或-90度之后,该语句仍然是错误的。我也试过

pivotTransform.rotation.y

但它也不起作用。我需要传递哪个轮换?

感谢。

2 个答案:

答案 0 :(得分:1)

您的代码有两个错误:

1 。比较花车

2 。使用ActiveSheet.Range("H10").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, _ Operation:= xlNone, SkipBlanks:=False, Transpose:=False transform.localRotation检查角度。

您可以使用transform.rotationeulerAngles解决此问题。同样,为了比较浮点数,请使用localEulerAngles而不是>=,因为这可能永远不会成真。

替换

=

if (pivotLeftTransform.localRotation.y == openAngle && pivotRightTransform.localRotation.y == -openAngle)
{
    Destroy(gameObject);
}

如果您对上述答案有疑问,则必须逐一排除故障。将if (pivotLeftTransform.localEulerAngles.y >= openAngle && pivotRightTransform.localRotation.y >= -openAngle) { Destroy(gameObject); } 分开并查看哪一个失败,如下所示:

&&

答案 1 :(得分:-1)

正确的方法是增加一个小容差值:

if (pivotLeftTransform.localEulerAngles.y >= openAngle - 0.1f && pivotRightTransform.localEulerAngles.y <= 360 - openAngle + 0.1f)

这可能不是代码干净,但目前有效:)