- Home /
Return gameobject from a TriggerEvent.
so basicly i have an trigger collider on my player, and when i walk close to an enemy it checks if there is someting there and if its an enemy, but i'm having trouble returing the enemy's GameObject to use it in another script.
public class TriggerTest : MonoBehaviour {
public GameObject target;
void Start(){
}
void OnTriggerStay (Collider other)
{ if (other.tag == "Enemy"){
//Return the GameObject of the "other" here
//So it can be used in other code.
}
}
}
Answer by Owen-Reynolds · Mar 25, 2013 at 10:06 PM
You can't strictly return anything, since you're being called by the system. If you want a trigger to "go to" someone else, a few ways:
o Just put OnTrigger on the enemies -- a collider moving into a trigger will also call the collider's OnTrigger.
o Call the function from that other script: other.GetComponent().youRanATrigger();
o Set some vars that the other script will see: other.GetComponent().gotHit=true;
Oké so i choose to do the first way, but now i want to target the enemy who got the bool imInRange(the bool for being triggerd) enabled so i tried this code wich doesn't work.
public class Targetting : $$anonymous$$onoBehaviour {
public List<GameObject> targets;
public GameObject selectedTarget;
private TriggerTest Triggert;
// Use this for initialization
void Start () {
AddAllEnemies();
}
public void AddAllEnemies() {
GameObject[] go = GameObject.FindGameObjectsWithTag("Enemy");
foreach(GameObject enemy in go)
AddTarget(enemy.gameObject);
}
public void AddTarget(GameObject enemy) {
targets.Add(enemy);
}
public void ChooseTarget(){
foreach(GameObject enemy in targets){
Triggert = new TriggerTest();
if (Triggert.imInRange == true){
selectedTarget = enemy;
}
}
}
// Update is called once per frame
void Update () {
if (Input.Get$$anonymous$$eyDown($$anonymous$$eyCode.Q))
ChooseTarget();
}
}
Well, Triggert = new TriggerTest(); if (Triggert.imInRange == true)
isn't going to do anything useful, checking if something values of something you just made.
$$anonymous$$ight be better to focus on something specific like "when I stand near an enemy, it takes damage" or something like that. Lots of already done examples here of those sorts of things.
I'm realy having a problem with it, for selecting the nearest object i have this code: ///
/// Target$$anonymous$$ob.cs /// Oct 20, 2010 /// Peter Laliberte /// /// This script can be attached to any permanent gameobject, and is responsible for allowing the player to target different mobs that are with in range /// using UnityEngine; using System.Collections; using System.Collections.Generic; public class Targetting : $$anonymous$$onoBehaviour {
public List<Transform> targets;
public Transform selectedTarget;
private Transform myTransform;
// Use this for initialization
void Start () {
targets = new List<Transform>();
selectedTarget = null;
myTransform = transform;
AddAllEnemies();
}
public void AddAllEnemies() {
GameObject[] go = GameObject.FindGameObjectsWithTag("Enemy");
foreach(GameObject enemy in go)
AddTarget(enemy.transform);
}
public void AddTarget(Transform enemy) {
targets.Add(enemy);
}
private void SortTargetsByDistance() {
targets.Sort(delegate(Transform t1, Transform t2) {
return Vector3.Distance(t1.position, myTransform.position).CompareTo(Vector3.Distance(t2.position, myTransform.position));
});
}
//if we do not have an enemy targeted ywt, then find the clostest one and target him
//if we do have an enemy targeted, then get the next target
//if we have the last target in the list, then get then first target in the list
private void TargetEnemy() {
if(selectedTarget == null) {
SortTargetsByDistance();
selectedTarget = targets[0];
}
else {
int index = targets.IndexOf(selectedTarget);
if(index < targets.Count - 1) {
index++;
}
else {
index = 0;
}
DeselectTarget();
selectedTarget = targets[index];
}
SelectTarget();
}
private void SelectTarget() {
selectedTarget.renderer.material.color = Color.red;
$$anonymous$$eleeAttack ma = ($$anonymous$$eleeAttack)GetComponent("$$anonymous$$eleeAttack");
ma.target = selectedTarget.gameObject;
}
private void DeselectTarget() {
selectedTarget.renderer.material.color = Color.white;
selectedTarget = null;
}
// Update is called once per frame
void Update () {
if(Input.Get$$anonymous$$eyDown($$anonymous$$eyCode.F)) {
TargetEnemy();
}
}
}
But now i want it to only select the nearest and cheack that every time i press the button
That's a completely different question. But look at the TargetEnemy part. It shows you how to get the closest.
Your answer
Follow this Question
Related Questions
Get object that triggered an object 1 Answer
Trigger not getting GameObject 2 Answers
I need help with triggers 1 Answer
Work around for onTriggerStay? 1 Answer