x


help with creating a static Instance in javascript

// -- Amended Question --

I have successfully rewritten a Third Person Controller tutorial on 3D Buzz from C# to JavaScript, with one major exception. Where the C# script creates an 'Instance' to read and write vars from , I found the other scripts and stored them in local vars. This is going to give me future problems so I would like to finally find out :

How do I create an 'Instance' in JavaScript for my other scripts to reference ?

C# example :

using UnityEngine;
using System.Collections;

public class TP_Controller : MonoBehaviour 
{   
    public static TP_Controller Instance;

    void Awake() {
        Instance = this;
    }
}

My js workaround :

public var TP_Motor : Script_TP_Motor;
function Awake() {
    TP_Motor = GetComponent("Script_TP_Motor");
}

Any help or info would be greatly appreciated.

// Thanks , Jay.

//

// ---- First Posted Question ----

I am following the Third Person Controller videos on 3D Buzz, but they are written in C#. My goal is to follow the video's and write the code in JavaScript.

From what I understand that I am trying to do, is establish a set of vars to live in a 'class' , then I should create an instance of this class, for other scripts to access vars or adjust vars.

In my previous projects, to read/edit other scripts' data I have simply assigned a e.g. var myTPC : ScriptTPC; and used GetComponent in the Start to load the script.

So before I start; can someone please help me understand what is being set up in this C# script :

using UnityEngine;
using System.Collections;

public class TP_Controller : MonoBehaviour 
{   
    public static CharacterController myCharacterController;
    public static TP_Controller Instance;

    void Awake() 
    {
       myCharacterController = GetComponent("CharacterController") as CharacterController;
       Instance = this;
    }
}

and how can I edit my converted javascript to use class and assign Instance :

#pragma strict

public static var myCharacterController : CharacterController;
public static var TP_Controller : Instance;

function Awake() 
{
    myCharacterController = GetComponent("CharacterController");
    Instance = this;
}

Many thanks, I am self-taught so alot of the terminology is lost on me.

3D Buzz link : http://www.3dbuzz.com/vbforum/content.php?212

Scroll down to -> Section 2 ; Video 6 - TP_Controller Skeleton

Edit 1 : I understand I have to load CharacterController , and this actually loads preset functions I can call on (TransformDirection , Move, IsGrounded etc) , I don't understand how to create an 'Instance' that all scripts can call on. My method would be to load the other scripts into a var then edit e.g. var myTPC : ScriptTPC; myTPC.posX = 1; (would change the posX var on ScriptTPC to 1). Can I just do this instead of creating an Instance?

Edit 2 : So far my scripts are working , using a different method of reading and writing to each other. Although I do get a Warning : BCW0028: WARNING: Implicit downcast :

public var myCharacterController : CharacterController;
// public static var TP_Controller : Instance;
public var TP_Motor : Script_TP_Motor;

function Awake() 
{
    myCharacterController = GetComponent("CharacterController");
    // Instance = this;
    TP_Motor = GetComponent("Script_TP_Motor"); // Warning , even with using -> OR transform.gameObject.GetCo... OR this.GetCo...
}

and I'll have to do the same for the TP_Camera script

more ▼

asked Apr 04 '12 at 06:39 AM

alucardj gravatar image

alucardj
14k 40 57 88

... and a post-question : what is the difference between a public and static var ? (I've only used public and private (and hide in inspector public)).

Apr 04 '12 at 07:08 AM alucardj

Thanks, that helped clear up static vars. Still leaves me with how to create an Instance in JavaScript (which I now see static would make sure there is only one of these Instance's in existance).

Apr 04 '12 at 09:25 AM alucardj
(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first
more ▼

answered Apr 06 '12 at 02:10 AM

alucardj gravatar image

alucardj
14k 40 57 88

(comments are locked)
10|3000 characters needed characters left
using UnityEngine;
using System.Collections;

public class TP_Controller : MonoBehaviour 
{   
    public static CharacterController myCharacterController;       //sets a variable of type CharacterController
    public static TP_Controller Instance;                                      //sets a variable of type TP_Controller (this script)

    //Happens only once when the script is first created
    void Awake()
    {
       //Assigns the CharacterController component to a varaiable so it can be called by this script
       //the Get Component function will look for the component on the object to which this script is attached
       myCharacterController = GetComponent("CharacterController") as CharacterController; 

       //set this script to a variable.  I'm not sure why you would want to do this, it doesn't make any sense
       Instance = this;
    }

   //code in the Update method happens every frame
    void Update()
    {
       //if there is no camara then skip the update
       if (Camera.mainCamera == null)
         return;


       //calls the GetLocomotionInput method (see below)
       GetLocomotionInput();
    }

    //this function is where the control of the character would happen
    void GetLocomotionInput() 
    {

    }
}
more ▼

answered Apr 04 '12 at 09:17 AM

kalvinlyle gravatar image

kalvinlyle
234 11 16 19

Thanks for taking the time to show what the C# is doing. I should have explained better that I want to make the static (only one) Instance using JavaScript.

So far my scripts are working , using a different method of reading and writing to each other :

public var myCharacterController : CharacterController;
// public static var TP_Controller : Instance;
public var TP_Motor : Script_TP_Motor;

function Awake() 
{
    myCharacterController = GetComponent("CharacterController");
    // Instance = this;
    TP_Motor = GetComponent("Script_TP_Motor"); // Warning , even with using -> OR transform.gameObject.GetCo... OR this.GetCo...
}

and I'll have to do the same for the TP_Camera script

Apr 04 '12 at 09:30 AM alucardj
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

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

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x4374
x3570
x352
x233
x208

asked: Apr 04 '12 at 06:39 AM

Seen: 1117 times

Last Updated: Apr 06 '12 at 02:10 AM