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:
public class One : MonoBehaviour
void Start ()
public static function myFunc()
Finally, my hierarchy was setup as so:
This worked great! Perfectly!
However, my mockup was not complete, so I extended it, changing two.js to:
public static function myFunc()
return "Twrooooooo!" + Three.myFunc();
And adding a third file, Three.cs:
public class Three : MonoBehaviour
public static string myFunc ()
return " and Thwreeeeeeeeeee!";
I then made the heirarchy look more like this:
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.
Answer by Eric5h5
Sep 15, 2012 at 11:17 PM
That can't work, sorry. You should convert the JS library to C#.
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.
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.)
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?
You'd have to ask someone who works at Unity....
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!
Answer by Bunny83
Jul 23, 2013 at 11:49 PM
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.
Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.
The best place to ask and answer questions about development with Unity.
To help users navigate the site we have posted a site navigation guide.
If you are a new user to Unity Answers, check out our FAQ for more information.
Make sure to check out our Knowledge Base for commonly asked Unity questions.
If you are a moderator, see our Moderator Guidelines page.
We are making improvements to UA, see the list of changes.
Answers and Comments
12 People are following this question.
AOT compilation problem - ExecutionEngineException - AOT not compiling as expected.
Multiple Cars not working
Distribute terrain in zones
[Dublicated, delete] Need help converting js to C#
Translating JS to C# - Use of unassigned variable