- Home /
Accesing Player colliderhit with other gameobject?
I want to play an audio from the woodAudio array when the player collides with the Wood tag. Why is this not working?
Keep in mind that I use the script on an empty gameobject which doesnt DestroyOnLoad and that controls the player scripts because I need the variable values in other scenes as well.
So I need the empty gameobject to see if the player collides with the wood tag, and then plays the audio from the array. Can someone help me out?
var woodAudio : AudioClip[];
function Start() {
var player = GameObject.Find("Player");
}
function OnControllerColliderHit(player : ControllerColliderHit) {
if(player.collider.gameObject.tag == "Wood" && Input.GetKey("w")) {
WalkWood();
}
}
function WalkWood() {
audio.clip = woodAudio[Random.Range(0, woodAudio.length)];
Camera.main.audio.Play();
audio.volume = 0.3;
}
Answer by AlucardJay · Mar 24, 2013 at 02:11 PM
So this script controls the player but is not actually attached to the player? "Keep in mind that I use the script on an empty gameobject which doesnt DestroyOnLoad and that controls the player scripts"
OnControllerColliderHit is when this script is attached to a gameObject with the Character Controller component.
"OnControllerColliderHit is called when the controller hits a collider .... "
No character controller component, no hit.
Edit : The problem is the OnControllerColliderHit event is never happening. This can be proven with a simple debug :
function OnControllerColliderHit(player : ControllerColliderHit) {
Debug.Log( "Yay the OnControllerColliderHit event just happened !" );
// ....
Answer by Negagames · Mar 24, 2013 at 02:11 PM
Try changing
player.collider.gameObject.tag
to
player.gameObject.tag
nope, the problem is not the syntax, the problem is the OnControllerColliderHit event is never happening. This can be proven with a simple debug :
function OnControllerColliderHit(player : ControllerColliderHit) {
Debug.Log( "Yay the OnControllerColliderHit event just happened !" );
// ....
Actually, you do raise a very interesting point that I just noticed. The OP is using the same variable name in 2 different places for 2 different things.
In the Start :
var player = GameObject.Find("Player");
This is a local variable, so as soon as the Start function is over, this is thrown away and never used.
In the Collider event :
function OnControllerColliderHit(player : ControllerColliderHit) {
What is the thinking here ??!!
Now back to my first comment here .... check the Unity Scripting Reference : http://docs.unity3d.com/Documentation/ScriptReference/CharacterController.OnControllerColliderHit.html
function OnControllerColliderHit (hit : ControllerColliderHit) {
var body : Rigidbody = hit.collider.attachedRigidbody;
this is the given example. The hit, the collider of that hit, the attachedRigidbody that the collider is attached to. So I'm just saying, the event is never triggered.
Your answer
![](https://koobas.hobune.stream/wayback/20220613095006im_/https://answers.unity.com/themes/thub/images/avi.jpg)