- Home /
Destroy character controller and instantiate new one
Hi - in my game the player can switch between first and third person controller. When the third person controller1 hits the first collider, he is destroyed and a new one is instantiated. (This is all working)
But when the third person controller2 hits the second collider - I also want this controller to be destroyed and a third one to be instantiated. But using the same scripts (and changing the prefabs in the hierarchy) doesn't work.
The prefab (third person controller3) is instantiated at (0,0,0), and the third person controller2 isn't destroyed.
This is the script to destroy the character controller (JavaScript):
var thirdPerson : GameObject;
var vincentCamera : GameObject;
var firstCharacterPosition : Vector3;
function OnTriggerEnter(other: Collider){
if (other.tag == "Player")
{
firstCharacterPosition = thirdPerson.transform.position;
thirdPerson.active = false;
vincentCamera.active = false;
}
}
And this is the script to instantiate a new one:
var prefab : GameObject;
var vincentCamera : GameObject;
var thirdPerson : GameObject;
var script : SwitchCharacters;
var playerGO : GameObject;
private var hasPlayed = false;
var characterPosition : Vector3;
function OnTriggerEnter () {
if (!hasPlayed&&!thirdPerson.active){
characterPosition = GetComponent(DestroyCharacter).firstCharacterPosition;
var newPrefab = Instantiate (prefab, characterPosition, Quaternion.identity);
script.cam02 = prefab.Find("VincentCamera");
script = playerGO.GetComponent(SwitchCharacters);
script.player02 = newPrefab;
hasPlayed = true;
}
}
Does anyone know why this doesn't work a second time - I tried destroying third person controller2 as if it was a game object (see below) - but this doesn't work either. Thanks, Laurien
Answer by clunk47 · Jun 07, 2013 at 02:25 PM
I think an easier way to switch might be to just have one character, no instantiations. But instead, you could have both components (3rd person controller and 1st person controller) attached, and enable / disable these components individually.
GetComponent(FirstPersonController).enabled = true;
GetComponent(ThirdPersonController).enabled = false;
Just an idea, if this is something that would work for you. You would need to enable / disable cameras as well I'm pretty sure, but by using the same principal. Hope this helps.
But the problem isn't between the first and third person controller - this switch is working fine through using player01.active = true
etc.
I want to use different third person controllers when the player enters certain triggers - is it possible to attach different 3rd person controllers to the same character?
I think I see what you're saying now. How about having ALL of the controllers you will be using already in scene and just changing each's active status and positions? $$anonymous$$aybe you could make an array
var controllers : GameObject[];
This might work better than instantiating the prefabs at runtime..
This is the script I wrote to set the new third person controller to active, rather than instantiating him - but it doesn't work. Do you know what I'm doing wrong?
var vincent : GameObject;
var vincentCamera : GameObject;
var thirdPerson : GameObject;
var script : SwitchCharacters;
var playerGO : GameObject; //Should be filled with the GameObject the SwitchCharacters script is attached to
private var hasPlayed = false;
var characterPosition : Vector3;
function OnTriggerEnter () {
if (!hasPlayed&&!thirdPerson.active){
characterPosition = GetComponent(DestroyCharacterVincent).firstCharacterPosition;
vincent.SetActive (true);
vincentCamera.SetActive (true);
var newPrefab = Instantiate (vincent, characterPosition, Quaternion.identity);
script.cam02 = vincent.Find("VincentCamera");
script = playerGO.GetComponent(SwitchCharacters);
script.player02 = newPrefab;
hasPlayed = true;
}
}