Вот тут я уже запутался: От этого класса наследуешь под каждый тип триггера данные. В абстрактном классе можешь оставить enum InteractType, тип взаимодействия.
public class Hero : MonoBehaviour { private void OnTriggerEnter(Collider other) { var iterObject = other.GetComponent<IInteractable>(); if (iterObject != null) iterObject.Interact(new InteractData() { LogMessage = "I INTERACTED" });
} }
public enum InteractResult { Failed, Ok } public interface IInteractable { InteractResult Interact(InteractData data); }
public class InteractData { public string LogMessage { get; set; } //общие данные для всех интерактивных объектов }
public class Door : IInteractable { public InteractResult Interact(InteractData data) { var doorInteractData = data as DoorInteractData; if (doorInteractData.OpenSpeed <= 0) return InteractResult.Failed; Debug.Log(data.LogMessage, this); Open(doorInteractData.OpenSpeed); return InteractResult.Ok; }
private void Open(float speed) { }
public class DoorInteractData : InteractData { public float OpenSpeed { get; set; } } }