x


Unity compilation order

Hello, I am working on a C# project which needs to utilize a js library. However that js library its self utilizes..... C# libraries!

To get this to work properly, I will obviously need to set up a build order like this:

Step 1: Build C# libraries that the js library uses Step 2: Build the JS library Step 3: Build my own code

I read that one can use the Standard Assets folder to control the order of compilation... So I set up a little mockup of my problem...

First, I created a project with two script files:

One.cs:

 using UnityEngine;
 using System.Collections;
 public class One : MonoBehaviour
 {
     void Start ()
     {
         Debug.Log(Two.myFunc());
     }
 }

Two.js:

 #pragma strict
 public static function myFunc()
 {
     return "Twrooooooo!";
 }

Finally, my hierarchy was setup as so:

 Test.scene
 One.cs
 Standard Assets
 -Two.js

alt text

This worked great! Perfectly!

However, my mockup was not complete, so I extended it, changing two.js to:

 #pragma strict
 public static function myFunc()
 {
     return "Twrooooooo!" + Three.myFunc();
 }

And adding a third file, Three.cs:

 using UnityEngine;
 using System.Collections;
 public class Three : MonoBehaviour
 {
     public static string myFunc ()
     {
         return " and Thwreeeeeeeeeee!";
     }
 }

I then made the heirarchy look more like this:

 Scene.scene
 One.cs
 Standard Assets
 -Standard Assets
 --Three.cs
 -Two.js

alt text

And now, I am getting the error:

 Assets/Standard Assets/Two.js(4,32): BCE0005: Unknown identifier: 'Three'.


So it appears that I cannot have multiple layers of standard assets folders for maximal control of build order!

This leaves me wondering, how CAN I control my build order to achieve a three stage building of my assets? Is this possible? I do not have Unity Pro.

more ▼

asked Sep 15, 2012 at 11:01 PM

Flynn gravatar image

Flynn
1.5k 59 56 76

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

2 answers: sort voted first

That can't work, sorry. You should convert the JS library to C#.

more ▼

answered Sep 15, 2012 at 11:17 PM

Eric5h5 gravatar image

Eric5h5
111k 55 189 675

Hello, eric5h5! That is sad to hear :( Do you know of another way to control compilation order? I would love to convert the library to c#, however its creator has specifically asked me not to, so, I would very much like to find a workaround other than converting the lower-level c# libraries to js.

Sep 16, 2012 at 03:38 AM Flynn

There is no way to control compilation order other than the folder system. There really isn't any work-around. It's fine to mix languages if you have, for example, library code in C# and the rest in JS, but you simply can't mix them if you have scripts in the same "level" and want them to reference each other. And there are only two "levels": Standard Assets/Plugins, and everything else. (Strictly speaking there's also the Editor "level", but that obviously won't work for code that needs to be in a build.)

Sep 16, 2012 at 03:51 AM Eric5h5

Darn! :( I would love to see some sort of compilation order feature in newer versions of Unity... Perhaps something like a script directive! Any chances of that happening sometime in the future?

Sep 16, 2012 at 04:12 AM Flynn

You'd have to ask someone who works at Unity....

Sep 16, 2012 at 05:23 AM Eric5h5

Just wanted your opinion on the likelihood of an idea like this -- Has someone already suggested it, etc. Thank you for your answers and replies!

Sep 16, 2012 at 05:39 AM Flynn
(comments are locked)
10|3000 characters needed characters left

Just found this question and just want to add:

If the "innermost" C# library doesn't have dependencies on stuff in the outermost library (which would create a circular dependency) you could compile the inner C# library yourself, either in MonoDevelop of in Visual Studio and place the dll along with the JS library files. That way both, the JS stuff and the precompiled C# library, are part of the first pass group and can by used by the UnityScript stuff.

more ▼

answered Jul 23, 2013 at 11:49 PM

Bunny83 gravatar image

Bunny83
79.6k 27 110 351

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

x10328
x523
x249
x96
x54

asked: Sep 15, 2012 at 11:01 PM

Seen: 1749 times

Last Updated: Jul 23, 2013 at 11:49 PM