- 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.