我有这个要尝试制作动画的桌子抽屉,如果玩家按下“ 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频道
答案 0 :(得分:1)
为了利用静态批处理,您需要明确指定某些GameObject是静态的,并且不能在游戏中移动,旋转或缩放。为此,请使用检查器中的“静态”复选框将GameObjects标记为“静态”
当您取消选中静态复选框时,可以再次使对象动画。您把图像放在前面是好事,否则这个问题将很难解决。
注意:您可以在整个表上禁用静态批处理,也可以在子级(即抽屉)上禁用静态批处理。我相信,在子级上禁用静态批处理会更有益,但是如果出现动画方面的问题,那么不妨尝试在整个对象上禁用静态批处理,看看是否适合您的需求。