void Start()
 {
     // 플레이어 오브젝트 초기화
     rikoController    = FindObjectOfType <RikoController>();
     regController     = FindObjectOfType <RegController>();
     nanachiController = FindObjectOfType <NanachiController>();
     playerCamera      = CameraControl.GetInstance();
     playerCamera.ChangePlayerObject(rikoController.gameObject);
 }
Esempio n. 2
0
    private void MakeRayAndDetectObject()
    {
        RikoController riko = playerManager.GetRiko();

        ray = new Ray(new Vector3(riko.transform.position.x, riko.transform.position.y + 1.0f, riko.transform.position.z),
                      new Vector3(Mathf.Sin(transform.parent.eulerAngles.y * Mathf.PI / 180f), -Mathf.Tan(transform.parent.eulerAngles.x * Mathf.PI / 180f), Mathf.Cos(transform.parent.eulerAngles.y * Mathf.PI / 180f)));
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit))
        {
            if (!hit.transform.CompareTag("Floor") && !hit.transform.CompareTag("Player"))
            {
                detectedObject = hit.transform.gameObject;
                float averageScale = (hit.transform.localScale.x + hit.transform.localScale.y + hit.transform.localScale.z) / 3f;
                // 플레이어로 부터 물체까지의 거리 + a
                float DistanceA = Vector3.Distance(riko.transform.position, hit.transform.position) - averageScale;
                // 플레이어로부터 크로스헤어까지의 거리
                float DistanceB = Vector3.Distance(riko.transform.position, transform.position);

                if (Mathf.Abs(DistanceA - DistanceB) < RANGE_ERROR)
                {
                }
                else if (DistanceA > DistanceB && transform.localPosition.z < MAX_RANGE)
                {
                    transform.Translate(0f, 0f, RANGE_ERROR);
                    //transform.Translate(0f, 0f, DistanceA - DistanceB);
                }
                else if (transform.localPosition.z >= MIN_RANGE)
                {
                    transform.Translate(0f, 0f, -(DistanceB - DistanceA));
                }
            }
            else if (hit.transform.CompareTag("Floor"))
            {
                detectedObject = null;
                float tan = Mathf.Tan((90f - transform.parent.transform.eulerAngles.x) * Mathf.PI / 180f);

                if (Mathf.Abs(tan - transform.localPosition.z) < RANGE_ERROR)
                {
                }
                else if (tan > transform.localPosition.z &&
                         transform.localPosition.z < MAX_RANGE)
                {
                    transform.Translate(0f, 0f, RANGE_ERROR);
                }
                else if (transform.localPosition.z >= MIN_RANGE && tan < MAX_RANGE)
                {
                    transform.Translate(0f, 0f, -(transform.localPosition.z - tan));
                }
            }
        } // 감지되지 않은 경우
        else if (transform.localPosition.z < MAX_RANGE)
        {
            detectedObject = null;
            transform.Translate(0f, 0f, 0.3f);
        }
    }
 void OnTriggerExit(Collider col)
 {
     if (col.gameObject.CompareTag("Player"))
     {
         Debug.Log("Exit");
         RikoController playerControl = weaponManager.GetPlayerControl();
         playerControl.RemoveAroundWeapon(gameObject);
     }
 }