Access GC Script Components
How to access GC script components from your own scripts using C#
The documentation has moved to: https://mitschmr-studios.io/documentation/api-guides/accessgcscriptcomponents.html
This version will no longer be updated and maintained.
In this tutorial, I want to start with accessing a few script components of Game Creator. These are:
Character Player
Stats
Actions
Before we start, there are some things to do.
Prerequisites
Install Unity
Install IDE (I use Visual Studio 2019)
Import Game Creator
Import Stats and enable it in the Module Manager
Enable Stats Examples in the Module Manager.
Access Components
First, let's make a new folder in our project for storing the scripts. I'll name it Scripts
. Navigate into the newly created folder and create a new C# script. As for the name, I go withUseGameCreatorComponents
. Open the script, and delete void Start()
and void Update()
, we won't use them. You also need to the following using
statements:
Note: Make sure that the name of the script matches the class name in the script!
Attention: DeleteStart()
, Update()
, LateUpdate()
with no content in it. Even if you don't use them, Unity processes them and generates overhead. In a game with thousands of objects and empty methods, this can cost performance!
Character Player
Let's add a Player to our scene. To do this, right-click in the hierarchy and select Game Creator -> Characters -> Player
. Now, open the script with your chosen IDE. The script should look like the following:
There are at least two ways to access components on a gameobject. The first one is to get a public reference to the gameobject and then call <yourVariable>.GetComponent<ComponentType>()
inside a method. The second one is to already specify the type you want to have for the public variable. Let's take a look:
The commented line is also possible, if you don't want to specify the type of variable or are not sure what type you get. If you specifiy a variable type, the variable will throw an error if you want to assign a value of another type. For example, a float cannot get applied to an int variable.
Note: If you use GetComponent<Type>()
in the Unity Editor, it will generate ~0.5 KB of garbage collection, because of the safety checks that get executed. This doesn't occur in the build version.
Both ways are ok, but the second method is the cleaner way.
As you can see in the Inspector, a Player has a bunch of settings that can be modified. If you want to access them within C#, you need a reference to this component on the gameobject. This is exactly what we have done above. For example, let's read and set the value of IsControllable
.
player.IsControllable()
is a method with a return value of type bool. This returns the current value of the IsControllable checkbox. You can set the value of IsControllable if you access the characterLocomotion
field of the PlayerCharacter. There are also the fields for canRun
, canJump
,runSpeed
, faceDirection
and many more.
Stats
For accessing the stats component, let's add it to our player in the inspector. Then, as said above, you have to ways to access the component by script.
Let's access the attribute health
and the stat level
from the Stats examples and set it to something new. For this, you need the methods GetAttrValue()
, SetAttrValue()
, GetStat()
and SetStatBase()
. There are also many more methods to use.
Actions
There are not many things you can do with an Actions
component, but if you are curious enough, you can even get the title of the current executing action. For this tutorial, I'll only cover the topic on how to execute an action.
As always, get a reference to the Actions
component. Then you simply do <variable>.Execute();
.
This <variable>.Execute()
is also applicable on buttons , where a OnClick
event executes certain things, and the Call Methods
action. You reference the actions object and select Execute()
.
Last updated