1) Я предлагаю создавать анимацию спрайтов / листов спрайтов с помощью Mecanim или относительно новую скелетную анимацию с помощью Anima2D . С помощью этих систем вы можете создавать красивые анимации, переходы, даже анимировать сферический коллайдер, чтобы вызывать столкновения и действия, изменять активное состояние ваших объектов и т. Д. c. и управляйте анимацией с очень небольшим кодом. На мой взгляд, таким образом можно добиться наилучшего эффекта.
Ведь язык не пуля ... :) Нужен только один. Я не думаю, что вы хотите создавать экземпляры / создавать префабы каждый раз, когда нажимаете кнопку «лизать». Вместо этого вы должны просто включить / выключить свой языковой объект (gameObject.SetActive). Вы также можете изменить активное состояние объекта в анимации. Так что, если вы не знаете, как это кодировать, вы можете сделать большую часть этого в окне «Анимация» и использовать очень простой код для воспроизведения анимации при нажатии кнопки «лизать». Каждый раз, когда сферический коллайдер касается чего-либо, вы можете указать контроллеру аниматора воспроизвести анимацию «отката», и она плавно перейдет в начальную позицию.
Существует множество руководств по Mecanim, Animations, 2D Animations, Anima2D, Animator Controller.
2) Если вам нужен очень хороший контроль над языком, вы можете создать собственный me sh и управлять им с помощью скрипта, но это намного сложнее.
3) Причина, по которой ваш объект не выключается, вероятно, заключается в том, что вы написали WaitForSeconds (2000), поэтому он выключится через 2000 секунд - более получаса. Вы также должны вызвать его с помощью StartCoroutine (shotTongue ()), поскольку это сопрограмма. Опять же, если вы хотите выключить объект, не создавайте каждый раз новые. Если вы хотите продолжать создавать новые объекты, вы должны вместо этого уничтожить объекты. В противном случае в вашей сцене будет много деактивированных языков, и я не думаю, что вам нужно столько языков.