May 26, 2021
Accessing Variables
Unity
Title:
How To Access Variables From Another Script In Unity
By:
Infallible Code
Description:
Goes over many programming techniques within Unity to access variables in one script from another.
Key Concepts
Scripts
C# classes that inherit from MonoBehaviour.
Collaborators
Scripts that require a reference to at least one other script in order to function.
Dependencies
Objects that collaborators need in order to function.
Categories of Resolution
Where the burden of dependency resolution lies.
External Resolution
The responsibility of dependency resolution falls somewhere else.
Public Properties
Expose dependency of a public field or property
Simple and requires no overhead, but can easily make bugs that are also hard to debug. This is because it can be unclear where the dependencies lie.
Editor Properties
Expose serializable dependencies in the Unity editor.
Use SerializeField on attribute private properties.
Similar to public properties, but are much safer.
Unity Event Methods
Functions that are called when specific events occur at runtime.
This specific example covers methods like OnCollisionEnter(). These are functions that are called when specific events occur, and they help resolve dependencies when those events are triggered.
Internal Resolution
The script itself is responsible for resolving its own dependencies.
FindObjectByType() Method
Search for dependencies in the scene based on their type.
FindObjectsByType() returns a list of matching objects.
This can be tricky to use sometimes since you may not be sure of the state of your scene when this is called. It is also relatively expensive. Most consistent to use to find manager scripts, since they should confidently be active in the scene when called.
Static Instances
Expose dependency on a public static property.
Commonly used in the Singleton pattern.
Dependency Injections
A pattern for automating dependency resolution based on a configuration.
It allows you to configure all your dependencies in one place and have them resolve automatically based on that configuration.
Summary
I have used all these techniques before, but it is always good to find condensed lists of them all together to really help organize them. Determining the cleanest and safest way to pass around variables through scripts is something I work on a lot, so laying out these options to go through in an effort to determine the best approach is always helpful. This also led me to some other resources on the topic that I am looking forward to investigating.
via Blogger http://stevelilleyschool.blogspot.com/2021/05/accessing-variables-in-other-scripts-in.html