Unity 2d mac osx

projektowanie-gier
game-design
gamedev

#1

Witam. Mam problem z PlayerControlerem napisałem skrypt w c# do zmiany animacji z idle na run.
Kod PlayerControlera:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour {

Animator anim;

// Use this for initialization
void Start () {

    anim = GetComponent<Animator>();
}

// Update is called once per frame
void Update () {

    float horizontalMove = Input.GetAxis ("Horizontal");
    anim.SetFloat ("speed", horizontalMove);
}

}

a tu są błędy które wyskakują:
1.

Parameter ‘speed’ does not exist.
UnityEngine.Animator:SetFloat(String, Single)
PlayerController:Update() (at Assets/Scripts/PlayerController.cs:19)

There are inconsistent line endings in the ‘Assets/Scripts/PlayerController.cs’ script. Some are Mac OS X (UNIX) and some are Windows.
This might lead to incorrect line numbers in stacktraces and compiler errors. Many text editors can fix this using Convert Line Endings menu commands.

Z góry dziekuje za pomoc.


#2
  1. W animatorze który znajduje się na tym obiekcie jest stworzony parametr speed typu float?
  2. To możesz zignorować, albo kliknąć przycisk OK czy jakiś inny który wyskoczy po ponownym otworzeniu tego skryptu.

#3

@kowal
Jest speed ustawione jako float


#4

Możesz pokazać screena z ustawień animatora?
Ewentualnie ustaw anim na public, i zobacz czy dobry animator Ci przypisuje


#5

Tak jak kowal pisze, albo nie ma zmiennej “speed” w animatorze, albo całego animatora źle skrypt wyszukuje.

Możesz jeszcze:

  1. usunąć całą funkcję Start() wraz z wyszukiwaniem komponentu ze skryptu.
  2. nad deklaracją Animatora dodać [SerializeField] (w Unity w tym skrypcie pojawi się puste pole “anim”)
  3. bezpośrednio w Unity przeciągnąć myszką odpowiedni Animator do skryptu (w to puste pole “anim”).

taki wygląd skryptu wtedy:

using UnityEngine;

public class PlayerController : MonoBehaviour {
   
   [SerializeField] 
   Animator anim;

   void Update () {
      float horizontalMove = Input.GetAxis ("Horizontal");
      anim.SetFloat("speed", horizontalMove);
   }
}

#6

19


#7

jak zmieniam na ten skrypt co ty wyslales to wyskakuje mi błąd:

UnassignedReferenceException: The variable anim of PlayerController has not been assigned.
You probably need to assign the anim variable of the PlayerController script in the inspector.
UnityEngine.Animator.SetFloat (System.String name, Single value) (at /Users/builduser/buildslave/unity/build/Runtime/Animation/ScriptBindings/Animator.bindings.cs:328)
PlayerController.Update () (at Assets/Scripts/PlayerController.cs:12)


#8

W animatorze masz zmienną “Speed”, a w skrypcie odnosisz się do “speed”.


#9

Dzięki ;D już działa. Taki mały błąd i tyle zachodu :smile:


#10

trzeba pamiętać, że w c# wielkość liter ma znaczenie, dobrze też dokładnie sprawdzić kod, bo często błędy to właśnie takie małe szczegóły.


#11

Dzięki wielkie :; :wink:


#12

Co do tego błędu po zmianie na skrypt od 4promile, podejrzewam że nie przeciągnąłeś Animatora w odpowiednie miejsce w inspektorze, dlatego skrypt nie widzi komponentu na którym ma wywołać funkcję. Wiem że problem rozwiązany, ale to tak na przyszłość :wink:


#13

Dobra, dzięki chłopaki ;D