Aqui viene el primer problema que no consigo solucionar..
Intento gestionar las animaciones de mi monigote, pero tengo problemas a la hora de asignar el animator y mi tabla de hashids.. os pongo codigo:
UnitMove.csusing UnityEngine;
using System.Collections;
public class UnitMove : MonoBehaviour {
public float speed = 0f;
public GameObject waypoint;
public Animator anim;
public HashIDs hash;
void awake() {
anim = GetComponent<Animator>();
hash = GameObject.FindGameObjectWithTag(Tags.gameController).GetComponent<HashIDs>();
}
void FixedUpdate () {
Vector3 target = waypoint.transform.position;
Vector3 moveDirection = target-transform.position;
Vector3 velocity=rigidbody.velocity*Time.deltaTime;
if(moveDirection.magnitude < 1) {
velocity=Vector3.zero;
speed=0f;
anim.SetFloat(hash.speedFloat,speed);
}else{
Vector3 newDirection = new Vector3(target.x, transform.position.y, target.z) - transform.position;
transform.rotation = Quaternion.LookRotation(newDirection);
velocity=moveDirection.normalized*speed;
anim.SetFloat(hash.speedFloat, 100f);
}
rigidbody.velocity=velocity;
}
}
HashIDspublic class HashIDs : MonoBehaviour {
public int dieState;
public int deadBool;
public int speedFloat;
public int runState;
public int attackState;
public int attack;
public int idleState;
void Awake () {
dieState = Animator.StringToHash("Base Layer.die");
deadBool = Animator.StringToHash("dead");
speedFloat = Animator.StringToHash("speed");
runState = Animator.StringToHash("Base Layer.run");
attackState = Animator.StringToHash("Base Layer.attack");
attack = Animator.StringToHash("attack");
idleState = Animator.StringToHash("Base Layer.idle");
}
}
Tags.cspublic class Tags : MonoBehaviour
{
// A list of tag strings.
public const string knight = "knight";
public const string gameController = "gameController";
public const string fader = "fader";
public const string enemy = "enemy";
}
Bien.. UnitMove es un component de mi muñeco.
HashIDs es un componente de mi gamecontroller.
tags no pertenece a ningun componente.
El problema es que en el Awake no me asocia mis variables locales a las referencias que le doy y por consiguiente me da un error en la linea del anim.setFloat(hash.speedfloat,X);
Si lo pongo yo manualmente desde la interfaz, si funciona medianamente.. aunque no me cambia la animación de correr a parado.
PD: las mayusculas y minusculas estan bien.. l he comprobado 20 veces.
El error es el siguiente:
NullReferenceException: Object reference not set to an instance of an object
UnitMove.FixedUpdate () (at Assets/Scripts/UnitMove.cs:34)
----------------------------EDIT------------------------
Arreglado.. el problema era que tenía que asignar el animator y la tabla hash en Start() y no en Awake().