De alguna manera obtengo una excepción de referencia nula en Unity. Creé un constructor para mi clase de arma e hice otra clase de arma (que hereda de monobehaviour), donde crea las armas con sus estadísticas. en pistol.Stats(10, 0.5f, 2, 5, new Vector2(0.2f, 0.09f)); ocurre una referencia nula.
Guión 1:
public class WeaponClass { public float damage, spread, bulletsPerSec, rotationSpeed; public string name; public Vector2 shootPoint; private Image image; public WeaponClass Stats(float Adamage, float Aspread, float AbulletsPerSec, float ArotationSpeed, Vector2 Ashootpoint) { damage = Adamage; spread = Aspread; bulletsPerSec = AbulletsPerSec; rotationSpeed = ArotationSpeed; shootPoint = Ashootpoint; return this; } }Guión 2:
public class Weapons : MonoBehaviour { private PlayerControlls _playerControlls; private WeaponClass pistol, m4 = new WeaponClass(); private Bullet _bullet; public WeaponClass currentWeapon; private GameObject bullet; public Rigidbody2D bulletRb; private float randomdirection; public float randomdirectionangle; void Start() { pistol.Stats(10, 0.5f, 2, 5, new Vector2(0.2f, 0.09f)); currentWeapon = pistol; Debug.Log(currentWeapon); } void Update() { } public void Shoot() { randomdirection = Random.Range(-currentWeapon.spread, currentWeapon.spread); randomdirectionangle = Mathf.Atan2(randomdirection, currentWeapon.shootPoint.x) * Mathf.Rad2Deg; Quaternion bulletrotation = new Quaternion(0, 0, randomdirectionangle, 0); GameObject bulletclone = Instantiate(bullet, currentWeapon.shootPoint, _playerControlls.GunEquipped.transform.rotation); bulletRb = bulletclone.GetComponent<Rigidbody2D>(); } }¡Cuidado al declarar/inicializar múltiples campos en una sola línea!
Que haces
private WeaponClass pistol, m4 = new WeaponClass();es igual a escribir
private WeaponClass pistol; // NOT INITIALIZED! private WeaponClass m4 = new WeaponClass();Entonces lo que quieres sería
private WeaponClass pistol = new WeaponClass(), m4 = new WeaponClass();En general, me desalentaría de usar esto y preferiría hacerlo siempre en líneas separadas:
private WeaponClass pistol = new WeaponClass(); private WeaponClass m4 = new WeaponClass();Como esto es