Edit: I figured out this problem, but I have a new problem I stated at bottom of post
Ok, its my first time programming a game and I’m following a tutorial, but changing the scripts I made following it around to match my game.
I’m trying to script a melee attack, and while I get no errors and can press play and the particles from the melee script are instantiated, no damage is actually done, and the log gets spammed with
NullReferenceException: Object
reference not set to an instance of an
object AbilitySystem.checkFireValues
() (at Assets/Custom
Assets/Scripts/Player/AbilitySystem.js:30)
AbilitySystem.Update () (at
Assets/Custom
Assets/Scripts/Player/AbilitySystem.js:23)
I have tried changing it around it seems a hundred times, so I came here to see for some advice. Any help is very much appreciated!
scripts - >
MeleeAttack.js
var countdown : int = 2; var playerAttackRange : int = 2; var particle : GameObject; var player : GameObject; function Start () { } function Update () { var particleClone = particle; if(countdown > 0){ countdown -= Time.deltaTime; } if(countdown <= 0){ countdown = 2; } if(Input.GetButton("Fire1")){ particleClone = Instantiate(particle,
transform.position,
transform.rotation);
Destroy(particleClone, 1);
attack();
}} function attack(){ if(AbilitySystem.fireElement.equippedFire
== true) {
var hit : RaycastHit; var fwd = transform.TransformDirection
(Vector3.forward);
if(Physics.RayCast (transform.position, fwd, hit,
playerAttackRange)){
if(hit.collider.gameObject == null){
Debug.Log(“collided with “+hit.name+” which has no
DamageManagement!”);
}else{
if(hit.collider.gameObject.tag == “Enemy”) {
hit.collider.gameObject.GetCompponent(EnemyHealth).enemyCurrentHealth
-= AbilitySystem.fireElement.swordDamage;
}
}
}
}
}
AbilitySystem.js
#pragma strict function Start () { } class fireElementClass { var equippedFire : boolean = true; var fireLevel : int = (swordLevel + plummetLevel + meteorLevel)/3; var swordLevel : int = 1; var plummetLevel : int = 1; var meteorLevel : int = 1; var swordDamage : int = 1; } static var fireElement : fireElementClass; function Update () { checkFireValues(); } function checkFireValues(){ fireElement.swordDamage *= Statistics.levelModifier *
((fireElement.fireLevel *
fireElement.swordLevel)/2);}
I wanted to figure it out myself… but I concede defeat >_>
Edit: OK, well I figured that part out, now when I use my melee attack, apparently there is some error with the Physics.Raycast
MissingMethodException: Method not found: ‘UnityEngine.Physics.RayCast’.
Boo.Lang.Runtime.DynamicDispatching.MethodDispatcherFactory.ProduceExtensionDispatcher ()
Boo.Lang.Runtime.DynamicDispatching.MethodDispatcherFactory.Create ()
Boo.Lang.Runtime.RuntimeServices.DoCreateMethodDispatcher (System.Object target, System.Type targetType, System.String name, System.Object[] args)
Boo.Lang.Runtime.RuntimeServices.CreateMethodDispatcher (System.Object target, System.String name, System.Object[] args)
Boo.Lang.Runtime.RuntimeServices+c__AnonStorey12.<>m__6 ()
Boo.Lang.Runtime.DynamicDispatching.DispatcherCache.Get (Boo.Lang.Runtime.DynamicDispatching.DispatcherKey key, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.String cacheKeyName, System.Type[] cacheKeyTypes, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.Object[] args, System.String cacheKeyName, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
Boo.Lang.Runtime.RuntimeServices.Invoke (System.Object target, System.String name, System.Object[] args)
MeleeAttack.attack () (at Assets/Custom Assets/Scripts/Player/MeleeAttack.js:35)
MeleeAttack.Update () (at Assets/Custom Assets/Scripts/Player/MeleeAttack.js:24)