Skip to main content

A Few Pointers On Switching From JavaScript To C#

One does not simply add to an array.

In JavaScript you might have familiarity with using arrays.
You might also be familiar with "adding" to arrays.
Well Unity sugarcoated that for you.
Arrays are not really re-sizable.
When you declare an array in c#,  you have to define it right there.

If your looking for something similar to re-sizable arrays, use lists.
To use Lists in Unity c#, you must add the line
"using System.Collections.Generic;" At the top of your code.

Declaring a list of Game Objects would go something like this
List<GameObject> myGameObjectList = new List<GameObject>();

Then adding to the list would is as simple as
myGameObjectList.Add(gameObjectInstance);

Then if you really just want an array you would say something like
GameObject[] gameObjectArray = myGameObjectList.ToArray();

The API is not what it always seems.

Unity has also sugar coated some of its API, some parts to the point where its practically lying to you in the provided documentation. I learned this the hard way in a short game I did in JavaScript a while back, I had blood splats come up on the screen, and then fade away. To have a fade property, I had the blood splats change their GUI alpha value gradually to 0.

Sometimes when you think your going crazy, simply go to Google.

Everything is a class

In the begging of your coding experience, you were probably not familiar with classes. In fact in "real" JavaScript you can not simply declare a class. Unity had made it though, so that you can declare a class in a similar way compared to the rest of it's syntax.

So now in c#, when you create a c# script in Unity and open it in MonoDevelop(or what ever editor your using), you will see now at the top you have something like:
public class ScriptName : MonoBehaviour {}

***Make sure you script name matches your class name!!!!***

Example, if you have created a file in Unity named Example.cs, in your code  you must have
public class Example: MonoBehaviour {}
If you do not do this your compiler will throw you back an error.

Declaring Methods and Returning Variables

Like in all Object oriented languages declaring methods follow the same flow in syntax. In JavaScript, declaring methods is simply typing function(){}. C# follows the same flow except you use VOID instead of function.

But this is not always the case in C#! In Javascript, methods labeled function could return variables. In order for a method in C# to return variables, two things must occur

1) Void must be replaced with the type of variable you want to return.
2) The method must be declared public for other classes to call it!

You can not anymore say:

void GetPlayersHealth(){
    return Health;
}

You need to now say:

public int GetPlayersHealth(){
    return Health;
}

Declaring variables for Inspector View

With JavaScript all variables declared at the top of the script, unless declared as private, where shown in the inspector view in Unity as variables to manipulate. For C# you need to declare the variable as public or it will not show up in the Inspector pane in Unity's Editor.

Getting Instances of Other Scripts and Components

Let's say you want to get an instance of the players behavior in order to add damage to it. To get it as a variable in the code your currently working on, you now must use the needed class name as the variable type. Getting components is also different, as in the way you call it. In JavaScript it might look like this

var playerBehavoirInst = GameObject.Find("Player").GetComponent(PlayerBehavior);

Now in C#, its change to 

PlayerBehavior playerBehaviorInst = GameObject.Find("Player").GetComponent<PlayerBehavior>();

Notice the get Component and how it's called.


Comments

Popular posts from this blog

How To Import and Use Fonts

-Made by Chrome Fx Films

To use different fonts in your game, your going to have to acquire some fonts. You can go somewhere like 1001 free fonts and download ones you like and want to use.

When you download the file, you'll need to extract the file if its in  a .zip

The text file should have the extension .ttf. If you text files have a FFIL extension, simply rename the font file (yourname.ttf).
Drag the text file into unity to import. By default the Character variable should be labeled Dynamic.

The Dynamic setting means  that Unity won't pre-generate the texture, so if you look at your material containing your font, It probably will be blank. (read more here)
Now your over all objective should be getting your font to look like this (unless you prefer dynamic):
Where the characters of the font are not jumbled up and visible.
Now usually all you have to do to achieve this is change the Character variable from Dynamic to Unicode.
and that should work.
Now what some people over…

Handling Music and Sound Effects In Your Games

Initiative  While developing Treva's Adventure I had to figure out a way to handle multiple music tracks and sound effects in a clean manner or suffer horribly.  What was going to help me achieve a simple solution was taking all the different sounds and centralizing them in a single class in order to black box them.  Any other code trying to play a sound wouldn't even know the sound file's name.  All code trying to play a music track would reference a enum that defines all the track names.
Defining The Class Creating The Enum When I first started defining types in my enumeration,  I was naming the types to be exactly like the file name.  For a scary sound effect I had found a file named "ghost breath".  So around my code would be scattered lines like SoundManager.Play(SoundEffectType.GhostBreath);  This was fine until I found a sound that better fit the situation it was being used in,  and decided to use "ghost breath" for a different situation like a …

Don't Destroy On Load..

So if you want to keep an object or script that keeps up variables (or for any other reason) when you go from scene to scene, you need to attach a don't destroy on load static function, which goes something like this:

function Awake () {
    DontDestroyOnLoad (transform.gameObject);
}

The Awake function is call only once, when all the objects in the scene have been created. Read more about it here.

DontDestroyOnLoad has what ever is in the ( ) to not be destroyed when creating a new scene.

(transform.gameObject) is what will not be destroyed when the new scene is loaded, in this case, it will be the game object and all it's children the script is attached to.