- Home /
"Can't find namespace" - accessing Javascript from C# (or C# from Javascript)
I'm trying to call a function or variable from a JavaScript in a C# class.
I've moved the JavaScript file into the Standard Assests folder but I still get a "can't find namespace" error.
I have made sure that the files are correctly named and that they are called correctly in the script. Is there any other way to fix this?
(Edit: made title more generic, and added "or variable" because the answer is equally applicable to functions and variables)
I'm trying to do this and i have placed the desired JS in the Standard Assets folder. The script that is accessing it is in the $$anonymous$$y Scripts folder which is not inside any folders. Somehow upon build i still get the error that says.
"The type or namespace name 'PlatformerController' could not be found (are you mising a using directive or an assembly reference?)"
public PlatformerController player;
Answer by duck · Jan 30, 2010 at 05:38 PM
First, I'm assuming you've read this manual page:
Overview : Script Compilation (Advanced)
It describes the script compilation order. I'm linking it above for others which may encounter this answer from search terms which match the question.
In summary:
Whichever script has the function or variable that you want to access, that is the script which must go in the earlier compilation pass. So, if it's the c# script which contains the function you want to call, and the Javascript class is trying to call it, you'd move the C# file into an earlier-pass folder (such as "Plugins").
If the Javascript class contains the function or variable, and you want to call it from a C# script, it's the Javascript script which must go in an earlier-pass folder.
Note that this is a one-or-the-other situation. You can't have references both ways between two scripts of a different language.
Make sure your scripts aren't both in different folders which fall into the same compilation pass. Eg, both "Plugins" and "Standard Assets" are compiled in the same pass.
If you have your scripts arranged in the correct compilation order, and you're not trying to make "both-way" references, then the only other option I can think of is that you might have a typo either in your script filename, or in your references to that script type in your other script.
The documentation page has moved, it is now at: http://docs.unity3d.com/Documentation/$$anonymous$$anual/ScriptCompileOrderFolders.html
I guess this answer doesn't apply in unity 4.6 cuz it doesn't work for me. Can you update the solution?
What if I have a package (Google Play Services) which has references to some file that must be into a certain folder in the Assets folder? If I try to reference it from my javascript I get namespace not found. If I try to set the package's folder into the Plugins folder then I get the error that a code is trying to access an inexistent folder.
Answer by Brian-Kehrer · Jan 30, 2010 at 10:14 PM
As a corollary to Duck's answer:
If you find you need C# for certain programmatic problems, the 'both-way' reference problem is a great reason to switch entirely to C#.
We made it for about a year with Unity before this really bit us, but eventually we took a day and ported all the old javascript code to C#. That was about 2 years ago - and we've never looked back. In the end it made working in Unity a lot simpler, particularly to avoid this sort of issue.
Thank you for wonderful advice.
And sorry for being stoopid... But where is the plugin directory located? Under Library? I have a folder that is called Unity Projects, and in there all the data that I make go. There is no Plugin directory, and I can find one under Program Files either.
Found out that the Plugin directory also compiled earlier. You may create a folder in your Assets folder, and put your C# files there.
Answer by fil · Oct 17, 2012 at 12:02 PM
Hello, I found this tutorial and it quite simple: http://www.41post.com/1935/programming/unity3d-js-cs-or-cs-js-access
download the example to see it working
Your answer
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Calculate distance between two objects 6 Answers
Can I get a warning if I (involuntarily) declare a new js variable in an assignment? 2 Answers
Display the speed of a Game Object in MPH 1 Answer
How can I wait for Unity to recompile during the execution of an editor script? 6 Answers