So im writing this at 2 am and im four melatonin gummies deep buttttttt Im writing my first interaction system, where the player can interact with objects. I know there are a lot of solutions out there, but I wanted tot ry out my own. Basically this is how it works. I have a parent class called Interactable, which has a public Collider, and a virtual function called RunInteract(), as well as an OnTriggerStay() override. Then any of my objects, for example, DoorController, inherit from Intractable. When the player enters the trigger of an object that inherits from interactable, the OnTriggerStay() function checks if the main camera is looking at the objects Collider, (which has a public reference mentioned at the beginning) via a raycast, if this raycast hits the collider, then this means that the player is both within the trigger and looking at the object. My player class has a shared instance, and a method that sets the current Interactable object. This method, Player.Instance.SetCurrentInterableObject(Interactable i) gets called from the Interactable object that determined the player was looking at it. Finally if the user hits the interact button, then the player class calls the method on the current interact object, currentInteractable.RunInteract() which calls the virtual method described in the beggining, which all of my doors, and tables etc. will override. Seems pretty complicated, but the only real cost I see if a ray cast per frame. Lmk what you guys think.