コード例 #1
0
    // Use this for initialization
    void Start()
    {
        animController = GameObject.Find("Player").GetComponent <AnimController>();
        player         = GameObject.Find("Player");
        cam            = Camera.main;
        hspeed         = 6;
        gravityDir     = animController.getGravityDir();
        vspeed         = .3f * Physics.gravity.magnitude;
        gravAccel      = .5f * -Physics.gravity.magnitude;
        camAngleX      = cam.transform.eulerAngles.x;
        camAngleY      = cam.transform.eulerAngles.y;
        camAngleZ      = cam.transform.eulerAngles.z;

        /*camAngleX = player.transform.eulerAngles.x;
        *  camAngleY = player.transform.eulerAngles.y;
        *  camAngleZ = player.transform.eulerAngles.z;*/
        transform.localEulerAngles = new Vector3(camAngleX, camAngleY, camAngleZ);
        if (gravityDir == AnimController.gravityDirection.DOWN)
        {
            transform.position = new Vector3(player.transform.position.x, player.transform.position.y + 1, player.transform.position.z);
        }
        else if (gravityDir == AnimController.gravityDirection.UP)
        {
            transform.position = new Vector3(player.transform.position.x, player.transform.position.y - 1, player.transform.position.z);
        }
        else if (gravityDir == AnimController.gravityDirection.LEFT)
        {
            transform.position = new Vector3(player.transform.position.x + 1, player.transform.position.y, player.transform.position.z);
        }
        else if (gravityDir == AnimController.gravityDirection.UP)
        {
            transform.position = new Vector3(player.transform.position.x - 1, player.transform.position.y, player.transform.position.z);
        }
        lifetime = 5.0f;
        StartCoroutine(Countdown());
    }
コード例 #2
0
    // Update is called once per frame
    void LateUpdate()
    {
        if (animCtrl.getGravityDir() != gravityDir)
        {
            prevGravityDir = gravityDir;
            gravityDir     = animCtrl.getGravityDir();
            rotated        = false;
        }
        if (gravityDir == AnimController.gravityDirection.UP)
        {
            yOffset = InvertedGravityOffset;
            if (!rotated)
            {
                rotating = true;
                xangle   = Mathf.LerpAngle(xangle, -30, 3 * Time.deltaTime);
                yangle   = Mathf.LerpAngle(yangle, 0, 3 * Time.deltaTime);
                zangle   = Mathf.LerpAngle(zangle, 180, 3 * Time.deltaTime);

                //stop rotation when the character is upside down
                if (Mathf.Abs(-30 - xangle) < .1f && Mathf.Abs(0 - yangle) < .1f && Mathf.Abs(zangle - 180) < .1f)
                {
                    transform.eulerAngles = new Vector3(-30, 0, 180);
                    rotated  = true;
                    rotating = false;
                }
                else
                {
                    transform.eulerAngles = new Vector3(xangle, yangle, zangle);
                }
            }
        }
        else if (gravityDir == AnimController.gravityDirection.LEFT)
        {
            yOffset = leftGravityOffset;
            if (!rotated)
            {
                rotating = true;
                xangle   = Mathf.LerpAngle(xangle, 0, 3 * Time.deltaTime);
                yangle   = Mathf.LerpAngle(yangle, -30, 3 * Time.deltaTime);
                zangle   = Mathf.LerpAngle(zangle, -90, 3 * Time.deltaTime);

                //stop rotation when the character is upside down
                if (Mathf.Abs(0 - xangle) < .1f && Mathf.Abs(-30 - yangle) < .1f && Mathf.Abs(zangle - -90) < .1f)
                {
                    transform.eulerAngles = new Vector3(0, -30, -90);
                    rotated  = true;
                    rotating = false;
                }
                else
                {
                    transform.eulerAngles = new Vector3(xangle, yangle, zangle);
                }
            }
        }
        else if (gravityDir == AnimController.gravityDirection.DOWN)
        {
            yOffset = normalGravityOffset;
            if (!rotated)
            {
                rotating = true;
                xangle   = Mathf.LerpAngle(xangle, 30, 3 * Time.deltaTime);
                yangle   = Mathf.LerpAngle(yangle, 0, 3 * Time.deltaTime);
                zangle   = Mathf.LerpAngle(zangle, 0, 3 * Time.deltaTime);

                //stop rotation when the character is upside down
                if (Mathf.Abs(30 - xangle) < .1f && Mathf.Abs(0 - yangle) < .1f && Mathf.Abs(zangle - 0) < .1f)
                {
                    transform.eulerAngles = new Vector3(30, 0, 0);
                    rotated  = true;
                    rotating = false;
                }
                else
                {
                    transform.eulerAngles = new Vector3(xangle, yangle, zangle);
                }
            }
        }
        else if (gravityDir == AnimController.gravityDirection.RIGHT)
        {
            yOffset = rightGravityOffset;
            if (!rotated)
            {
                rotating = true;
                xangle   = Mathf.LerpAngle(xangle, 0, 3 * Time.deltaTime);
                yangle   = Mathf.LerpAngle(yangle, 30, 3 * Time.deltaTime);
                zangle   = Mathf.LerpAngle(zangle, 90, 3 * Time.deltaTime);

                //stop rotation when the character is upside down
                if (Mathf.Abs(0 - xangle) < .1f && Mathf.Abs(30 - yangle) < .1f && Mathf.Abs(zangle - 90) < .1f)
                {
                    transform.eulerAngles = new Vector3(0, 30, 90);
                    rotated  = true;
                    rotating = false;
                }
                else
                {
                    transform.eulerAngles = new Vector3(xangle, yangle, zangle);
                }
            }
        }

        //transform.position = player.transform.position + offset + yOffset;
        Vector3 targetPos = player.transform.position + offset + yOffset;

        transform.position = Vector3.Lerp(transform.position, targetPos, 4 * Time.deltaTime);
    }
コード例 #3
0
    // Update is called once per frame
    void LateUpdate()
    {
        if (animCtrl.getGravityDir() != gravityDir)
        {
            prevGravityDir = gravityDir;
            gravityDir     = animCtrl.getGravityDir();
            rotated        = false;
        }
        camDistance = distance;

        float lockY = -999.0f;
        float lockX = -999.0f;

        if (currY < 5.0f)
        {
            if (gravityDir == AnimController.gravityDirection.DOWN)
            {
                lockY = transform.position.y;
                lookAt.transform.position = new Vector3(player.transform.position.x, player.transform.position.y + -(currY - 5.0f) / 10, player.transform.position.z);
            }
            if (gravityDir == AnimController.gravityDirection.UP)
            {
                lockY = transform.position.y;
                lookAt.transform.position = new Vector3(player.transform.position.x, player.transform.position.y - -(currY - 5.0f) / 10, player.transform.position.z);
            }
            if (gravityDir == AnimController.gravityDirection.LEFT)
            {
                lockX = transform.position.x;
                lookAt.transform.position = new Vector3(player.transform.position.x + -(currY - 5.0f) / 10, player.transform.position.y, player.transform.position.z);
            }
            if (gravityDir == AnimController.gravityDirection.RIGHT)
            {
                lockX = transform.position.x;
                lookAt.transform.position = new Vector3(player.transform.position.x - -(currY - 5.0f) / 10, player.transform.position.y, player.transform.position.z);
            }
            //currY = 5.0f;
        }

        Vector3    dir       = new Vector3(0, 0, -camDistance);
        Quaternion rotation  = new Quaternion();
        Quaternion rotation2 = Quaternion.Euler(0, 0, 0);

        if (gravityDir == AnimController.gravityDirection.DOWN)
        {
            rotation = Quaternion.Euler(currY, currX, 0);
            //change2 = new Vector3(currY, currX, 0);
            change2 = rotation * dir;
            //dir = new Vector3(0, 0, -distance);
        }
        else if (gravityDir == AnimController.gravityDirection.UP)
        {
            rotation = Quaternion.Euler(-currY, -currX, 0);
            //dir = new Vector3(0, 0, -distance);
        }
        else if (gravityDir == AnimController.gravityDirection.LEFT)
        {
            rotation  = Quaternion.Euler(currY, currX, 0);
            rotation2 = Quaternion.Euler(0, 0, -90);
            //rotation = Quaternion.Euler(currX, -currY, 0);
            //change2 = new Vector3(currX, -currY, 0);
            change2 = rotation * dir;
        }
        else
        {
            rotation  = Quaternion.Euler(currY, currX, 0);
            rotation2 = Quaternion.Euler(0, 0, 90);
            //dir = new Vector3(0, -distance, 0);
        }
        change = rotation.eulerAngles;


        camTransform.position         = lookAt.position + rotation2 * (rotation * dir);
        mockCamera.transform.position = Vector3.zero + Quaternion.Euler(currY, currX, 0) * dir;
        if (lockY != -999.0f)
        {
            camTransform.position = new Vector3(lockX == -999.0f ? camTransform.position.x : Mathf.Clamp(camTransform.position.x, lockX, lockX), lockY == -999.0f ? camTransform.position.y : Mathf.Clamp(camTransform.position.y, lockY, lockY), camTransform.position.z);
        }

        if (gravityDir == AnimController.gravityDirection.UP)
        {
            if (!rotated)
            {
                rotating = true;
                xangle   = Mathf.LerpAngle(xangle, -30, 3 * Time.deltaTime);
                yangle   = Mathf.LerpAngle(yangle, 0, 3 * Time.deltaTime);
                zangle   = Mathf.LerpAngle(zangle, 180, 3 * Time.deltaTime);

                //stop rotation when the character is upside down
                if (/*Mathf.Abs(-30 - xangle) < .1f && Mathf.Abs(0 - yangle) < .1f &&*/ Mathf.Abs(zangle - 180) < .1f || Mathf.Abs(zangle - -180) < .1f)
                {
                    //camTransform.eulerAngles = new Vector3(-30, 0, 180);
                    zangle   = 180;
                    rotated  = true;
                    rotating = false;
                }
                else
                {
                    //camTransform.eulerAngles = new Vector3(xangle, yangle, zangle);
                }
            }
        }
        else if (gravityDir == AnimController.gravityDirection.LEFT)
        {
            if (!rotated)
            {
                rotating = true;
                xangle   = Mathf.LerpAngle(xangle, 0, 3 * Time.deltaTime);
                yangle   = Mathf.LerpAngle(yangle, -30, 3 * Time.deltaTime);
                zangle   = Mathf.LerpAngle(zangle, -90, 3 * Time.deltaTime);

                //stop rotation when the character is upside down
                if (/*Mathf.Abs(0 - xangle) < .1f && Mathf.Abs(-30 - yangle) < .1f &&*/ (Mathf.Abs(zangle - -90) < .1f) || Mathf.Abs(zangle - 270) < .1f)
                {
                    zangle   = -90;
                    rotated  = true;
                    rotating = false;
                }
            }
        }
        else if (gravityDir == AnimController.gravityDirection.DOWN)
        {
            if (!rotated)
            {
                rotating = true;
                xangle   = Mathf.LerpAngle(xangle, 30, 3 * Time.deltaTime);
                yangle   = Mathf.LerpAngle(yangle, 0, 3 * Time.deltaTime);
                zangle   = Mathf.LerpAngle(zangle, 0, 3 * Time.deltaTime);

                //stop rotation when the character is upside down
                if (/*Mathf.Abs(30 - xangle) < .1f && Mathf.Abs(0 - yangle) < .1f &&*/ (Mathf.Abs(zangle - 0) < .1f) || (Mathf.Abs(zangle - 360) < .1f))
                {
                    zangle   = 0;
                    rotated  = true;
                    rotating = false;
                }
            }
        }
        else if (gravityDir == AnimController.gravityDirection.RIGHT)
        {
            if (!rotated)
            {
                rotating = true;
                xangle   = Mathf.LerpAngle(xangle, 0, 3 * Time.deltaTime);
                yangle   = Mathf.LerpAngle(yangle, 30, 3 * Time.deltaTime);
                zangle   = Mathf.LerpAngle(zangle, 90, 3 * Time.deltaTime);

                //stop rotation when the character is upside down
                if (/*Mathf.Abs(0 - xangle) < .1f && Mathf.Abs(30 - yangle) < .1f &&*/ Mathf.Abs(zangle - 90) < .1f || Mathf.Abs(zangle - -270) < .1f)
                {
                    zangle   = 90;
                    rotated  = true;
                    rotating = false;
                }
            }
        }

        mockCamera.transform.LookAt(Vector3.zero);
        camEulerAngles = mockCamera.transform.eulerAngles;
        camTransform.LookAt(lookAt.position, new Vector3(-Mathf.Sin(zangle * Mathf.Deg2Rad), Mathf.Cos(zangle * Mathf.Deg2Rad), 0));

        //camTransform.LookAt(lookAt.position, new Vector3(1, 0, 0));
        //transform.position = player.transform.position + offset + yOffset;
        //Vector3 targetPos = player.transform.position + offset + yOffset;
        //transform.position = Vector3.Lerp(transform.position, targetPos, 4 * Time.deltaTime);
    }