unity笔记4 - 让方块翻滚前进(RotateAround)

版权声明:本文为博主原创文章,转载请注明源地址 https://blog.csdn.net/qq_15505341/article/details/79265421

今天把猴哥教程里的游戏原作找到了,猴哥的教程是买不起的了…只能自己对照着游戏琢磨着临摹一个

虽说只学了几天,生成个地图倒是没啥障碍,但方块的滚动倒是把我难倒了…试了下直接用Rotate转,因为有刚体的存在压根转不了,又试了下给方块施加一个力矩,但效果很不理想…力大了就飞出去,力小了又转的慢

百度了半天,终于是找到了RotateAround这个方法

public void RotateAround(Vector3 point, Vector3 axis,float angle);
按照axis的方向围绕point点进行旋转,angle也许是旋转的度数…反正我是这么用的

来建一个实例看看

void Update () {
    transform.RotateAround(GameObject.Find("sun").transform.position, new Vector3(0,1,0), 20 * Time.deltaTime);
    }

图中的方块就以sun的坐标为中心不停的转动
这里写图片描述
……………..嗯,所以这跟翻滚前进有什么关系?
这里写图片描述
如图,把point放在这里,累积翻个90度,就有我们一开始游戏中那种效果了

祭上源码

    public float velocity;
    static float b = Mathf.Pow(2, 0.5f);
    bool isLook = true;
    bool goR = false;
    bool goL = false;
    int goRi = 0;
    int goLi = 0;

    Vector3 vector = new Vector3();

    // Use this for initialization
    void Start () {
        transform.position = new Vector3(3.535534f, 2, 4.949748f);
        transform.Rotate(new Vector3(0, 45, 0));
    }
    void Update()
    {
        //Quaternion.AngleAxis(angle, axis) * (position - center);
        //transform.RotateAround(new Vector3(0, -0.5f, 0.5f), Vector3.right, 20 * Time.deltaTime);
        if (Input.GetKey(KeyCode.D) && isLook)
        {
            isLook = false;
            goR = true;
            goRi = 0;
            vector = transform.position;
            transform.RotateAround(new Vector3(vector.x + b / 4, 1.5f, vector.z + b / 4), new Vector3(1, 0, -1), 6);
        }
        if (goR)
        {
            goRi += 6;
            if (goRi < 90)
            {
                Debug.Log(transform.eulerAngles.x);
                transform.RotateAround(new Vector3(vector.x + b / 4, 1.5f, vector.z + b / 4), new Vector3(1, 0, -1), 6);
            }
            else
            {
                isLook = true;
                goR = false;
                goRi = 0;
            }
        }

        if (Input.GetKey(KeyCode.A) && isLook)
        {
            isLook = false;
            goL = true;
            vector = transform.position;
            transform.RotateAround(new Vector3(vector.x - b / 4, 1.5f, vector.z + b / 4), new Vector3(1, 0, 1), 6);
        }
        if (goL)
        {
            goLi += 6;
            if (goLi < 90)
            {
                Debug.Log(goLi);
                transform.RotateAround(new Vector3(vector.x - b / 4, 1.5f, vector.z + b / 4), new Vector3(1, 0, 1), 6);
            }
            else
            {
                isLook = true;
                goL = false;
                goLi = 0;
            }
        }
}

运行截图
这里写图片描述


原游戏:TapTap-智勇立方

猜你喜欢

转载自blog.csdn.net/qq_15505341/article/details/79265421
今日推荐