x


Making a class publicly available

Hey, I have some programming experience but only in traditional environments (Eclipse, VisualStudio).

I need to create a class called Die (as in the singular of "dice"), that I can use across different JavaScript files. The class is supposed to represent one die, that can be rolled by calling (for example) die1.roll().

I have a MouseInformer script, which takes care of what the mouse has "picked up". When I click on a button (with a picture of a die) I want that button to add a die to MouseInformer's array of dice.

In the end, I want to be able to click on a text box, into which the dice list is emptied and all the dice are rolled, and shown in the text box.

I am really not used to the programming structure of Unity and find it quite difficult to imagine how my scripts work, so apologies if this question is really basic or if I'm going about the problem the wrong way (if you have any suggestions, please write!).

I want to know how to make the Die class visible to other JavaScript files in the project, such as the chat-box, so that I can transfer the dice between arrays in different scripts.

I've attached my MouseInformer script:

var dList = new Array();
var pos : int;

//The Die class which contains data on how many sides it has
class Die {
    var sides : int;

    function Die(n : int) {
        sides = n;
        Debug.Log("1d"+sides+" created");
    }

    function roll() {
        return parseInt(Random.Range(1,sides)) ;
    }

    function returnSides() {
        return sides;
    }
}

//Add a Die of a certain type to the dicelist (dList)
function AddTo (d : Die) {
    dList.Push(d);
}

//Removes a Die of the same type as the one given in the input
function Remove (d : Die) {
    for (i=0; i<dList.length ; i++)
    {
        if (dList[i].returnSides() == d.returnSides() ){
            pos = i;
            break;
        }
    }

    dList.RemoveAt(pos);
}
more ▼

asked May 14 '10 at 01:27 PM

TheMorten gravatar image

TheMorten
128 8 8 15

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

2 answers: sort voted first

I believe a .js script is treated as a class in Unity, and to reference it you only need have the script in your project. You can then write lines such as

var myObject : Die;

in another .js file, and it will recognise you are creating a new instance of a Die.js component. You can assign this a value in various ways; the easiest being to attach this other script to an object, then dragging onto it a Game Object that has a Die component attached. You can access any function or variable not specified as private, like this

var result = myObject.Roll();
myObject.numberOfSides = 8;
more ▼

answered May 14 '10 at 01:41 PM

Novodantis 1 gravatar image

Novodantis 1
1.7k 14 22 40

Of course, there's nothing to stop you from saying something like: var myObject : Die = new Die(); Rather than use a GameObject with a Die component.

May 14 '10 at 01:45 PM Novodantis 1

Thanks a lot, I'll check it out when I've completed some other stuff in my project. :)

May 15 '10 at 11:24 AM TheMorten
(comments are locked)
10|3000 characters needed characters left

All public classes declared in Unity scripts are available to all other scripts, with the exception of certain compilation order rules.

So to create and use a new Die instance, in any other js script, just do:

var thisDie = new Die(8);
var rollResult = thisDie.Roll();

Incidentally, if you're familiar with coding in other environments such as VS and Eclipse, you might find you get on a lot better using C# in Unity instead of Javascript. You can even use VS to work on the scripts if you like!

more ▼

answered May 14 '10 at 01:45 PM

duck gravatar image

duck ♦♦
41.4k 95 152 415

(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:

x3570
x352
x20

asked: May 14 '10 at 01:27 PM

Seen: 2133 times

Last Updated: May 14 '10 at 01:27 PM