- Home /
Yet another NullReferenceException question.
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)
Answer by Kleptomaniac · Apr 05, 2012 at 03:31 AM
I believe the problem is that you don't appear to be declaring a class variable Statistics anywhere, and therefore the compiler is unable to find values for Statistics.levelModifier and throws a NullReferenceException.
That's from what I can see anyway ... is Statistics a static var in another script?
Hope that helps, Klep
Yea, Statistics is a script on my player with static variables I use as a kind of central hub for basic information
Well, I did just find one issue ... You have spelt GetComponent wrong in $$anonymous$$eleeAttack.js when you're trying to find the EnemyHealth script ... may just be a copypasta error though ...
do you have any idea what this new issue is?
I pasted it at the bottom of original post
Haha, yep, I found what's wrong. Should be "Raycast" as opposed to "RayCast". :P
Answer by Datael · Apr 05, 2012 at 06:26 AM
I might be wrong about this since I use C#, not JS, but you don't appear to be instantiating fireElement with a new anywhere in AbilitySystem.js so the static will always be null.
That isn't necessarily a problem in java
And I figured the original problem out... but now a new one lol
Your answer
Follow this Question
Related Questions
NullReferenceException: Object reference not set to an instance of an object Raycast...? 1 Answer
Raycast Destroy(hit.collider.gameObject); (Still need help) 1 Answer
What is wrong with this melee system? 1 Answer
How do I find the name and value for each variable of a script component, using Unity script? 2 Answers
Melee attack comblat 1 Answer