统一动画子对象

时间:2018-11-30 09:04:07

标签: unity3d animation

我有这个要尝试制作动画的桌子抽屉,如果玩家按下“ E”,则抽屉将打开并保持打开状态。当玩家再次按下“ E”时,门关闭。 该脚本基于玩家输入的触发器,而我在场景中的多个门上都有它。  但是我遇到了一些问题,当玩家按下“ E”按钮时,抽屉上的对撞机会移动,但抽屉gameObject不会。 我得出的结论是,它不是脚本,因为它的工作在门上,但是我已经尝试了其他所有方法。我将附上一些图片以供参考。

public class DoorScript : MonoBehaviour
{

public GameObject OpenPanel = null;

private bool _isInsideTrigger = false;

public Animator _animator;

public string OpenText = "Press 'E' to open";

public string CloseText = "Press 'E' to close";

private bool _isOpen = false;

private void Start()
{
    OpenPanel.SetActive(false);
}


void OnTriggerEnter(Collider other)
{
    if (other.tag == "Player")
    {
        _isInsideTrigger = true;
        OpenPanel.SetActive(true);
        UpdatePanelText();
    }
}

private void UpdatePanelText()
{
    Text panelText = OpenPanel.transform.Find("Text").GetComponent<Text>();
    if (panelText != null)
    {
        panelText.text = _isOpen ? CloseText: OpenText;
    }
}

void OnTriggerExit(Collider other)
{
    if (other.tag == "Player")
    {
        _isInsideTrigger = false;
        OpenPanel.SetActive(false);
    }
}

private bool IsOpenPanelActive
{
    get
    {
        return OpenPanel.activeInHierarchy;
    }
}

// Update is called once per frame
void Update()
{
    if (IsOpenPanelActive && _isInsideTrigger)
    {
        if (Input.GetKeyDown(KeyCode.E))
        {
            _isOpen = !_isOpen;

            Invoke("UpdatePanelText", 1.0f);

            _animator.SetBool("open", _isOpen);
        }
    }
}

} //为脚本提供Jayanam Youtube频道

here enter image description here

1 个答案:

答案 0 :(得分:1)

  

为了利用静态批处理,您需要明确指定某些GameObject是静态的,并且不能在游戏中移动,旋转或缩放。为此,请使用检查器中的“静态”复选框将GameObjects标记为“静态”

Link

当您取消选中静态复选框时,可以再次使对象动画。您把图像放在前面是好事,否则这个问题将很难解决。


注意:您可以在整个表上禁用静态批处理,也可以在子级(即抽屉)上禁用静态批处理。我相信,在子级上禁用静态批处理会更有益,但是如果出现动画方面的问题,那么不妨尝试在整个对象上禁用静态批处理,看看是否适合您的需求。