- Home /
How can i call this void once
Hey so im trying to do so when a enemy come within a defend radius it will call my DoDefend() but because its under update it will call it all the time instead of once how can i do that? my script is simple
if (currentTargetDistance < _defendRadius)
{
DoDefend();
}
Answer by sacredgeometry · Jan 05, 2020 at 05:47 PM
private bool _isDefending = false;
public void Update()
{
if(!_isDefending && currentTargetDistance < _defendRadius)
{
_isDefending = true;
DoDefend();
}
}
The most straightforward way would be to use a bool to keep a track of its state like this.
Answer by IINovaII · Jan 05, 2020 at 05:49 PM
There are two ways you can do this that I can think of from top of my head.
Method 1
You can use bool or enums to keep track of the state. Enums are cleaner way to do this but for simplicity sake I'll use bool instead.
private bool _isDefending = false;
void Update(){
if(currentTargetDistance < _defendRadius){
if(!_isDefending){
DoDefend();
_isDefending = true;
}
}else{
_isDefending = false;
}
}
Method 2
This methods involves using of colliders. Add a sphere collider on the same object as the script with the DoDefend()
function and set it to trigger. Within that script, add the function OnTriggerEnter(Collider collider)
. It's a built-in method which fire up when something enters the collider and it's only fired once and won't be triggered by the same game object until it leaves the collider.
Then add the function OnTriggerExit(Collider collider) which is only a built-in method which works the same way as OnTriggerEnter(Collider collider)
but this one triggers when something leaves the collider instead.
OnTriggerExit Link
For this to work, the game objects must have rigidbody attached to them.
Your answer
Follow this Question
Related Questions
Destroying projectile on collision with every object. 1 Answer
Need Help Limiting Rotation on Object's X axis 1 Answer
Mario first person game, help? 1 Answer
Canduct and movement of an enemy 0 Answers
Enemy AI passing through walls 1 Answer