JojikYT

Interactor

Jan 26th, 2023
2,216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.14 KB | Source Code | 0 0
  1. using UnityEngine.InputSystem;
  2. using UnityEngine;
  3. using System;
  4.  
  5. public class Interactor : MonoBehaviour
  6. {
  7.     [SerializeField] float maxInteractingDistance = 10;
  8.     [SerializeField] float interactingRadius = 1;
  9.  
  10.     LayerMask layerMask;
  11.     Transform cameraTransform;
  12.     InputAction interactAction;
  13.    
  14.     //For Gizmo
  15.     Vector3 origin;
  16.     Vector3 direction;
  17.     Vector3 hitPosition;
  18.     float hitDistance;
  19.  
  20.     [HideInInspector] public Interactable interactableTarget;
  21.  
  22.     // Start is called before the first frame update
  23.     void Start()
  24.     {
  25.         cameraTransform = Camera.main.transform;
  26.         layerMask = LayerMask.GetMask("Interactable","Enemy","NPC");
  27.  
  28.         interactAction = GetComponent<PlayerInput>().actions["Interact"];
  29.         interactAction.performed += Interact;
  30.     }
  31.     // Update is called once per frame
  32.     void Update()
  33.     {
  34.         direction = cameraTransform.forward;
  35.         origin = cameraTransform.position;
  36.         RaycastHit hit;
  37.  
  38.         if (Physics.SphereCast(origin, interactingRadius, direction, out hit, maxInteractingDistance, layerMask))
  39.         {
  40.             hitPosition = hit.point;
  41.             hitDistance = hit.distance;
  42.             if(hit.transform.TryGetComponent<Interactable>(out interactableTarget))
  43.             {
  44.                 interactableTarget.TargetOn();
  45.             }
  46.         }
  47.         else if (interactableTarget)
  48.         {
  49.             interactableTarget.TargetOff();
  50.             interactableTarget = null;
  51.         }
  52.     }
  53.     private void Interact(InputAction.CallbackContext obj)
  54.     {
  55.         if (interactableTarget != null)
  56.         {
  57.             if (Vector3.Distance(transform.position,interactableTarget.transform.position)<= interactableTarget.interactionDistance)
  58.             {
  59.                 interactableTarget.Interact();
  60.             }
  61.         }
  62.         else
  63.         {
  64.             print("nothing to interact!");
  65.         }
  66.     }
  67.     private void OnDrawGizmos()
  68.     {
  69.         Gizmos.color = Color.green;
  70.         Gizmos.DrawLine(origin,origin+direction * hitDistance);
  71.         Gizmos.DrawWireSphere(hitPosition, interactingRadius);
  72.     }
  73.     private void OnDestroy()
  74.     {
  75.         interactAction.performed -= Interact;
  76.     }
  77. }
  78.  
Advertisement
Add Comment
Please, Sign In to add comment