- Home /
Implicit downcast from 'Object[]' to 'UnityEngine.GUITexture[]'
Hi, i am very noob in Unity and in programming. I try to follow some tutorials but in one point of the track i get stuck with this error: Implicit downcast from 'Object[]' to 'UnityEngine.GUITexture[]'. InvalidCastException: Cannot cast from source type to destination type. Showlives..ctor () (at Assets/Juego Shooter/Scripts/Showlives.js:4)
I see that the problem is in the line 4 of my code but i don´t know what are wrong.
#pragma strict
var livetexture:Texture;//La textura que corresponde a las vidas restantes
var lives:GUITexture[]=[null,null,null];//el numero de vidas
var texto:GUIText;//El texto que indica fin de juego
var texto2:GUIText;//El texto que indica las instrucciones
function Update () {
if(Globals.Lives==3)
{
lives[2].color.a=128;
lives[1].color.a=128;
lives[0].color.a=128;
}
if(Globals.Lives==2)
{
lives[2].color.a=0;
lives[1].color.a=128;
lives[0].color.a=128;
}
if(Globals.Lives==1)
{
lives[2].color.a=0;
lives[1].color.a=0;
lives[0].color.a=128;
}
if(Globals.Lives==0)
{//cuando el numero de vidas llega a 0, se muestra pantalla Game Over y si pulsamos boton asignado vamos a menu principal
lives[2].color.a=0;
lives[1].color.a=0;
lives[0].color.a=0;
texto.text="Game Over";
texto2.text="Pulsa ESPACIO para Continuar";
if(Input.GetButtonDown("Jump"))
{
Globals.Levels=0;
Application.LoadLevel(Globals.Levels);
}
}
}
I'm not a Javascript/Unityscript guru, so I'll leave this here as a comment (in case there is a better way). Change line 4 to:
var lives:GUITexture[]=[null as GUITexture,null as GUITexture,null as GUITexture];//el numero de vidas
$$anonymous$$uch simpler, you should have:
var lives:GUITexture[] = [null, null, null] as GUITexture[];
Or even better:
var lives:GUITexture[] = new GUITexture[3];
Answer by Benproductions1 · Mar 29, 2014 at 11:27 PM
Since null
does not have a type, Unityscript can't infer the type of your array literal. To make Unityscript infer the type, you can explicitly state the type of null reference:
var lives:Type[] = [null as Type];
For more simplicity, you can simply cast the entire stay to the type of array you need:
var lives:Type[] = [null] as Type [];
But since you are just making a bunch of null reference, which are the default value for reference type arrays, you can simply make a new stay:
var lives:Type[] = new Type[3];