- Home /
Triggers and SendMessages. C#
I am a bit confused about the SendMessages a bit. So I created a little example mock up level to learn about it and mess with it a bit more. I am using C# to write these scripts and I am a bit lost. I have two objects. One is the player who has a flashlight attached to him (The Light holds the script to turn the light on and off) and there is a collection trigger in front of him. I made it work so if the player hits the trigger it will send a message to the light to turn it off for a given amount of time. Here are my two scripts.
Trigger.cs:
using UnityEngine;
using System.Collections;
public class Trigger : MonoBehaviour {
void OnTriggerEnter(Collider col){
if(col.gameObject.tag == "Player"){
gameObject.Find("Light").SendMessage("blinkingDelay", 5.0f);
}
}
}
And here is the flashlight.
Flashlight.cs
using UnityEngine;
using System.Collections;
public class Flashlight : MonoBehaviour {
public bool power = true;
// Update is called once per frame
public IEnumerator blinkingDelay(float holdamount){
power = false;
yield return new WaitForSeconds(holdamount);
power = true;
}
}
Now I know in order to use yield I have to call the function with: StartCoroutine. But How do I do this with SendMessage?
The error I get btw is this: "sendmessage blinkingDelay has no receiver"
Answer by jogidipen · May 29, 2013 at 08:42 AM
To use SendMessage() you need to Apply Flashlight.cs script on game object named "Light". And inside Trigger.cs that shoud be GameObject.Find("Light").SendMessage("blinkingDelay", 5.0f);
not gameObject.Find("Light").SendMessage("blinkingDelay", 5.0f);
Answer by WelRC · Jun 20, 2013 at 01:49 AM
I try to avoid SendMessage whenever possible. I don't have Pro version, so I didn't profile my scripts to actually compare then with direct calls.
You can use StartCoroutine(GameObject.Find("Light").GetComponent().blinkingDelay(5.0f));
Send$$anonymous$$essage is fine for events just not suggested for ever frame flow control. Your GameObject.Find is very expensive...
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Having trouble swapping GameObjects on button click 1 Answer
Getting nullreference error while using sendmessage 1 Answer
Distribute terrain in zones 3 Answers