- Home /
JScript problem
hi,
I have a weird problem. I sometimes need to import Blender Shape keys into Unity, and I always used MetaMorph developed by Foolish Frost without problem. In one recent project, however, I got tons of compiling errors. I finally got around by modifying an old project with a working MetaMorph script into the new one. But the problem kept gnaw at me and I feel uneasy not knowing what's wrong. I included both the error messages from one function and the corresponding function definition below. Hopefully someone can tell me what's wrong.
Jason
-----CompilerOutput:-stderr---------- -----EndCompilerOutput--------------- - Finished compile Library/ScriptAssemblies/Assembly-UnityScript-firstpass.dll Assets/Standard Assets/Scripts/MetaMorph.js(311,74): BCE0019: 'length' is not a member of 'Object'.
(Filename: Assets/Standard Assets/Scripts/MetaMorph.js Line: 311)
Assets/Standard Assets/Scripts/MetaMorph.js(313,96): BCE0048: Type 'Object' does not support slicing.
(Filename: Assets/Standard Assets/Scripts/MetaMorph.js Line: 313)
Assets/Standard Assets/Scripts/MetaMorph.js(318,98): BCE0048: Type 'Object' does not support slicing.
(Filename: Assets/Standard Assets/Scripts/MetaMorph.js Line: 318)
Assets/Standard Assets/Scripts/MetaMorph.js(329,70): BCE0004: Ambiguous reference 'parseFloat': UnityScript.Lang.UnityBuiltins.parseFloat(double), UnityScript.Lang.UnityBuiltins.parseFloat(int), UnityScript.Lang.UnityBuiltins.parseFloat(String), UnityScript.Lang.UnityBuiltins.parseFloat(float).
(Filename: Assets/Standard Assets/Scripts/MetaMorph.js Line: 329)
Assets/Standard Assets/Scripts/MetaMorph.js(331,97): BCE0048: Type 'Object' does not support slicing.
(Filename: Assets/Standard Assets/Scripts/MetaMorph.js Line: 331)
Assets/Standard Assets/Scripts/MetaMorph.js(336,101): BCE0004: Ambiguous reference 'parseFloat': UnityScript.Lang.UnityBuiltins.parseFloat(double), UnityScript.Lang.UnityBuiltins.parseFloat(int), UnityScript.Lang.UnityBuiltins.parseFloat(String), UnityScript.Lang.UnityBuiltins.parseFloat(float).
(Filename: Assets/Standard Assets/Scripts/MetaMorph.js Line: 336)
Assets/Standard Assets/Scripts/MetaMorph.js(369,66): BCE0048: Type 'Object' does not support slicing.
function ReadAnimationFile(datafile : TextAsset) : Array
{
// This read blender 3d ShapeKeys that have been exported with the diffmap.
// It's a good idea for each animation to contained in it's own file under it's own name.
Report("Loading Animation Recording: " + datafile.name, 2);
var Animation_Array = new Array();
//var Total_String = datafile.text;
var Total_Array = new Array();
Total_Array = datafile.text.Split("\n"[0]);
var line : int;
for ( line = 0 ; line<Total_Array.length ; line=line+1 )
{
var Line_String : String = Total_Array[line];
// parse out all the crap.
var boo = Regex.Match(Line_String,"(\\[|\\])");
if (boo.Success)
{
Line_String = Regex.Replace(Line_String,"(\n|\r|\f)","");
Line_String = Regex.Replace(Line_String,"(\\[|\\])","");
Line_String = Regex.Replace(Line_String,"\\s*(,)\\s*","|");
Line_String = Regex.Replace(Line_String,"'","");
var Line_Array = new Array();
Line_Array = Line_String.Split("|"[0]);
var item : int;
// We really want the floating point numbers to be stored as floating points, and not strings...
if (Animation_Array.length == 0)
{
Animation_Array.Add(Line_Array);
var Line_Array2 = new Array();
for ( item = 0 ; item<Animation_Array[0].length ; item=item+1 ) // Line 311
{
var Found : int = FindName( Diff_Maps, [Animation_Array[0][item]] ); // Line 313
if ( Found != -1)
{
Line_Array2.Add(Found); // Writing line two, the diff map indexes. Faster than name lookups per frame.
} else {
Report("ERROR: Morph not found" + Animation_Array[0][item], 0); // Line 318
Debug.Break();
}
}
Animation_Array.Add(Line_Array2);
}
else
{
for ( item = 0 ; item<Line_Array.length ; item=item+1 )
{
Line_Array[item] = parseFloat(Line_Array[item]); // Line 329
var Found2 : int = FindName( Diff_Maps, [Animation_Array[0][item]] ); // Line 331
if ( Found2 != -1)
{
if (Animation_Array.length == 2 && Diff_Maps[Found2].DM_Multiplier == 0)
{
Diff_Maps[Found2].DM_Multiplier = parseFloat(Line_Array[item]); // Line 336
}
}
}
Animation_Array.Add(Line_Array);
}
}
}
return Animation_Array;
}
Answer by SilverTabby · Oct 02, 2011 at 09:52 PM
All of the error messages you posted are really the same problem appearing in different forms. The problem is that the standard array class doesn't return an array, an animation, a String, a number, or anything really usable. It returns a generic Object. The only thing the program knows about this object that it's a packet of data in Unity. Not terribly useful.
Here's my recomendations:
DON'T use the Array() class if you can avoid it. I've never gotten it to work. ever. Use standard "built-in" arrays.
Declare the contents of your arrays explicitly.
For example, if you want to work with a 2-d Array of Strings, try this:
var myArray : String[,] = new String[4,2];
myArray[0,1] = "A string";
for(var X : int = 0; X < myArray.Length(0); X++)
for(var Y: int = 0; Y < myArray.Length(1); Y++)
{
myArray[X,Y] = "(" + X + ", " + Y + ")";
Debug.Log(myArray[X,Y]);
}
If you replace Every instance of the Array() class with a builtInArray[], then your problems should go away.
Your answer
![](https://koobas.hobune.stream/wayback/20220612233300im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Cannot use Static var/ Unknown Idientifier 1 Answer
Javascript Compile error 2 Answers
BCE0005: Unknown identifier: 'spriteRenderer'. 2 Answers
What's this error? 1 Answer
Help with the code 1 Answer