Limit OnTriggerEnter to work with only specific Child Object Colliders
Hey!
Trying to find out, if I can have "OnTriggerEnter" only trigger from a specific child Objects Collider, Seen the question asked a few times, and from what I've managed to read - is I should have the OnTriggerEnter script on the child, the problem is I've already hooked it into other things inside the script... And I'm still a novice, so re-working the entire thing to work across 2 scripts, seems like something I really want to avoid, so any help, would be super appreciated!
My Set-up, I have an Empty Object named "Player" - with a child Cube Object for the Player Model, an Empty Object for the Physical Collider (the size of the model, for Physics, etc), and another Empty Object for the "Interaction" Collider. On the Base / Parent Object (The "Player" Object) I have a script, that controls everything to do with my weapons, including an "OnTriggerEnter" portion, that registers if a weapon on the ground, is close enough to be picked up, if it's in range of my "Interaction" Collider, if the player moves too close to / on top of the weapon though, as soon as the Physics Collider leaves the range (even though the Object is still in range of my Interaction Collider) of the weapon, it registers as "not in range". So I need to make this interaction only happen with my Interaction Collider.... Sorry if this massive block of text has confused you all!
Below is the code controlling the TriggerEnter & TriggerExit. I understand why the problem is occuring (technically one collider did "exit" the range, but I have no idea how to fix it.... Any Help would be super appreciated! - Thank you in advance.
void OnTriggerEnter(Collider other)
{
if (other.gameObject.transform.root.gameObject.CompareTag("Pistol"))
{
weaponSelector = weaponTypePistol;
inRangeWeapon = other.gameObject.transform.root.gameObject;
weaponCanvasText.text = ("Press F to Pick up: " + (other.gameObject.transform.root.gameObject.tag.ToString()) + ".");
weaponCanvas.SetActive(true);
Debug.Log("Weapon " + weaponSelector + ", is in Range (" + other.gameObject.transform.root.gameObject.tag + ")");
}
if (other.gameObject.transform.root.gameObject.CompareTag("Machinegun"))
{
weaponSelector = weaponTypeMachinegun;
inRangeWeapon = other.gameObject.transform.root.gameObject;
weaponCanvasText.text = ("Press F to Pick up: " + (other.gameObject.transform.root.gameObject.tag.ToString()) + ".");
weaponCanvas.SetActive(true);
Debug.Log("Weapon " + weaponSelector + ", is in Range (" + other.gameObject.transform.root.gameObject.tag + ")");
}
if (other.gameObject.transform.root.gameObject.CompareTag("Shotgun"))
{
weaponSelector = weaponTypeShotgun;
inRangeWeapon = other.gameObject.transform.root.gameObject;
weaponCanvasText.text = ("Press F to Pick up: " + (other.gameObject.transform.root.gameObject.tag.ToString()) + ".");
weaponCanvas.SetActive(true);
Debug.Log("Weapon " + weaponSelector + ", is in Range (" + other.gameObject.transform.root.gameObject.tag + ")");
}
if (other.gameObject.transform.root.gameObject.CompareTag("Shuriken"))
{
weaponSelector = weaponTypeShuriken;
inRangeWeapon = other.gameObject.transform.root.gameObject;
weaponCanvasText.text = ("Press F to Pick up: " + (other.gameObject.transform.root.gameObject.tag.ToString()) + ".");
weaponCanvas.SetActive(true);
Debug.Log("Weapon " + weaponSelector + ", is in Range (" + other.gameObject.transform.root.gameObject.tag + ")");
}
}
void OnTriggerExit(Collider other)
{
weaponSelector = 0;
weaponCanvas.SetActive(false);
weaponCanvasText.text = ("");
WeaponCanvasButtons.SetActive(false);
Debug.Log("Moved Out of Weapon Range");
}
Your answer
Follow this Question
Related Questions
3D Trigger collider slows player moved by forces 0 Answers
onTriggerEnter returns wrong object's attribute 1 Answer
multiple objects with triggers that need to ignore the triggers but still collide with eachother? 0 Answers
two colliding objects effect a third object 1 Answer
Trying to get controller to trigger OnTriggerEnter, no avail 0 Answers