Всем привет, сейчас учусь работать с unity 3d. В одной книге показано, как сделать анимированный бег, как сделать прыжок, но как сделать анимированный прыжок там уже не сказали. Как я понял, код и принцип работы сильно от бега отличаться не должен, ну я и написал вот этот код:
public class PlayerController : MonoBehaviour
{
public float speed = 250.0f;
private Rigidbody2D _body;
private Animator _anim;
public float jumpforce = 25.0f;
private BoxCollider2D _box;
// Start is called before the first frame update
void Start()
{
_body = GetComponent<Rigidbody2D>();
_anim = GetComponent<Animator>();
_box = GetComponent<BoxCollider2D>();
}
// Update is called once per frame
void Update()
{
float deltaX = Input.GetAxisRaw("Horizontal") * Time.deltaTime * speed;
float deltaY = Input.GetAxis("Vertical");
Vector2 movement = new Vector2(deltaX, _body.velocity.y);
_body.velocity = movement;
Vector3 max = _box.bounds.max;
Vector3 min = _box.bounds.min;
Vector2 corner1 = new Vector2(max.x, min.y - .1f);
Vector2 corner2 = new Vector2(min.x, min.y - .2f);
Collider2D hit = Physics2D.OverlapArea(corner1, corner2);
bool grounded = false;
if(hit != null)
{
grounded = true;
}
if(grounded && Input.GetKeyDown(KeyCode.Space))
{
_body.AddForce(Vector2.up * jumpforce, ForceMode2D.Impulse);
}
_anim.SetFloat("v_speed", deltaY);
_anim.SetBool("grounded", grounded);
_anim.SetFloat("speed", Mathf.Abs(deltaX));
if(!Mathf.Approximately(deltaX, 0))
{
transform.localScale = new Vector3(Mathf.Sign(deltaX), 1, 1);
}
}
}
Я это понимаю так: когда персонаж двигается вверх, скорость deltaY положительна, когда он летит вниз - она отрицательна.Grounded, исходя из того, что прыгать два раза нельзя, прекрасно работает, ну значит и аниматору я его передать могу. В дальнейшем я хотел создать две анимации - одна с полётом вверх, другая с полётом вниз, но и на каждую сделать условие, но для начала сделал всё в общую,так как вы можете всё увидеть на скриншоте. Почему ничего не работает? Если поймёте, объясните, пожалуйста, подробнее, я еще туплю :)