Comments 14
Очень не хватает видео результата
Добавил
Спасибо! Вспомнился ламповый принц персии
Зачем видео если проект Unity можно собрать для WEB? Все смогут попробовать вживую.
К.О.: Не всем хочется ставить Unity только ради того, чтоб посмотреть на результат или лишние плагины для браузера :)
Спасибо) Наконец-то допер как Animator работает)
По моему мнению, в такого плана играх лучше использовать
Поясню свою позицию и заодно разницу: GetAxis плавно повышает скорость с 0 до 1 (отсюда у персонажа появляется «разгон») при нажатии кнопки и тормозит с 1 до 0 (отсюда «инерция» — вы отпускаете кнопку, а персонаж всё ещё двигается).
GetAxisRaw же резко изменяет скорость с 0 до 1, без промежуточных стадий типа 0.1254, 0.41231 (как в случае с GetAxis) и т.д. и с 1 до 0 соответственно.
Повторюсь — это чисто моё мнение, но мне кажется, что в таких простых платформерах не нужен ни разгон, ни инерция. Исключений, конечно, куча — тот же Super Meat Boy очень сильно на этом играет :)
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 и не знаю что делать.
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 в отдельную переменную:
И дальше в коде использовать поле rb вместо rigidbody2D.
В принципе, можно переопределить новое поле со старым именем rigidbody2D:
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.
Основы создания 2D персонажа в Unity 3D 4.3. Часть 2: бегущий персонаж