Beispiel #1
0
 public void SetWalkVector(Vector3 new_walkTarget, float baseSpeed)
 {
     //mozna zakomentowac ten warunek i wtedy kazdy NPC bedzie w trakcie ruchu aktualizowac sobie trase co kazdy thinking time, bedzie mniej optymalnie, ale nie bedzie "potkniec" w ich ruchu na koncach grida
     if (corvoPathFinder != null && ((_walkTarget - new_walkTarget).magnitude > 0.01f || (!corvoPathFinder.havePath() && !corvoPathFinder.isCalculating())))
     {
         _walkTarget        = new_walkTarget;
         _isWalkTargetSet   = true;
         _distanceCalcTimer = 0;
         _lastDistance      = Vector3.Distance(_walkTarget, _wholeNPC.transform.position);
         CorrectGrid();
         _wholeNPC.SetWalkSpeedAnim(baseSpeed);
         _lookDirection   = Quaternion.LookRotation(_walkTarget - _wholeNPC.transform.position, _wholeNPC.transform.up);
         pathFinder.speed = baseSpeed;
         pathFinder.goTo(_walkTarget);
     }
 }
Beispiel #2
0
    void SetTargetPosition()
    {
        //Plane plane = new Plane(Vector3.up, transform.position);
        RaycastHit hit;
        Ray        rayFromCamera = Camera.main.ScreenPointToRay(Input.mousePosition);

        //float point = 0f;

        if (true == (Physics.Raycast(rayFromCamera.origin, rayFromCamera.direction * 10, out hit)))
        {
            Vector3    gridPoint           = Vector3Util.GridVector(hit.point); // 이동해야할 위치의 x, z좌표
            Collider   selectedObjCollider = hit.collider;
            GameObject obj = hit.collider.gameObject;

            gridPosition = gridPoint;

            {
                int j = 1;
                for (int i = 0; i < 10; i++)
                {
                    Ray rayDown = new Ray(gridPoint + Vector3.up * j / 2, Vector3.down * j);

                    if (selectedObjCollider.Raycast(rayDown, out hit, j))
                    //if (Physics.Raycast(rayDown, out hit)) // 위로 광선을 쐈는데 터치된 오브젝트에 닿음
                    {
                        targetPosition = hit.point;
                    }


                    j *= 2;
                }
            }

            Vector3 a = targetPosition;

            if (!pathFindingTest)
            {
                unitPathFinder.goTo(targetPosition);
            }
            else
            {
                GetComponent <CorvoPathFinder>().findPath(targetPosition);
            }
        }
    }