- Home /
Unity Freeze When Applying my Script to GameObject
Unity freezes when im applying this script to a Gameobject. I can't see whats wrong with my script, i did a lot of changes, but i can't really see what's wrong. my class name and the script's name is the same.
class playerStats extends MonoBehaviour
{
var Maximum : int; var Current : int;
var health = playerStats();
function deduct(x : playerStats) { x.Current = x.Current - x.Maximum; }
function Awake () { health.Maximum = 100; health.Current = 20; }
function Update () { if (Input.GetButtonDown("Fire1")) { deduct(health); Debug.Log(health.Current); } }
}
Answer by burnumd · May 05, 2010 at 08:23 PM
You can't call the constructor (as you do in the sixth line of your code, "var health = playerStats ()") of a MonoBehaviour. MonoBehaviours are, in essence, constructed when you add them as a component to something (That's why they have "Awake" and "Start"). Try taking out that assignment and you won't have any problem. However, I'm guessing then that your script won't function as you intend. It looks like you're trying to create a singleton. You might take a look at the wiki article on that topic. It's in C#, but the process for creating a single instance of some MonoBehaviour should be evident.
As a side note, classes are typically defined starting with a capital letter (ie, "class PlayerStats") to avoid confusion with variables, which should be named starting with a lowercase letter (ie, "var maximum").
Answer by andeeee · Apr 21, 2010 at 04:14 PM
You should initialise the health variable in the Awake function rather than the variable declaration.
Answer by Stanislav Pugach · Jul 12, 2010 at 07:12 AM
What happens is an instance of your playerStats
class gets created when you add it to an object. In the process of creation, it needs to initialize all of the fields. Including the var health = playerStats();
initializer. This initializer creates a new object of class playerStats
, which in turn need to initialize. This second object also executes the var health = playerStats();
line during its creation. That creates yet another object of the same type... etc etc
In effect, you created an endless cycle.
Your answer
Follow this Question
Related Questions
Unity freezes on play 2 Answers
A node in a childnode? 1 Answer
Helpppp - AnimationState.layer ?????? -1 Answers
Player movement issue... 1 Answer
How To Add A FX When I Teleport. 0 Answers