private void OnCollisionEnter2D(Collision2D other) { // Get IIntractable IIntractable otherIntractable = other.gameObject.GetComponent <IIntractable>(); // Interact with the object if can otherIntractable?.InteractWith(gameObject); }
public void Interact() { RaycastHit2D[] hitColliders = Physics2D.BoxCastAll(this.transform.position, new Vector2(1.5f, 1.5f), 0f, Vector2.zero); if (hitColliders.Length > 1 && !IsInteracting) { foreach (RaycastHit2D collision in hitColliders) { if (collision.collider != null) { IsInteracting = true; target = collision.collider.GetComponent <IIntractable>(); } } } }
private void RaycastForInteractable() { RaycastHit result; Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out result, range)) { IIntractable intractable = result.collider.GetComponent <IIntractable>(); if (intractable != null) { if (result.distance <= intractable.MaxRange) { if (intractable == currentTarget) { return; } else if (currentTarget != null) { currentTarget.OnEndHover(); currentTarget = intractable; currentTarget.OnStartHover(); return; } else { currentTarget = intractable; currentTarget.OnStartHover(); return; } } else { if (currentTarget != null) { currentTarget.OnEndHover(); currentTarget = null; return; } } } else { if (currentTarget != null) { currentTarget.OnEndHover(); currentTarget = null; return; } } } else { if (currentTarget != null) { currentTarget.OnEndHover(); currentTarget = null; return; } } }