示例#1
0
    void InclineForce()
    {
        Ray ray = new Ray(transform.position, -Vector3.up);

        //---------debug normal vector ----------
        Debug.DrawRay(ray.origin, ray.direction, Color.black);

        //--------------------------get inclineAngle--------------------
        if (Physics.Raycast(ray, out inclineHit, 2))
        {
            //---------debug normal vector ----------
            Debug.DrawRay(inclineHit.point, inclineHit.normal * 5, Color.blue);

            inclineAngle = Vector3.Angle(-ray.direction, inclineHit.normal);
            if (isDebugMessage)
            {
                print("inclineAngle = " + inclineAngle);
            }
            if (inclineAngle == 0)
            {
                //------------判別是否在斜坡上按右鍵,如果有開啟修正---------------
                if (inclinedirection != InclineDirection.level && isMouseRButton)
                {
                    isInclineRight = true;
                }
                //-----------------------------------------------------------
                inclinedirection = InclineDirection.level;
                inclineForce     = 0;
                return;
            }
            //------------判別是否在平地上按右鍵,如果有開啟修正---------------
            else
            if (inclinedirection == InclineDirection.level && isMouseRButton)
            {
                isLevelRight = true;
            }
            //-----------------------------------------------------------
        }
        //----------------------------------------------------------------
        ray = new Ray(transform.position - new Vector3(0, 0.4f, 0), transform.TransformDirection(Vector3.forward));
        Debug.DrawRay(ray.origin, ray.direction, Color.yellow);

        //--------------------------handle negative incline---------------------------------------
        if (Physics.Raycast(ray, out inclineHit, 1) && inclineHit.collider.tag == "Finish")
        {
            inclinedirection = InclineDirection.negative;
            inclineForce     = -GretaWeight *gravity *Mathf.Sin(inclineAngle *Mathf.PI / 180) / 1000;

            return;
        }
        //--------------------------handle positive incline---------------------------------------
        else if (Physics.Raycast(ray.origin, -ray.direction, out inclineHit, 1) && inclineHit.collider.tag == "Finish")
        {
            Debug.DrawRay(ray.origin, -ray.direction, Color.yellow);
            inclinedirection = InclineDirection.positive;
            inclineForce     = GretaWeight * gravity * Mathf.Sin(inclineAngle * Mathf.PI / 180) / 1000;
        }
    }
示例#2
0
    void InclineForce()
    {
        Ray ray = new Ray(transform.position, -Vector3.up);
        //---------debug normal vector ----------
        Debug.DrawRay(ray.origin, ray.direction, Color.black);

        //--------------------------get inclineAngle--------------------
        if (Physics.Raycast(ray, out inclineHit, 2))
        {
            //---------debug normal vector ----------
            Debug.DrawRay(inclineHit.point, inclineHit.normal * 5, Color.blue);

            inclineAngle = Vector3.Angle(-ray.direction, inclineHit.normal);
            if (isDebugMessage)
                print("inclineAngle = " + inclineAngle);
            if (inclineAngle == 0)
            {
                //------------�P�O�O�_�b�שY�W���k��A�p�G���}�ҭץ�---------------
                if (inclinedirection != InclineDirection.level && isMouseRButton)
                    isInclineRight = true;
                //-----------------------------------------------------------
                inclinedirection = InclineDirection.level;
                inclineForce = 0;
                return;
            }
            //------------�P�O�O�_�b���a�W���k��A�p�G���}�ҭץ�---------------
            else
                if (inclinedirection == InclineDirection.level && isMouseRButton)
                    isLevelRight = true;
            //-----------------------------------------------------------
        }
        //----------------------------------------------------------------
        ray = new Ray(transform.position - new Vector3(0, 0.4f, 0), transform.TransformDirection(Vector3.forward));
        Debug.DrawRay(ray.origin, ray.direction, Color.yellow);

        //--------------------------handle negative incline---------------------------------------
        if (Physics.Raycast(ray, out inclineHit, 1) && inclineHit.collider.tag == "Finish")
        {
            inclinedirection = InclineDirection.negative;
            inclineForce = -GretaWeight * gravity * Mathf.Sin(inclineAngle * Mathf.PI / 180) / 1000;
            return;
        }
        //--------------------------handle positive incline---------------------------------------
        else if (Physics.Raycast(ray.origin, -ray.direction, out inclineHit, 1) && inclineHit.collider.tag == "Finish")
        {
            Debug.DrawRay(ray.origin, -ray.direction, Color.yellow);
            inclinedirection = InclineDirection.positive;
            inclineForce = GretaWeight * gravity * Mathf.Sin(inclineAngle * Mathf.PI / 180) / 1000;
        }
    }