Прилагаю скриншот проблемы.
Думаю что проблема в том, что я склеил коды двух разных авторов, и с чем-то прогадал при редактировании.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerPlatformerController : PhysicsObject {
public float maxSpeed = 5;
public float jumpTakeOffSpeed = 8;
public AnimationClip walkAnimation;
public AnimationClip runAnimation;
public float walkAnimationSpeed;
public float runAnimationSpeed;
private bool isWalk;
private bool isRun;
private Animation _animation;
private SpriteRenderer spriteRenderer;
void Start () {
_animation = GetComponent<Animation>();
_animation[walkAnimation.Walk].speed = walkAnimationSpeed;
_animation[runAnimation.Run].speed = runAnimationSpeed;
}
void Awake ()
{
spriteRenderer = GetComponent<SpriteRenderer> ();
}
void Update () {
if(Input.GetKeyDown (KeyCode.W)){
isWalk = true;
maxSpeed = 5;
}
if(Input.GetKeyUp (KeyCode.W)){
isWalk = false;
}
if(Input.GetKeyDown (KeyCode.LeftShift)){
isRun = true;
}
if(Input.GetKeyUp (KeyCode.LeftShift)){
isRun = false;
}
if(isWalk && !isRun){
_animation.CrossFade (walkAnimation.Walk);
}
if(isWalk && isRun){
_animation.CrossFade (runAnimation.Run);
maxSpeed = 8;
}
if(!isWalk){
_animation.Stop(walkAnimation.Walk);
_animation.Stop(runAnimation.Run);
}
}
protected override void ComputeVelocity()
{
Vector2 move = Vector2.zero;
move.x = Input.GetAxis ("Horizontal");
if (Input.GetButtonDown ("Jump") && grounded) {
velocity.y = jumpTakeOffSpeed;
} else if (Input.GetButtonUp ("Jump"))
{
if (velocity.y > 0) {
velocity.y = velocity.y * 0.5f;
}
}
bool flipSprite = (spriteRenderer.flipX ? (move.x > 0.01f) : (move.x < 0.01f));
if (flipSprite)
{
spriteRenderer.flipX = !spriteRenderer.flipX;
}
targetVelocity = move * maxSpeed;
}
}
Во-первых, если вы этого еще не сделали, то в инспекторе закиньте в переменные
public AnimationClip walkAnimation;
public AnimationClip runAnimation;
Клипы под названием Walk и Run.
Во-вторых, в методе Start() у вас первая ошибка:
_animation[walkAnimation.Walk].speed = walkAnimationSpeed;
_animation[runAnimation.Run].speed = runAnimationSpeed;
Здесь вы пытаетесь обратиться к переменной типа AnimationClip так, как будто у нее есть методы Walk и Run. Вместо этого вам нужно внимательнее посмотреть на тип, которых требуется указать в квадратный скобках (подсказка, это тип string), поэтому нужно переписать метод Start():
void Start ()
{
_animation = GetComponent<Animation>();
_animation[walkAnimation.name].speed = walkAnimationSpeed;
_animation[runAnimation.name].speed = runAnimationSpeed;
}
Далее, вам нужно исправить эту же ошибку в методе Update() и вообще везде, где вы используете _animation.CrossFade() или _animation.Stop() вам точно также в круглых скобках нужно поставить walkAnimation.name или runAnimation.name (в зависимости от требуемого), так как оба этих метода тоже принимают в качестве параметра тип string.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей