Скриптованная анимация

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Скриптованная анимация

Сообщение kekeksey 22 май 2017, 11:51

Помогите реализовать следующее: У меня есть скрипт на передвижение по клику мыши(использую ассет на изометрию) и хочу сделать 8-осевую анимацию передвижения. Т.е. если клик мыши попал в область снизу, то включить анимацию ходьбы вниз и тд. Я понимаю, что нужно делать через переменные в аниматоре, но не могу понять как сделать это в коде.
Как дополнить скрипт, чтобы реализовать это?
Синтаксис:
Используется csharp
using UnityEngine;
using IsoTools;

[RequireComponent(typeof(IsoObject))]
public class control1 : MonoBehaviour
{

  public  IsoObject _isoObject;
  public  Vector3 _target;

    void Start()
    {
        _isoObject = GetComponent<IsoObject>();
        _target = _isoObject.position;
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            _target = IsoWorld.GetWorld(0).MouseIsoPosition();
        }
        var position = _isoObject.position;
        if ((_target - position).magnitude > 0.1f)
        {
            var direction = (_target - position).normalized;
            _isoObject.position += direction * 0.03f;
        }
        else
        {
            _isoObject.position = _target;
        }

    }
}
kekeksey
UNец
 
Сообщения: 18
Зарегистрирован: 09 апр 2017, 20:42

Re: Скриптованная анимация

Сообщение kekeksey 22 май 2017, 13:17

Моих мозгов хватило только на это.
Синтаксис:
Используется csharp
 _target = IsoWorld.GetWorld(0).MouseIsoPosition();
            pos = _isoObject.position;
            if (_target.x > pos.x && _target.y > pos.y) { anim.SetInteger("walk", 1); }
kekeksey
UNец
 
Сообщения: 18
Зарегистрирован: 09 апр 2017, 20:42

Re: Скриптованная анимация

Сообщение Valentinus 22 май 2017, 13:58

лучше сделать через BlendTree :

т.е. в аниматор-контроллере создаете две переменные X и Y (float).
в окне аниматора кликаете ПКМ и выбираете Create From New Blend Tree
в дереве выбираете тип 2D Simple или 2D Freeform, и два ваших параметра X и Y
далее создаете точки, одну для X=0 и Y=0, и еще 4 или 8 - соответствующие четырем или восьми направлениям (0,1/1,0/1,1/0,1/0,-1/-1,0/-1,-1/0,-1), и на каждое направление - анимацию.

а в программе пишете:

Animator my_Animator=GetComponent<Animator>();
if ((_target - position).magnitude > 0.1f)
{
var direction = (_target - position).normalized;
_isoObject.position += direction * 0.03f;
my_Animator.SetFloat("X", direction.x);
my_Animator.SetFloat("Y", direction.y);
}
else
{
_isoObject.position = _target;
my_Animator.SetFloat("X", 0);
my_Animator.SetFloat("Y", 0);
}
другое мое творчество: samlib.ru/u/us_w/
Аватара пользователя
Valentinus
Старожил
 
Сообщения: 889
Зарегистрирован: 24 мар 2017, 18:33

Re: Скриптованная анимация

Сообщение kekeksey 22 май 2017, 14:24

Valentinus писал(а):лучше сделать через BlendTree :

т.е. в аниматор-контроллере создаете две переменные X и Y (float).
в окне аниматора кликаете ПКМ и выбираете Create From New Blend Tree
в дереве выбираете тип 2D Simple или 2D Freeform, и два ваших параметра X и Y
далее создаете точки, одну для X=0 и Y=0, и еще 4 или 8 - соответствующие четырем или восьми направлениям (0,1/1,0/1,1/0,1/0,-1/-1,0/-1,-1/0,-1), и на каждое направление - анимацию.

а в программе пишете:

Animator my_Animator=GetComponent<Animator>();
if ((_target - position).magnitude > 0.1f)
{
var direction = (_target - position).normalized;
_isoObject.position += direction * 0.03f;
my_Animator.SetFloat("X", direction.x);
my_Animator.SetFloat("Y", direction.y);
}
else
{
_isoObject.position = _target;
my_Animator.SetFloat("X", 0);
my_Animator.SetFloat("Y", 0);
}

Я вам очень благодарен. спасибо огромное.
kekeksey
UNец
 
Сообщения: 18
Зарегистрирован: 09 апр 2017, 20:42


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 23