Pull to refresh

Comments 14

Спасибо! Вспомнился ламповый принц персии
Зачем видео если проект Unity можно собрать для WEB? Все смогут попробовать вживую.
К.О.: Не всем хочется ставить Unity только ради того, чтоб посмотреть на результат или лишние плагины для браузера :)
1) Кому не хочется пусть не ставит (никто не заставляет), а смотрит видео или скрины.
2) Странно когда у посетителя хаба, посвященного Unity, не установлен Unity-плеер.
Согласен — это очень странно, как и отсутствие установленного Delphi у читателей статей про продукцию Borland ;)
Спасибо) Наконец-то допер как Animator работает)
По моему мнению, в такого плана играх лучше использовать
Input.GetAxisRaw("Horizontal");
вместо
Input.GetAxis("Horizontal");

Поясню свою позицию и заодно разницу: GetAxis плавно повышает скорость с 0 до 1 (отсюда у персонажа появляется «разгон») при нажатии кнопки и тормозит с 1 до 0 (отсюда «инерция» — вы отпускаете кнопку, а персонаж всё ещё двигается).
GetAxisRaw же резко изменяет скорость с 0 до 1, без промежуточных стадий типа 0.1254, 0.41231 (как в случае с GetAxis) и т.д. и с 1 до 0 соответственно.

Повторюсь — это чисто моё мнение, но мне кажется, что в таких простых платформерах не нужен ни разгон, ни инерция. Исключений, конечно, куча — тот же Super Meat Boy очень сильно на этом играет :)
Спасибо огромное, все ясно и понятно)

Но есть один вопрос. Как сделать что бы анимация менялась сразу же после того, как тело начало движение, и наоборот?
У меня после остановки, на спокойствие переходит только после завершения анимации бега.
В конце поста есть видео — разве на нем не так работают анимации?
using UnityEngine;
using System.Collections;

public class CharacterControllerScript: MonoBehaviour
{
public float maxSpeed = 10f;
private bool isFacingRight = true;
private Animator anim;
/// ///
private void Start()
{
anim = GetComponent();
}
/// /// FixedUpdate
/// Animate Physics = true
///
private void FixedUpdate()
{
float move = Input.GetAxis(«Horizontal»);
anim.SetFloat(«Speed», Mathf.Abs(move));
rigidbody2D.velocity = new Vector2(move * maxSpeed, rigidbody2D.velocity.y);
if (move > 0 && !isFacingRight)
Flip();
else if (move < 0 && isFacingRight)
Flip();
}
/// ///
private void Flip()
{
isFacingRight = !isFacingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
Всё сделал. Но не работает. Работаю в Unity3D 5 и не знаю что делать.
В современных версиях Unity не работают поля типа rigidbody2D (поле rigidbody2D есть, но имеет тип Component, а не Rigidbody2D). Их нужно присваивать в методе Start в отдельную переменную:
public class CharacterControllerScript : MonoBehaviour
{
    //переменная для установки макс. скорости персонажа
    public float maxSpeed = 10f; 

    //переменная для определения направления персонажа вправо/влево
    private bool isFacingRight = true;

    //ссылка на компонент анимаций
    private Animator anim;

    private Rigidbody2D rb;

    /// <summary>
    /// Начальная инициализация
    /// </summary>
    private void Start()
    {
        anim = GetComponent<Animator>();
        rb = GetComponent<Rigidbody2D>();
    }

И дальше в коде использовать поле rb вместо rigidbody2D.

В принципе, можно переопределить новое поле со старым именем rigidbody2D:
private new Rigidbody2D rigidbody2D;
Sign up to leave a comment.

Articles