I get the following error at this line: InvalidCastException: Cannot cast from source type to destination type.
I’m really not sure why, as the code emulates the documentation perfectly. Is theresomething unique about renderer types?
var objectRenderers : Renderer[];
objectRenderers=downloadedAssetBundle.GetComponentsInChildren(Renderer);
Note: downloadedAssetBundle is an instantiated mainAsset (GameObject) from an asset bundle.
This is why I hate UnityScript. GetComponentsInChildren return type is Component[], and objectRenderers is Renderer[]. The compiler should be smart and try to do a cast automatically or at least show a compile-time error stating that the types don’t match. But no, it accepts your code and crash at runtime… < / rant>
A manual cast to Renderer[] should work:
var objectRenderers : Renderer[];
objectRenderers=downloadedAssetBundle.GetComponentsInChildren(Renderer) as Renderer[];
Well this manages to get past the initial error but then when I get to the next line which reads for (var eachPart : Renderer in objectRenderers) --(exactly the same as documentation) it crashes because it looks like the objectRenderers array doesn't actually exist. Any idea? Thanks!
My bad. The code I posted actually doesn't work. Apparently its not possible to cast the entire array, but you can cast individual element of it in the "foreach" loop. //objectRenderers will be a Component[] var objectRenderers = downloadedAssetBundle.GetComponentsInChildren(Renderer); for (var eachPart : Renderer in objectRenderers) { ...
Huh? That's the code I had originally which didn't work..Did you miss something? I tried doing var objectRenderers = downloadedAssetBundle.GetComponentsInChildren(Renderer); for (var eachPart : Renderer in objectRenderers as Renderer) {.. but that didnt work either :(
Not really. This way I'm not declaring the type of objectRenderers and letting the compiler choose one. In this case it will be Component[]. Sometimes UnityScript behaves differently between versions. What version of Unity are you using?
Well this manages to get past the initial error but then when I get to the next line which reads for (var eachPart : Renderer in objectRenderers) --(exactly the same as documentation) it crashes because it looks like the objectRenderers array doesn't actually exist. Any idea? Thanks!
– grimmyMy bad. The code I posted actually doesn't work. Apparently its not possible to cast the entire array, but you can cast individual element of it in the "foreach" loop. //objectRenderers will be a Component[] var objectRenderers = downloadedAssetBundle.GetComponentsInChildren(Renderer); for (var eachPart : Renderer in objectRenderers) { ...
– luizgpaHuh? That's the code I had originally which didn't work..Did you miss something? I tried doing
– grimmyvar objectRenderers = downloadedAssetBundle.GetComponentsInChildren(Renderer); for (var eachPart : Renderer in objectRenderers as Renderer) {..but that didnt work either :(Not really. This way I'm not declaring the type of objectRenderers and letting the compiler choose one. In this case it will be Component[]. Sometimes UnityScript behaves differently between versions. What version of Unity are you using?
– luizgpaAhha. I removed the declaration and it worked!! Many thanks!!
– grimmy