Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 /
avatar image
0
Question by Schwartz_M · Jun 18, 2018 at 06:15 PM · scripting problemvariableinitializationscope

Scope issues when initializing variables

In the code below, I declare variables globally within the script "DealScript." I then initialize them in a Start() function. Yet, for some reason, when trying to use those variables in other functions within DealScript, Unity gives me NullReferenceException errors.

A temporary fix I found is to copy and paste those initializing statements into each function where I need the variables. Strangely enough, after running my game once, I can delete those copy and pasted statements, and the game still works! No errors.... until the next time I open Unity again.

What is going wrong here? The scope of the variables should extend to every function in DealScript.

Relevant Code:
public class DealScript : MonoBehaviour {

 // References to other objects / scripts
 public GameObject card;
 GameObject Controller;
 GameController gameController;
 Vector3 posForest;
 Vector3 posHand;
 float forestSpacing;
 float handSpacing;   
 
 // Use to initialize variables
 private void Start()
 {

     // Necessary variables from Game Controller
     Controller = GameObject.Find("Controller");
     gameController = Controller.GetComponent<GameController>();
     posForest = gameController.posForest;
     posHand = gameController.posHand;
     forestSpacing = gameController.forestSpacing;
     handSpacing = gameController.handSpacing;

 }

/ Code below is used to deal cards /

 // Deals the initial 8 cards and the 3 cards in the player's hand
 public void Deal () {
     Controller = GameObject.Find("Controller");
     gameController = Controller.GetComponent<GameController>();
     posForest = gameController.posForest;
     posHand = gameController.posHand;
     forestSpacing = gameController.forestSpacing;
     handSpacing = gameController.handSpacing;

     // Add eight cards to forest
     for (int i = 0; i < numDeal; i++) 
     {
         
         MakeCard("Forest");

     }
   
     // Add three cards to hand
     for (int j = 0; j < numHand; j++)
     {

         MakeCard("Hand");
         
     }

     // Position cards appropriately
     gameController.Reposition(gameController.Hand, handSpacing, posHand);
     gameController.Reposition(gameController.Forest, forestSpacing, posForest);
     

 }

}

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

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by nomadic · Jun 18, 2018 at 07:23 PM

It's not an issue of scope. Scope is governed by the compiler. You have a runtime issue.

The full error log is likely telling you that your gameController variable is null, so you can't get references from it. How is the Controller/GameController being created?

Are you creating it inside another Start() call? If so it's likely that you are trying to reference something that hasn't been created yet. Is the Controller object inactive during the Start() call? If so GameObject.Find will fail.

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
avatar image
0

Answer by ShadyProductions · Jun 18, 2018 at 07:36 PM

Seems like you are calling Deal() on another monobehaviour before Start() is initialized by this monobehaviour. Set up the correct script order execution in project settings.

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

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

154 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

Related Questions

Cannot access AudioSource from within function 0 Answers

pubblic variable don't get change from script with OnTriggerStay 1 Answer

(PLAYMAKER) How to synchronize global variables to another visual scripting? (like Uscript or Behavior Machine Pro) 0 Answers

Edit variable in script B from script A 1 Answer

Scripts accessing one another (JS) 0 Answers


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