Скрипт не вызывает воспроизведение анимации
Greexon Дата: Среда, 08 Апреля 2015, 19:18 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Здравствуйте, у меня скрипт должен вызывать функцию из другого скрипта, которая будет воспроизводить анимацию, но он этого не делает, хотя все другие действия выполняет, а эта функция через другой скрипт благополучно вызывается. Скрипт:
Код
using UnityEngine; using System.Collections; public class ToBattle : MonoBehaviour { public CharacterAnimator Animator; public ParticleSystem Left; public ParticleSystem Right; public bool InBattle; void Start (){ Left.Stop(); Right.Stop(); } void Update () { foreach(Touch touch in Input.touches){ if(this.GetComponent<GUITexture>().HitTest(touch.position) & InBattle == false){ Animator.ToBattleAn(); Left.Play(); Right.Play(); InBattle = true; } } } }
robertono Дата: Среда, 08 Апреля 2015, 19:39 | Сообщение # 2
Чокнутый Кот
Сейчас нет на сайте
Greexon , ничего не понял. Какая функция ? Какой класс? Что куда? Ничего не понял..
MANMANA Дата: Среда, 08 Апреля 2015, 19:50 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
а давайте все обзывать Animator'ами... в другом скрипте скрипту "CharacterAnimator" тож имя Animator даешь? не запутается Юнька-то? http://docs.unity3d.com/ScriptReference/Animator.html я что-то в стандартных методах Аниматора не вижу ToBattleAnДобавлено (08 апреля 2015, 19:50) --------------------------------------------- а если вот так написать
Код
public Animator CharacterAnimator;
, то еще интересней будет
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer Последнее: Новый раздел "Текстуры" Как запатентовать, защитить техническое решение, игру, идею
Сообщение отредактировал MANMANA - Среда, 08 Апреля 2015, 19:48
Greexon Дата: Среда, 08 Апреля 2015, 20:00 | Сообщение # 4
почетный гость
Сейчас нет на сайте
MANMANA Спасибо конечно за совет, но проблема то не в этом была. robertono Скрипт который я предоставил не вызывает функцию из другого.
MANMANA Дата: Среда, 08 Апреля 2015, 20:01 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
а в чем была проблема? если решили, то напишите... функцию-то вы вот так вызываете Animator.ToBattleAn(); ?
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer Последнее: Новый раздел "Текстуры" Как запатентовать, защитить техническое решение, игру, идею
Greexon Дата: Среда, 08 Апреля 2015, 20:07 | Сообщение # 6
почетный гость
Сейчас нет на сайте
Даже когда я её так называл, в одном скрипте она вызывалась, а в этом нет
MANMANA Дата: Среда, 08 Апреля 2015, 20:13 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
глянул сейчас, да именование в виде Animator не мешает получить доступ к функции. а в функции ToBattleAn пробовали прописать Debug.Log("Invoked!!!!!"), может разок вызывается? ведь, как вы говорите вот эта часть кода Left.Play(); Right.Play(); InBattle = true; выполняется у вас.
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer Последнее: Новый раздел "Текстуры" Как запатентовать, защитить техническое решение, игру, идею
Greexon Дата: Среда, 08 Апреля 2015, 20:24 | Сообщение # 8
почетный гость
Сейчас нет на сайте
Очень странно, при старте игры выполняется 68 раз(анимация не проигрывается), но при нажатии на кнопку не выводитсяДобавлено (08 апреля 2015, 20:24) --------------------------------------------- Ошибся, добавил не к той функции, а эта выводит, но анимацию не играет
MANMANA Дата: Среда, 08 Апреля 2015, 20:31 | Сообщение # 9
почти ветеран
Сейчас нет на сайте
если функция вызывается из этого скрипта, то при касании пальцем тача в массив Input.touches было добавлено 68 элементов. для них сработал цикл foeach ... потом всем им проставился false может так - if (touch.phase == TouchPhase.Began) { if(this.GetComponent<GUITexture>().HitTest(touch.position) & InBattle == false) { Animator.ToBattleAn(); Left.Play(); Right.Play(); InBattle = true; } }Добавлено (08 апреля 2015, 20:31) --------------------------------------------- тогда функцию в студию
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer Последнее: Новый раздел "Текстуры" Как запатентовать, защитить техническое решение, игру, идею
Greexon Дата: Среда, 08 Апреля 2015, 20:32 | Сообщение # 10
почетный гость
Сейчас нет на сайте
Говорю же ошибся, просто из-за чего-то не играется анимацияДобавлено (08 апреля 2015, 20:32) --------------------------------------------- Вот весь скрипт аниматора:
Код
using UnityEngine; using System.Collections; public class CharacterAnimator : MonoBehaviour { public GameObject Joystick; public Joystick JoystickSc; public Animation CharacterAn; private float JoyY; private float JoyX; void Start(){ CharacterAn = GetComponent<Animation>(); } void Update () { JoyX = Joystick.transform.position.x; JoyY = Joystick.transform.position.y; if (JoystickSc.touchfinger == false) { CharacterAn.CrossFade("Idle"); } else if ((JoyX != 0) & (JoyY != 0)) { CharacterAn.CrossFade("Run"); } } public void ToBattleAn(){ CharacterAn.CrossFade ("ToBattle"); } public void UpAn(){ CharacterAn.CrossFade ("Up"); } }
MANMANA Дата: Среда, 08 Апреля 2015, 20:32 | Сообщение # 11
почти ветеран
Сейчас нет на сайте
или код того, как вы вызываете функцию из другого кода (тот случай, когда при ее вызове проигрывается анимация)
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer Последнее: Новый раздел "Текстуры" Как запатентовать, защитить техническое решение, игру, идею
Greexon Дата: Среда, 08 Апреля 2015, 20:34 | Сообщение # 12
почетный гость
Сейчас нет на сайте
Ну и вот ещё первый скрипт, который работает:
Код
using UnityEngine; using System.Collections; public class Jump : MonoBehaviour { public Move Move; public CharacterAnimator AnimatorCh; public bool Grounded; void Update () { if (Move.high > 2) { Grounded = false; } if (Move.high < 2) { Grounded = true; } if(Grounded == false){ AnimatorCh.UpAn(); } foreach(Touch touch in Input.touches){ if(this.GetComponent<GUITexture>().HitTest(touch.position) & Grounded == true){ Move.Jump(); } } } }
MANMANA Дата: Среда, 08 Апреля 2015, 20:37 | Сообщение # 13
почти ветеран
Сейчас нет на сайте
а там так и должна быть Animation, или все таки Animator?Добавлено (08 апреля 2015, 20:36) --------------------------------------------- Animator.CrossFade Create a dynamic transition between the current state and the destination state. Animation.CrossFade Fades the animation with name animation in over a period of time seco...
Добавлено (08 апреля 2015, 20:37) --------------------------------------------- если все верно, то дело, должно быть, в "ToBattle" есть ли такая анимация. верно ли название?
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer Последнее: Новый раздел "Текстуры" Как запатентовать, защитить техническое решение, игру, идею
Greexon Дата: Среда, 08 Апреля 2015, 20:39 | Сообщение # 14
почетный гость
Сейчас нет на сайте
Ну в случае с анимацией прыжка всё работает (UpAn())
MANMANA Дата: Среда, 08 Апреля 2015, 20:45 | Сообщение # 15
почти ветеран
Сейчас нет на сайте
поменяйте в скрипте "ToBattle" на "Up" - проиграется анимация для Up при тех же действиях с джойстиком/тачем, которые выполняются для ToBattle?Добавлено (08 апреля 2015, 20:43) --------------------------------------------- но сдается мне, что дело в InBattle = true;
Добавлено (08 апреля 2015, 20:45) --------------------------------------------- в логике
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer Последнее: Новый раздел "Текстуры" Как запатентовать, защитить техническое решение, игру, идею
Greexon Дата: Среда, 08 Апреля 2015, 20:52 | Сообщение # 16
почетный гость
Сейчас нет на сайте
Так не работает, но ToBattle работает в скрипте для UpДобавлено (08 апреля 2015, 20:52) --------------------------------------------- Как я и думал, её перебивает анимация Idle, но вот почему Up при этом работает?
MANMANA Дата: Среда, 08 Апреля 2015, 21:09 | Сообщение # 17
почти ветеран
Сейчас нет на сайте
значит ..... & InBattle == false){ и InBattle = true;Добавлено (08 апреля 2015, 20:53) --------------------------------------------- тут уж не знаю
Добавлено (08 апреля 2015, 20:58) --------------------------------------------- но логика мне кажется разной
Код
if(Grounded == false){ AnimatorCh.UpAn(); } foreach(Touch touch in Input.touches){ if(this.GetComponent<GUITexture>().HitTest(touch.position) & Grounded == true){ Move.Jump(); } }
и Код
foreach(Touch touch in Input.touches){ if(this.GetComponent<GUITexture>().HitTest(touch.position) & InBattle == false){ Animator.ToBattleAn(); Left.Play(); Right.Play(); InBattle = true; } }
нет? тут ведь еще работает и функция Move.Jump();Добавлено (08 апреля 2015, 21:01) --------------------------------------------- если так if(Grounded == false){ AnimatorCh.UpAn(); } foreach(Touch touch in Input.touches){ if(this.GetComponent<GUITexture>().HitTest(touch.position) & Grounded == true){ Move.Jump(); Grounded = false;//прыжок будет работать? } }
Добавлено (08 апреля 2015, 21:09) --------------------------------------------- и еще ко всему прочему закоммитить Move.Jump();
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer Последнее: Новый раздел "Текстуры" Как запатентовать, защитить техническое решение, игру, идею
harmoxyne Дата: Среда, 08 Апреля 2015, 21:25 | Сообщение # 18
заслуженный участник
Сейчас нет на сайте
Код
Grounded == false и Grounded == true
писать долго и не красиво. На замену пишите Короче и проще. Есть подозрение, что у анимации Idle включена опция "Has exit time", и пока она доигрывается, условие успевает сброситься. Попробуйте убрать, если оно включено.
Greexon Дата: Четверг, 09 Апреля 2015, 11:16 | Сообщение # 19
почетный гость
Сейчас нет на сайте
Спасибо; не могу найти где это включить
MANMANA Дата: Четверг, 09 Апреля 2015, 12:28 | Сообщение # 20
почти ветеран
Сейчас нет на сайте
у меканима http://docs.unity3d.com/500....on.html а в Legacy Animation тоже такое есть? я не нашел здесь http://docs.unity3d.com/ru/current/Manual/Animations.html
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer Последнее: Новый раздел "Текстуры" Как запатентовать, защитить техническое решение, игру, идею