i have 4 player when the game start other 3 player deactivated i just using below code:
function Start ()
{
GameObject.Find(“P1”).active = true;
GameObject.Find(“P2”).active = false;
}
its work properly but i want to swap my P1 into P2 when i pressed button i using following code:
for (var i = 1; i < 5; ++i)
{
if(i != selectedCharacter)
{
characterName = “P” + i;
GameObject.Find(characterName).active = false;
}
else
{
characterName = “P” + selectedCharacter;
GameObject.Find(characterName).active = true;
}
but the problem is editors says null referance(bold line)
player have different control in different form [/code]
Hi,
This might not be it, but have you initialized selectedCharacter to a value? If not, (i != selectedCharacter) will always be false, and you will be looking for a GameObject tagged “P”, which does not exist.
Maybe you can paste the full code, just to be sure. Thx
here my full code:
var selectedCharacter : int = 1;
var characterName : String;
function Start ()
{
GameObject.Find(“P1”).active = true;
GameObject.Find(“P2”).active = false;
GameObject.Find(“P3”).active = false;
GameObject.Find(“P4”).active = false;
}
function Update()
{
if(Input.GetButtonDown(“Fire1”))
{
if (selectedCharacter < 4)
selectedCharacter++;
else
selectedCharacter = 1;
for (var i = 1; i < 5; ++i)
{
if(i != selectedCharacter)
{
characterName = “P” + i;
GameObject.Find(characterName).active = false;
}
else
{
characterName = “P” + selectedCharacter;
GameObject.Find(characterName).active = true;
}
}
}
}
Ok, Check out Unity Script Reference on GameObject.Find - “If no game object with name can be found, null is returned. If name contains a ‘/’ character it will traverse the hierarchy like a path name. This function only returns active gameobjects.”
So basically, you can’t use GameObject.Find if you need to look for objects that are not active, which means you need to store the game objects in Start, so that you can reference them later without having to use GameObject.Find to look for the inactive ones. I did this by storing them in an array, which we can reference later.
Try the code below:
var selectedCharacter : int = 1;
private var characterName : String;
private var players : Array;
function Start ()
{
players = new Array();
players[0] = GameObject.Find("P1");
players[1] = GameObject.Find("P2");
players[2] = GameObject.Find("P3");
players[3] = GameObject.Find("P4");
players[0].active = true;
players[1].active = false;
players[2].active = false;
players[3].active = false;
}
function Update()
{
if(Input.GetButtonDown("Fire1"))
{
if (selectedCharacter < 4)
selectedCharacter++;
else
selectedCharacter = 1;
for (var i = 1; i < 5; ++i)
{
if(i != selectedCharacter)
{
players[i-1].active = false;
}
else
{
players[i-1].active = true;
}
}
}
}
cool man its work properly.
but the problem is when one player go forward then i swap the player afterthat new player appear in old position i want all player in same postion (New position)
before i thinking to use the following code
GameObject.Find(characterName).transform.position = this.transform.position)
[/list]
may be i am wrong but i need help
This should work:
var selectedCharacter : int = 1;
private var previousCharacter : int = 1;
private var players : Array;
function Start ()
{
players = new Array();
players[0] = GameObject.Find("P1");
players[1] = GameObject.Find("P2");
players[2] = GameObject.Find("P3");
players[3] = GameObject.Find("P4");
players[0].active = true;
players[1].active = false;
players[2].active = false;
players[3].active = false;
}
function Update()
{
if(Input.GetButtonDown("Fire1"))
{
previousCharacter = selectedCharacter;
if (selectedCharacter < 4)
selectedCharacter++;
else
selectedCharacter = 1;
players[selectedCharacter-1].active = true;
players[selectedCharacter-1].transform.position = players[previousCharacter-1].transform.position;
players[selectedCharacter-1].transform.rotation = players[previousCharacter-1].transform.rotation;
players[previousCharacter-1].active = false;
}
}
Basically, track the last player that was selected, and set the new player’s position and rotation to the same. I got rid of the for loop for disabling/enabling the Players, as you only ever need to disable the last one, and enable the new one, plus I wasn’t sure if you can get the transforms from a disabled GameObject.
somethng is wrong for this code when i put this code then initially i see only one player(its right). i can move this player but when i pressed key afterthat old player can not be deactivated also new player appear in the game but its still old position he not appear in new position,
[/img]
Can you post or email your project folder? I’d like to help you fix it but don’t have time to set up the players etc. My email is jcurrie33@gmail.com