动画OnTrigger Unity

时间:2017-11-27 10:27:18

标签: c# animation unity3d camera

当我第一个玩家进入房间时,我正试图制作一个房间的飞盘照相机。我已经在相机上录制了动画,但是当我在相机之间切换时我遇到了麻烦。我已经阅读了很多关于它的研究,但实际上我不知道我做错了什么。我将不胜感激任何帮助。谢谢!

void OnTriggerEnter(Collider other)
{
    inTrigger = true;
}

void OnTriggerExit(Collider other)
{
    inTrigger = false;
}
void Start()
{
    anim = GetComponent<Animation>();
    cam = GetComponent<Camera>();
}

// Update is called once per frame
void Update()
{
    if (inTrigger/*&& !anim.isPlaying*/)
    {
        anim.Play("AnimateCameraFirst");
    }

    if (anim.IsPlaying("AnimateCameraFirst"))
    {
        cam.gameObject.SetActive(true);
        FPCam.gameObject.SetActive(false);
    }
    else
    {
        FPCam.GetComponent<Camera>().enabled = true;
        cam.GetComponent<Camera>().enabled = false;
    }
}

1 个答案:

答案 0 :(得分:0)

此处不需要使用Update()。以下代码应该足够了:

首先,将FPCam GameObject更改为Camera以避免GetComponent来电:

public Camera FPCam; // you have to reassign camera reference through inspector.
Camera cam; // as usual

void Start()
{
    anim = GetComponent<Animation>();
    cam = GetComponent<Camera>();
}

void OnTriggerEnter(Collider other)
{
    anim.Play("AnimateCameraFirst");
    cam.enabled = true;
    FPCam.enabled = false;
}

void OnTriggerExit(Collider other)
{
    FPCam.enabled = true;
    cam.enabled = false;
}

要在动画完成时运行一些代码,您必须创建动画事件并向其注册方法。 Have a look如何实现这一目标。

您可以创建此方法并将其注册到动画结束时触发的事件:

public void CameraFirstAnimation_Stopped()
{
    FPCam.enabled = true;
    cam.enabled = false;
}

希望这有帮助。