Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
13 Jun 22 - 14 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
This question was closed Mar 19, 2021 at 02:26 PM by Krackible.
avatar image
0
Question by Krackible · Mar 19, 2021 at 09:22 AM · c#objectlistnullreference

Object Method returning null when calling Object List from another Class

Hi, I am a fairly new Unity developer who is currently struggling to find an answer to his issue. I am guessing this question hasn't been asked often as I could not find a similar answer that could resolve my issue. Anyways, I am trying to make a way for my game object called Darwin to find the nearest object in the area - cookies and other Darwins. In my TriggerArea class, there are object lists called darwinsInArea and cookiesInArea that store any object within the area of the trigger collider that is attached to an Instance of Darwin. using System.Collections; using System.Collections.Generic; using UnityEngine; public class TriggerArea : MonoBehaviour { public int numCookies = 0; public int numDarwins = 0; public List<GameObject> cookiesInArea = new List<GameObject>(); public List<GameObject> darwinsInArea = new List<GameObject>(); void OnTriggerEnter2D(Collider2D other) { if (other.gameObject.CompareTag("Cookie")) { Debug.Log("TriggerArea - Cookie"); cookiesInArea.Add(other.gameObject); numCookies++; Debug.Log(numCookies); } else if (other.gameObject.CompareTag("Darwin")) { Debug.Log("TriggerArea - Darwin"); darwinsInArea.Add(other.gameObject); numDarwins++; Debug.Log(numDarwins); } } void OnTriggerExit2D(Collider2D other) { if(cookiesInArea.IndexOf(other.gameObject)>=0) { cookiesInArea.Remove(other.gameObject); numCookies--; Debug.Log(numCookies+"Cookie(s)"); } else if (darwinsInArea.IndexOf(other.gameObject) >= 0) { darwinsInArea.Remove(other.gameObject); numDarwins--; Debug.Log(numDarwins+"Darwin(s)"); } } } Then, there is another class called DarwinAI that has a GameObject method called getClosestObject that tries to find the nearest object within the lists darwinsInArea and cookiesInArea from the TriggerArea class.

Here is the DarwinAI class with only the parts I believe to be important.

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class DarwinAI : MonoBehaviour
 {
     private TriggerArea triggerArea;
     public GameObject thing;
 
     void Start()
     {
         triggerArea = gameObject.GetComponent<TriggerArea>();
     }
 
     void Update()
     {
         thing = getClosestObject(triggerArea.darwinsInArea, triggerArea.cookiesInArea);
     }
 
     GameObject getClosestObject(List<GameObject> darwins, List<GameObject> cookies)
     {
         float dist = float.MaxValue;
         GameObject closestObject = null;
 
         for (int i=1;i<darwins.Count;i++)
         {
             if (Vector3.Distance(darwins[i].transform.position, transform.position) < dist)
             {
                 closestObject = darwins[i];
                 dist = Vector3.Distance(darwins[i].transform.position, transform.position);
             }
         }
         if (closestObject == null)
         {
             dist = float.MaxValue;
             foreach (GameObject potentialTarget in cookies)
             {
                 if (Vector3.Distance(potentialTarget.transform.position, transform.position) < dist)
                 {
                     closestObject = potentialTarget;
                     dist = Vector3.Distance(potentialTarget.transform.position, transform.position);
                 }
             }
         }
         return closestObject;
     }
 }

Here is the entire DarwinAI class.

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class DarwinAI : MonoBehaviour
 {
     private Rigidbody2D rigidBody;
     private DarwinTraits traits;
     private TriggerArea triggerArea;
     public GameObject thing;
 
     void Start()
     {
         rigidBody = gameObject.GetComponent<Rigidbody2D>();
         traits = gameObject.GetComponent<DarwinTraits>();
         triggerArea = gameObject.GetComponent<TriggerArea>();
 
         //charge(Random.Range(0.0f, 360.0f), 200.0f);
         //charge(0.0f, 200.0f);
 
         //thing = getClosestObject(triggerArea.darwinsInArea, triggerArea.cookiesInArea);
         //charge(getAngle(thing), 200.0f);
         
         //triggerArea.getClosestObject();
         //charge(getAngle(thing), 200.0f);
     }
 
     void Update()
     {
         thing = getClosestObject(triggerArea.darwinsInArea, triggerArea.cookiesInArea);
         charge(getAngle(thing), 200.0f);
     }
 
     void charge(float angle, float strength)
     {
         Vector3 dir = Quaternion.AngleAxis(angle, Vector3.forward) * Vector3.right;
         rigidBody.AddForce(dir * strength);
     }
 
     float getAngle(GameObject other)
     {
         Vector3 dir = other.transform.position - transform.position;
         dir = other.transform.InverseTransformDirection(dir);
 
         float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
         return angle;
     }
 
     GameObject getClosestObject(List<GameObject> darwins, List<GameObject> cookies)
     {
         float dist = float.MaxValue;
         GameObject closestObject = null;
 
         for (int i=1;i<darwins.Count;i++)
         {
             if (Vector3.Distance(darwins[i].transform.position, transform.position) < dist)
             {
                 closestObject = darwins[i];
                 dist = Vector3.Distance(darwins[i].transform.position, transform.position);
             }
         }
         if (closestObject == null)
         {
             dist = float.MaxValue;
             foreach (GameObject potentialTarget in cookies)
             {
                 if (Vector3.Distance(potentialTarget.transform.position, transform.position) < dist)
                 {
                     closestObject = potentialTarget;
                     dist = Vector3.Distance(potentialTarget.transform.position, transform.position);
                 }
             }
         }
         return closestObject;
     }
 }

For whatever reason, when I try to set the value of the GameObject variable thing to the method getClosestObject even when there are objects within the Darwin object's trigger collider, it says that variable thing's reference is not set to an instance of an object.

NullReferenceException: Object reference not set to an instance of an object DarwinAI.Update () (at Assets/Darwin/DarwinAI.cs:30) Blockquote

If anyone can solve my issue, I would be extremely grateful. Thank you to anyone who takes their time to help an amateur like me.

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

  • Sort: 
avatar image
0

Answer by AbandonedCrypt · Mar 19, 2021 at 09:31 AM

looks like triggerArea is null in line 30 of DarwinAI, the error message gives you that information. You probably don't have a TriggerArea attached to the GameObject that DarwinAI is attached to. GetComponent only looks on the exact GameObject it is called from, so if TriggerArea is in a parent or child it won't find that.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Follow this Question

Answers Answers and Comments

702 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How to properly create a 2 dimensional array of an object. [C#] 1 Answer

C# - Class (Instance/object) to List 1 Answer

NullReference when updating a List 4 Answers

Multiple Cars not working 1 Answer

A node in a childnode? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges