Анимацию невозможно воспроизвести в Unity через Blend Free.C#

Место общения программистов C#
Ответить
Anonymous
 Анимацию невозможно воспроизвести в Unity через Blend Free.

Сообщение Anonymous »

Мне нужно анимировать персонажа с помощью 5 анимаций, движущихся в разные стороны и афк, но я столкнулся с ошибкой, что анимации в unity не работают, я пытался соединить их через дерево Blend, но безуспешно. С кодом идеи всё в порядке, проблема скорее всего в дереве Blend. Я пытался что-то сделать 3 часа, но не получилось.

Код: Выделить всё

using UnityEngine;

public class PlayerVisual : MonoBehaviour
{
private Animator animator;
public float moveSpeed = 5f;

public string IsWalkingW = "IsWalkingW";
public string IsWalkingS = "IsWalkingS";
public string IsWalkingA = "IsWalkingA";
public string IsWalkingD = "IsWalkingD";

public enum AnimationMode { BlendTree, SingleAnimation }
public AnimationMode currentMode = AnimationMode.BlendTree;

void Start()
{
animator = GetComponent();
if (animator == null)
{
Debug.LogError("Animator component not found on this GameObject!");
}
}

void Update()
{

if (Input.GetKeyDown(KeyCode.Q))
{
currentMode = (currentMode == AnimationMode.BlendTree) ? AnimationMode.SingleAnimation : AnimationMode.BlendTree;
}

switch (currentMode)
{
case AnimationMode.BlendTree:
UpdateBlendTreeAnimation();
break;
case AnimationMode.SingleAnimation:
UpdateSingleAnimation();
break;
}
}

private void UpdateBlendTreeAnimation()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");

animator.SetFloat("HorizontalSpeed", horizontal);
animator.SetFloat("VerticalSpeed", vertical);

Vector3 movement = new Vector3(horizontal, 0, vertical) * moveSpeed * Time.deltaTime;
transform.Translate(movement);
}

private void UpdateSingleAnimation()
{
if (Input.GetKeyDown(KeyCode.W))
{
PlayAnimation(IsWalkingW, true);
}
else if (Input.GetKeyUp(KeyCode.W))
{
PlayAnimation(IsWalkingW, false);
}
if (Input.GetKeyDown(KeyCode.S))
{
PlayAnimation(IsWalkingS, true);
}
else if (Input.GetKeyUp(KeyCode.S))
{
PlayAnimation(IsWalkingS, false);
}
if (Input.GetKeyDown(KeyCode.A))
{
PlayAnimation(IsWalkingA, true);
}
else if (Input.GetKeyUp(KeyCode.A))
{
PlayAnimation(IsWalkingA, false);
}
if (Input.GetKeyDown(KeyCode.D))
{
PlayAnimation(IsWalkingD, true);
}
else if (Input.GetKeyUp(KeyCode.D))
{
PlayAnimation(IsWalkingD, false);
}
}

private void PlayAnimation(string animationName, bool isWalking)
{
animator.SetBool(animationName, isWalking);
}
}
Я ожидал, что все получится с первого раза, но в жизни все не так.

Подробнее здесь: https://stackoverflow.com/questions/793 ... blend-free
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»