Анимация детского объекта в единстве - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть этот ящик стола, который я пытаюсь анимировать, где, если игрок нажимает «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 для сценария

enter image description here enter image description here

1 Ответ

0 голосов
/ 30 ноября 2018

Чтобы воспользоваться преимуществами статического пакетирования, вам необходимо явно указать, что определенные объекты GameObject являются статическими и не перемещаются, вращаются или масштабируются в игре.Для этого пометьте GameObjects как статические с помощью флажка Static в Inspector

Link

Вы можете снова оживить объект, сняв флажок static,Хорошо, что вы помещаете изображения вперед, иначе эту проблему было бы трудно решить.


Примечание: вы можете отключить статическое пакетирование для всей таблицы или отключить статическое пакетирование для дочернего элемента, то есть для ящика.Я полагаю, что было бы более полезно отключить статическое пакетирование для дочернего процесса, но если возникнет какая-то проблема с анимацией, можно также попробовать отключить статическое пакетирование для всего объекта и посмотреть, подходит ли оно вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...