コード例 #1
0
    void ProcessMovement()
    {
        if (!CanMove)
        {
            return;
        }

        //// TEST FOR JOYSTICKS
        //Vector3 dirr = Vector3.zero;
        //int pi = GetComponent<MouseInputReceiver>().PlayerID;
        //dirr.x = Input.GetAxis(string.Format("p{0}_MoveX", pi+1));
        //dirr.y = Input.GetAxis(string.Format("p{0}_MoveY", pi+1));
        //dirr.Normalize();
        //if (dirr.magnitude > .1f)
        //{
        //    Move(dirr);
        //    _isRunning = true;
        //}
        //else
        //{
        //    _isRunning = false;
        //    _rb.velocity = Vector3.zero;
        //}
        //return;

        // Setup Raycast
        Vector3 playerScreenPos = Camera.main.WorldToScreenPoint(transform.position);
        //Debug.Log(playerPos + " " + _input.GetMousePosition());
        Ray   ray = Camera.main.ScreenPointToRay(_input.GetMousePosition() + playerScreenPos);
        float hit;

        if (_plane.Raycast(ray, out hit))
        {
            Vector3 point = ray.GetPoint(hit);
            //Debug.Log(point - new Vector3(_transf.position.x, 0, _transf.position.z));
            // Move
            Vector3 dir = point - new Vector3(_transf.position.x, 0, _transf.position.z);
            if (dir.magnitude > CursorStopDistance)
            {
                Vector3 newPlayerScreenPos = Camera.main.WorldToScreenPoint(transform.position + (_rb.velocity * Time.fixedDeltaTime));
                _input.OffsetMousePosition(-(new Vector2(newPlayerScreenPos.x, newPlayerScreenPos.y) - new Vector2(playerScreenPos.x, playerScreenPos.y)));
                Move(dir);
                _isRunning = true;
            }
            else
            {
                _rb.velocity = Vector3.zero;
                _isRunning   = false;
            }
        }
    }