Unity3D游戏场景之控制模型移动、旋转和相机跟随

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yu1368072332/article/details/78376998

上一章主要介绍了如何利用Terrain来搭建3D游戏场景,本章主要介绍通过按钮来实现模型的移动和镜头的跟随。

首先创建一个3D的Cube模型,然后添加脚本命名为CubeControl,然后绑定到刚才创建的Cube上来实现Cube的移动和旋转。

我们这里主要通过键盘的按键来实现,具体调用方法是Input.GetKey(KetCode),这个方法会在按下对应的键之后,返回一个bool值true;

同样也有Input.GetKeyDown(KetCode),当按键按下会返回true;

同样也有Input.GetKeyUp(KetCode),当按键抬起时会返回true。

下面代码:

实现按下“W“控制物体向上旋转

实现按下“S“控制物体向下旋转

实现按下“A“控制物体向左旋转

实现按下“D“控制物体向右旋转


    float fSpeed = 20f;  //速度

扫描二维码关注公众号,回复: 3204055 查看本文章

    void Update()

    {

            #region 旋转

            //向上旋转

            if (Input.GetKey(KeyCode.W))

            {

                transform.Rotate(fSpeed, 0, 0);

            }

    

            //向下旋转

            if (Input.GetKey(KeyCode.S))

            {

                transform.Rotate(-fSpeed, 0, 0);

            }

    

            //向左旋转

            if (Input.GetKey(KeyCode.A))

            {

                transform.Rotate(0, fSpeed, 0);

            }

    

            //向右旋转

            if (Input.GetKey(KeyCode.D))

            {

                transform.Rotate(0, 0, fSpeed);

            }

            #endregion

    }


这里主要是通过transfrom.Rotate来实现物体的旋转,这里主要有四个参数,前面三个参数主要是应用一个旋转角度,zAngle度围绕z轴,xAngle度围绕x轴,yAngle度围绕y轴(这样的顺序)。

下面是物体的移动,我们主要是通过transfrom.Translate来实现物体的移动,

我们来了解一下transfrom.Translate这里主要是需要指定方向也就是Vector3.forward(表示向前方移动)这个时候在定义Vector3.forward * Time.deltaTime * fSpeed这表示每帧移动fSpeed的距离。

具体代码如下:

实现按下“↑“控制物体向上移动

实现按下“↓“控制物体向下移动

实现按下“←“控制物体向左移动

实现按下“→“控制物体向右移动


        #region 移动

        //向前移动

        if (Input.GetKey(KeyCode.UpArrow))

        {

            transform.localEulerAngles = Vector3.zero;

            transform.Translate(Vector3.forward * Time.deltaTime * fSpeed);

        }

        //向后移动

        if (Input.GetKey(KeyCode.DownArrow))

        {

            transform.localEulerAngles = Vector3.zero;

            transform.Translate(Vector3.back * Time.deltaTime * fSpeed);

        }

        //向左移动

        if (Input.GetKey(KeyCode.LeftArrow))

        {

            transform.localEulerAngles = Vector3.zero;

            transform.Translate(Vector3.left * Time.deltaTime * fSpeed);

        }

        //向右移动

        if (Input.GetKey(KeyCode.RightArrow))

        {

            transform.localEulerAngles = Vector3.zero;

            transform.Translate(Vector3.right * Time.deltaTime * fSpeed);

        }

        #endregion


这个时候我们运行就会发现两个问题:

  1. 相机并不随着物体的移动而移动

  2. 物体碰到障碍物,直接穿透了,不符合常理

下面我们来解决这两个问题,首先我们可以为场景中的主相机添加一个跟随脚本,在Unity3D标准资源的脚本中系统帮我们写好了跟随脚本.我们选中主相机点击Compent->Scripts->UnityStandardAssets.Utility->Smooth Follow,具体如下图:

这个时候你会发现相机上多了脚本:

这个时候只需要把cube拖到Target中,这个时候你在重新运行项目你会发现,主摄像机已经开始跟着cube移动了,是不是很酷!

下面我们来解决cube穿过障碍物的问题,这里我们需要为cube添加一个重力碰撞,这样就会为cube增加一个重力感应,点击 Component – > Physics – > Rigidbody :

这个时候我们在点击运行游戏,会发现当物体碰到数目或者山丘时,会被弹开,来吧大家可以试一下自己做的项目吧!

下面是工程的链接,可以自行下载查看:

链接:http://pan.baidu.com/s/1boHx50b 密码:wqfi

想了解更多,请关注我的个人公众号,或者添加QQ群:879354767,关注有惊喜哦!:

猜你喜欢

转载自blog.csdn.net/yu1368072332/article/details/78376998