Проблем практически не возникало, до момента проверки движения. При движении танчик ведет себя странно, как будто срабатывает залипание клавиш. То есть я еду на танке вверх, и нажимаю в этот же момент влево, танк может развернуться на полсекунды влево и сразу повернуться обратно и ехать дальше. Только потом, когда я отпущу вверх, тогда уже танк развернется влево. Или, например, при зажатой кнопке движения, движение танка внезапно прерывается, пока не нажмешь ее еще раз. И прочие такие приколы.
Сначала грешил на анимацию, но, думаю дело не в ней. Вот единственный на данный момент скрипт - скрипт управления танком:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class Tank : MonoBehaviour
{
private int __direction;
private Vector3 __move;
public float __speed;
private Animator __animator;
private Transform __transform;
public RuntimeAnimatorController[] controllers;
private float __lastVert;
private float __lastHoriz;
// Use this for initialization
void Start()
{
__transform = transform;
__animator = GetComponent<Animator>();
__animator.runtimeAnimatorController = controllers[0];
__direction = 0;
}
// Update is called once per frame
private void Update()
{
float vert = Input.GetAxis("Vertical");
float horiz = Input.GetAxis("Horizontal");
if (vert != __lastVert)
{
if (vert > 0)
{
__direction = 3;
}
else if (vert < 0)
{
__direction = 0;
}
__move = new Vector3(0, vert, 0);
__lastVert = vert;
}
else if (horiz != __lastHoriz)
{
if (horiz > 0f)
{
__direction = 2;
}
else if (horiz < -0f)
{
__direction = 1;
}
__move = new Vector3(horiz, 0, 0);
__lastHoriz = horiz;
}
__transform.Translate(__move * __speed * Time.deltaTime);
}
void FixedUpdate()
{
__animator.SetInteger("direction", __direction);
}
}
using System.Collections;
public class Tank : MonoBehaviour
{
private int __direction;
private Vector3 __move;
public float __speed;
private Animator __animator;
private Transform __transform;
public RuntimeAnimatorController[] controllers;
private float __lastVert;
private float __lastHoriz;
// Use this for initialization
void Start()
{
__transform = transform;
__animator = GetComponent<Animator>();
__animator.runtimeAnimatorController = controllers[0];
__direction = 0;
}
// Update is called once per frame
private void Update()
{
float vert = Input.GetAxis("Vertical");
float horiz = Input.GetAxis("Horizontal");
if (vert != __lastVert)
{
if (vert > 0)
{
__direction = 3;
}
else if (vert < 0)
{
__direction = 0;
}
__move = new Vector3(0, vert, 0);
__lastVert = vert;
}
else if (horiz != __lastHoriz)
{
if (horiz > 0f)
{
__direction = 2;
}
else if (horiz < -0f)
{
__direction = 1;
}
__move = new Vector3(horiz, 0, 0);
__lastHoriz = horiz;
}
__transform.Translate(__move * __speed * Time.deltaTime);
}
void FixedUpdate()
{
__animator.SetInteger("direction", __direction);
}
}
Помогите разобраться)