コード例 #1
0
    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);
        }
    }
コード例 #2
0
 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);
     }
 }