- Home /
Targeting child object components based on a trigger.
Hello! In my scene, I have a player character, X number of enemies, and a camera.
The enemy object has a sphere collider set to trigger, and script attached to it called EnemyAttack.js, upon the player entering the sphere, EnemyAttack.js sets a variable "battle" to true which initiates various things elsewhere in the game, What I also want it to do, is to change the target of the camera to the transform of a child of the enemy object that the player triggered. However, the camera seems to pick one of the enemy objects, and always target that one regardless of which enemy was triggered.
This is my camera code, with the generic smooth follow bits removed:
var target : Transform;
public var wildmonster : GameObject;
public var enemyattack : Component;
public static var battletransform : Transform;
static var battle : boolean;
// Place the script in the Camera-Control group in the component menu
@script AddComponentMenu("Camera-Control/Smooth Follow")
function Awake(){
Player = GameObject.FindGameObjectWithTag("Player");
wildmonster = GameObject.Find("Wild Monster");
enemyattack = wildmonster.GetComponent("EnemyAttack");
}
function Update () {
if (!target){
return;
}
battletransform = enemyattack.battletransform;
battle = enemyattack.battle;
if (battle == false){
counter = 0.0;
transform.position = target.position;
transform.LookAt (target);
}
if (battle == true){
transform.LookAt (battletransform);
transform.position = battletransform.position;
}
}
This is my code that initiates the battle mode and attempts to set the camera's target as the enemy that triggered the event
#pragma strict
private var Player : GameObject;
public var wildmonster : GameObject;
public var enemyattack : EnemyAttack;
var spherecollider : SphereCollider;
static var battletransform : Transform;
static var battle : boolean;
function Awake(){
Player = GameObject.FindGameObjectWithTag("Player");
wildmonster = GameObject.FindGameObjectWithTag("Enemy");
var sphereCollider : SphereCollider = wildmonster.GetComponent(SphereCollider);
}
function OnTriggerStay (other : Collider) {
if (other.gameObject == Player){
battle = true;
}
}
function OnTriggerExit (other : Collider) {
if (other.gameObject == Player){
battle = false;
}
}
function Update(){
var sphereCollider : SphereCollider = wildmonster.GetComponent(SphereCollider);
if (battle == true){
battletransform = transform.Find("Battle Object").transform;
}
if (battle == false){
battletransform = null;
}
}
for some reason it will only pick one of the instances of the enemy object, and not any of the others, regardless of which one is triggered. Sorry it's so long, Thank you!