/// <summary> /// 플레이어와 드론간 거리 계산 /// </summary> void CalcDistance() { if (!IngameCanvasManager.instance.isIngameScene) { return; } // 거리 계산 controlDistanceGauge.fillAmount = Vector3.Distance(transform.position, drone.transform.position) / currentDroneControlMaxDistance; distText.text = (controlDistanceGauge.fillAmount * currentDroneControlMaxDistance).ToString("000") + " M"; // 문자 색상 if (controlDistanceGauge.fillAmount >= 1.0f) { distText.color = Color.red; } else if (controlDistanceGauge.fillAmount > 0.7) { distText.color = new Color(1f, 0.5f, 0f); } else { distText.color = Color.white; } if ((dm.GetStatus() != DroneStatus.Recall && dm.GetStatus() != DroneStatus.Landing && dm.GetStatus() != DroneStatus.Rest) && PlayerPrefsData.instance.isTutorialFinish == 1 && Vector3.Distance(transform.position, drone.transform.position) > currentDroneControlMaxDistance ) { status = PlayerStatus.Trouble; dm.SetStatus(DroneStatus.Trouble); // 메시지 IngameCanvasManager.instance.OpenNoticeMessage("플레이어와 거리가 너무 멉니다.", 3.0f); } }
/// <summary> /// 대화 시작 여부를 판단 및 진행 /// </summary> public void TalkSystem() { // 대화 중에는 x, UI 상호작용 중이라면 X if (TalkManager.instance.talking || IngameCanvasManager.instance.isCanvasOn) { return; } //if (InputDeviceChecker.instance.Interact() && InteractiveTarget != null) if (InputDeviceChecker.instance.Interact() && !isInteractBtnDown) { isInteractBtnDown = true; // 대화 상대가 있다면 대화 시작 if (InteractiveTarget != null) { if (!InteractiveTarget.CompareTag("Portal") && dm.GetStatus() == DroneStatus.Control) { // 상태 대화중으로 변경 dm.SetStatus(DroneStatus.Talk); // 대상 NPC에 상호작용 시작 시그널 전달 InteractiveTarget.GetComponent <NPCInteractiveController>().InteractiveStart(gameObject); // 기체 기울어짐 등 회복 dm.DirectDroneRecoverMoment(transform.eulerAngles.y); // 상하 움직임 초기화 dm.MovementUpDown(true); } // 대화 종료 else if (dm.GetStatus() == DroneStatus.Talk) { // 상태 조종중으로 변경 dm.SetStatus(DroneStatus.Control); // 대상 NPC에 상호작용 종료 시그널 전달 InteractiveTarget.gameObject.GetComponent <NPCInteractiveController>().InteractiveStop(); } } // 상호작용 상대가 없다면. Ingame UI 메뉴 탭 활성화 else if (dm.GetStatus() == DroneStatus.Control || dm.GetStatus() == DroneStatus.Landing || dm.GetStatus() == DroneStatus.Rest) { // 예기치 못한 동작이 불가하도록 일괄 상태 변경 // 탭을 닫을 때 최신 시점 정보를 토대로 시점 셋팅 PlayerController.instance.setStatus(PlayerStatus.Talk); PlayerController.instance.dm.SetStatus(DroneStatus.Talk); // 기체 기울어짐 등 회복 dm.DirectDroneRecoverMoment(transform.eulerAngles.y); // 상하 움직임 초기화 dm.MovementUpDown(true); Input.ResetInputAxes(); // 버튼 입력 초기화 IngameCanvasManager.instance.MenuTab(true); print("Drone Menu tab open request"); } } //else if(Input.GetButtonUp("Interact")) else if (InputDeviceChecker.instance.InteractUp()) { isInteractBtnDown = false; } }