Прилагаю скриншот проблемы.
Думаю что проблема в том, что я склеил коды двух разных авторов, и с чем-то прогадал при редактировании.
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.
У меня есть проект AspNet core 2
У меня есть структура, в которой есть поле Mod, высчитываемое при инициализации:
Следующий код @using (AjaxBeginForm("CheckChanging", new AjaxOptions { UpdateTargetId = "results" })) вызывает ошибку CS0103 Имя "Ajax" не существует в текущем контексте
Реализовать программы клиента и сервера, работающие по протоколу UDPКлиент каждые 10 секунд отправляет на сервер пакет данных