首页 > 解决方案 > Unity3D Animator 控制器状态的问题

问题描述

我有一个配备了刚体、碰撞器和动画器组件的对象(一张简单的卡片)。特别是,Animator 执行两个简单的剪辑:将卡片旋转 180 度的CoverUncover。第一个从 0 度到 180 度,第二个从 180 度到 0 度。

所以夹子应该盖住或揭开卡片。问题是卡恢复到原来的状态。

例如,卡片的原始状态是“未覆盖状态”,因此当我单击它以覆盖它时,它会按预期覆盖。我以编程方式注册“覆盖”状态。但是,在动画结束后,它会立即返回其原始状态(未覆盖)。该卡现在具有“已覆盖”的内部(C# 变量)状态,但我认为它仍然未被覆盖。当我再次单击它时,将触发正确的动画剪辑:“发现”。

我应该怎么做才能在第一次点击时将其覆盖?

我在这里上传了一个显示卡行为的短片,下面还有一些截图,这些截图指的是 IDE 的各种视图,可能有有用的信息。视频剪辑暂时上传到 Dropbox。

行为视频:Dropbox 链接

Flip脚本的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Flip : MonoBehaviour {

    private Animator anim;
    private enum cs_e {covered, uncovered};
    private cs_e coveringState;

    // Use this for initialization
    void Start () {
        anim = this.GetComponent<Animator>();
        coveringState = cs_e.uncovered;
    }

    // Update is called once per frame
    void Update () {

    }

    private void OnMouseUp()
    {
        Debug.Log("Mouse up");


        if (coveringState == cs_e.uncovered)
        {
            anim.Play("Cover");
            coveringState = cs_e.covered;
        } else {
            anim.Play("Uncover");
            coveringState = cs_e.uncovered;
        } 

    }

    private void OnMouseDown()
    {
        Debug.Log("Mouse down");
    }

    private void MouseDrag()
    {
        Debug.Log("Mouse drag");
    }
}

一些截图:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

标签: c#animationunity3d

解决方案


推荐阅读