【问题标题】:Animating a child object in unity统一动画子对象
【发布时间】:2018-11-30 19:43:28
【问题描述】:

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

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);
        }
    }
}

} //Credit Jayanam Youtube 频道的脚本

【问题讨论】:

  • 听起来更像是代码不起作用..添加一些调试语句,显示结果和代码,它会更容易帮助你
  • @BugFinder 实际上不是代码,而是造成问题的静态批处理

标签: unity3d animation


【解决方案1】:

为了利用静态批处理,您需要明确指定某些游戏对象是静态的,并且不会在游戏中移动、旋转或缩放。为此,请使用 Inspector 中的 Static 复选框将 GameObjects 标记为静态

Link

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


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

【讨论】:

  • 所以我实际上只是这样做了,因为静态一词显示在桌子下方,但现在抽屉动画在进入时开始,即使我有 OpenPanel.SetActive(false);开始后
  • 现在您的动画问题已解决,我相信您可以开始检查 OnColliderEnter/OnColliderStay 是否被调用并打开抽屉。一定有人在你的脚本中调用它。请检查您的代码。
  • 我刚刚添加了代码,如果您仔细查看,您会注意到触发器依赖于玩家标签交互,所以我不确定是什么在调用抽屉打开。
  • 您说您正在制作“OpenPanel.SetActive(false);”在开始时,您在 OnTriggerEnter 中启用它。您应该从 ontrigger enter 中删除启用面板,或者将动画脚本重新设置为处于未使用状态,而不是设置禁用/启用状态。据我所见,您的代码实际上将文本组件附加到表格,因此您可能希望遵循我建议的第二种方法。如果你重写动画状态可能会更好。您需要将此作为另一个问题提出,因为原始问题已经得到解答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
相关资源
最近更新 更多