IEnumerator LockCheck() { gateLocks = Physics.OverlapSphere(myTr.position, 5f, lockLayer); if (gateLocks.Length >= 1) { float closestSqr = Mathf.Infinity; //가장 가까운 거리 Transform closestTarget = null; //가장 가까운 타겟 float targetDist; //자신과 타겟과의 거리 for (int i = 0; i < gateLocks.Length; i++) //검색 { Vector3 objectPos = gateLocks[i].transform.position; //찾은 타겟의 포지션 targetDist = (objectPos - myTr.position).sqrMagnitude; //자신과 새 타겟과의 현재 거리 if (targetDist < closestSqr) //새 타겟과의 현재 거리가 기존 타겟보다 가까우면 { closestSqr = targetDist; //현재 거리가 가장 가까운 거리가 됨 closestTarget = gateLocks[i].transform; //가장 가까운 타겟은 지금 거리계산한 타겟 } } targetTr = closestTarget.transform; //타겟은 가장 가까운 타겟 if (targetTr.CompareTag("PC")) { hackingPC = targetTr.GetComponent <HackingPC>(); } else { gateAccess = targetTr.GetComponent <GateAccess>(); } yield return(StartCoroutine(HackingStart())); } else { print("해킹대상 없음"); currentState = CurrentState.hackingOff; isHacking = false; droneManager.currState = DroneManager.CurrentState.idle; StartCoroutine(droneManager.SwitchUtile()); yield return(null); } }
IEnumerator BarrierOff() { while (barrierTr.gameObject.activeSelf) { barrierTr.localScale = Vector3.Lerp(barrierTr.localScale , barrierTr.localScale * 0f , Time.deltaTime * dampSpeed); if (barrierTr.localScale.y <= 0.1f) { barrierTr.gameObject.SetActive(false); isBarrier = false; droneManager.currState = DroneManager.CurrentState.idle; StartCoroutine(droneManager.SwitchUtile()); currTime = 0f; //시간 초기화 } yield return(null); } }