void CheckInteractable() { var ray = GameDataManager.MainCamera.ScreenPointToRay(Input.mousePosition); RaycastHit hit; MonoInteractable obj = null; if (Physics.Raycast(ray, out hit)) { var dist = hit.collider.transform.position - this.transform.position; if (dist.sqrMagnitude < interactableDistance * interactableDistance && !EventSystem.current.IsPointerOverGameObject()) { obj = hit.collider.GetComponentInParent <MonoInteractable>(); } } if (obj == currentObj) { return; } if (obj == null && currentObj != null && currentObj.IsInteracting) { currentObj.StopInteracting(); } currentObj = obj; }
void Awake() { _rb = GetComponent <Rigidbody>(); _interact = GetComponent <MonoInteractable>(); _coinSound = gameObject.AddComponent <StudioEventEmitter>(); _coinSound.Event = "event:/coin"; }
void OnTriggerExit(Collider other) { if (LayerMaskUtil.GetLayerMask(MyLayers.Interactable).Contains(other.gameObject.layer)) { if (other.GetComponent <MonoInteractable>() == currentInteractable) { currentInteractable = null; EventBus.Post(new InteractableChangedEvent()); } } }
void OnTriggerEnter(Collider other) { if (LayerMaskUtil.GetLayerMask(MyLayers.Interactable).Contains(other.gameObject.layer)) { var interactble = other.gameObject.GetComponent <MonoInteractable>(); if (interactble && interactble.enabled) { currentInteractable = interactble; EventBus.Post(new InteractableChangedEvent()); } } }
public void StandMissionStart() { disableControlCount.Add(MonoStandMission.CTRL_KEY); currentInteractable = null; EventBus.Post(new InteractableChangedEvent()); }
void FixedUpdate() { var vel = _rb.velocity; var input = InputUtil.Player; if (input == null || !GameContext.Instance || !GameContext.Instance.mainCamera) { return; } if (dead || disableControlCount.Count > 0) { vel.x = vel.z = 0f; _rb.velocity = vel; return; } var mainCamera = GameContext.Instance.mainCamera.transform; var xz = new Vector2(vel.x, vel.z); var fwd = mainCamera.forward; fwd.y = 0; fwd = fwd.normalized; var right = new Vector3(fwd.z, 0, -fwd.x); var targetDir3 = (right * input.GetAxis(InputUtil.AxisX)) + (fwd * input.GetAxis(InputUtil.AxisY)); Vector2 targetDir = new Vector2(targetDir3.x, targetDir3.z); float acc, targetSpeed; if (targetDir.sqrMagnitude > .1f) { targetDir = targetDir.normalized; // xz = targetDir * Vector2.Dot(xz, targetDir); acc = moveAcc; targetSpeed = moveSpeed; } else { targetDir = xz; acc = moveDeacc; targetSpeed = .0f; } var curSpeed = xz.magnitude; var newSpeed = Mathf.MoveTowards(curSpeed, targetSpeed, acc * Time.deltaTime); if (targetDir.sqrMagnitude > .1f) { var newVelXZ = newSpeed * targetDir.normalized; _rb.velocity = new Vector3(newVelXZ.x, vel.y, newVelXZ.y); } if (!(currentInteractable is null) && (!currentInteractable || !currentInteractable.isActiveAndEnabled)) { currentInteractable = null; EventBus.Post(new InteractableChangedEvent()); } }