- Home /
How to make events only trigger for specific object?
To put it short, for my game, I am trying to implement environmental interactions where attacks of a certain type will have special interactions with objects of certain types if they collide (for example, Fire attacks would melt ice objects, cursed attacks would corrupt magic objects, etc.). In trying to do this, I stumbled upon events and thought creating an event manager for this type of situation would be a smart way to handle these interactions. The one thing is that as I am new to them, I haven't been able to figure out how to go about doing this so that only the objects my attack collides with would have this interactions instead of every object of the same type that contains the script. For example, the scripts posted below are supposed to destroy the object that are hit by a projectile. However, if I duplicate the object, it will get destroyed if the other one gets destroyed, even if it isn't hit. How would I go about making sure this doesn't happen. Apologies for the long question and my inexperience in this subject. Thank you! Event Script:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EventManager : MonoBehaviour
{
public static EventManager current;
private void Awake()
{
current = this;
}
public event Action onEnvironmentTriggerInteract;
public void EnvironmentTriggerInteract()
{
if(onEnvironmentTriggerInteract != null)
{
Debug.Log("EventManager");
onEnvironmentTriggerInteract();
}
}
}
Script for destroying object:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InteractScript : MonoBehaviour
{
private void Start()
{
EventManager.current.onEnvironmentTriggerInteract += OnEnvironmentInteract;
}
private void OnEnvironmentInteract()
{
Debug.Log("InteractScript");
Destroy(this.gameObject);
}
}
Script for triggering event:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TriggerArea : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
EventManager.current.EnvironmentTriggerInteract();
}
}