x


Access class variables of selected object

Hi all,

I am trying to make a space-based RTS game. So there will be multiple ship types, each with it's own variable values, but the same number and type of variables for each ship type. I've got the scripts set up the way I want them, but I'm stuck at the last step, which is accessing the variables of an object I select in a scene. Including a little bit more code than necessary so you can see where I put the code I've entered.

ShipObjDefTest.js - Ship variables definition. Attached to the camera for now.

#pragma strict

public class ShipObj {
    var type : String;
    var size : String;
    var speed : float;
    var cost : float;
}

function Start () {
}

function Update () {
}

TestScout.js - Values for this ship type. This is attached to a prefab of the same name.

#pragma strict

var newShip = new ShipObj();
newShip.type = "Scout";
newShip.size = "Small";
newShip.speed = 30;
newShip.cost = 100;

function Start () {
}

function Update () {
}

QuickShipPicker.js - My testing script. Attached to the camera.

#pragma strict

var hitinfo : RaycastHit;
var ship;

function Start () {
}

function Update () {
    if (Input.GetMouseButtonDown(0)) {
       var cameraRay : Ray = Camera.main.ScreenPointToRay(Input.mousePosition);
       if (Physics.Raycast (cameraRay, hitinfo)) {
         ship = hitinfo.transform.parent;
         print(ship);
         //print(TestScout.newShip.type);
         //print(TestScout.newShip.speed);
       }
    }  
}

The commented lines in QuickShipPicker.js show what I want to do, but the type of ship (TestScout in the commented lines) will not always be the same.

Any help is much appreciated!

more ▼

asked Apr 26 '12 at 04:56 PM

Sastrei gravatar image

Sastrei
1 2 3 4

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

You'll have to use a GetComponent in your raycast stuff to get the script from the object you're hitting and access it.
e.g.

if(Physics.Raycast(ray, hit)){
   var ship : GameObject = hit.collider.gameObject ;
   var shipScript : TestScout ;
   shipScript = ship.GetComponent(TestScout) as TestScout ;
   Debug.Log(shipScript.shipVariable.classVariable) ;
}

...something along those lines.

more ▼

answered Apr 26 '12 at 06:40 PM

Lo0NuhtiK gravatar image

Lo0NuhtiK
3.5k 1 9 39

I appreciate you taking the time to respond. Unfortunately, my exact problem is that the name of the script will not stay the same. I need to get to the ShipObj instance inside of each script. Otherwise I'll have to hardcode the game for each and every ship type (scout, corvette, frigate, destroyer, etc).

Edit: Replacing TestScout with ShipObj compiles but returns: Object reference not set to an instance of an object

Apr 26 '12 at 06:52 PM Sastrei

Why not have it as one script? You're wanting to set the values in the inspector right?
ShipAttributes (or whatever you call the script)


    class ShipObj{
       var type : String ;
       var whatever : int ;
    }
    var Ship : ShipObj = ShipObj() ;

Then you'd put the script on each ship, set their stuff in the inspector, then assign the script like in the above example when you ray-hit it and access it that way. Debug.Log(shipScript.Ship.type) ;
....you could probably just skip the raycast stuff your doing also and use OnMouseDown instead, then wouldn't need the multiple scripts and such.

Apr 26 '12 at 07:28 PM Lo0NuhtiK

I'll give that a try and see if I can set the variables in each copy of the script in each ship subfolder instead of through the editor. I don't like setting values there, too easy to lose track of the information for me.

Apr 27 '12 at 05:33 AM Sastrei
(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:

x3342
x825
x339
x125

asked: Apr 26 '12 at 04:56 PM

Seen: 580 times

Last Updated: Apr 27 '12 at 05:33 AM