Unity3D游戏场景之控制模型移动、旋转和相机跟随
2017-10-28 16:34
597 查看
上一章主要介绍了如何利用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; //速度
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
这个时候我们运行就会发现两个问题:
相机并不随着物体的移动而移动
物体碰到障碍物,直接穿透了,不符合常理
下面我们来解决这两个问题,首先我们可以为场景中的主相机添加一个跟随脚本,在Unity3D标准资源的脚本中系统帮我们写好了跟随脚本.我们选中主相机点击Compent->Scripts->UnityStandardAssets.Utility->Smooth Follow,具体如下图:
这个时候你会发现相机上多了脚本:
这个时候只需要把cube拖到Target中,这个时候你在重新运行项目你会发现,主摄像机已经开始跟着cube移动了,是不是很酷!
下面我们来解决cube穿过障碍物的问题,这里我们需要为cube添加一个重力碰撞,这样就会为cube增加一个重力感应,点击 Component – > Physics – > Rigidbody :
这个时候我们在点击运行游戏,会发现当物体碰到数目或者山丘时,会被弹开,来吧大家可以试一下自己做的项目吧!
下面是工程的链接,可以自行下载查看:
链接:http://pan.baidu.com/s/1boHx50b 密码:wqfi
想了解更多,请关注我的个人公众号,关注有惊喜哦!:
首先创建一个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; //速度
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
这个时候我们运行就会发现两个问题:
相机并不随着物体的移动而移动
物体碰到障碍物,直接穿透了,不符合常理
下面我们来解决这两个问题,首先我们可以为场景中的主相机添加一个跟随脚本,在Unity3D标准资源的脚本中系统帮我们写好了跟随脚本.我们选中主相机点击Compent->Scripts->UnityStandardAssets.Utility->Smooth Follow,具体如下图:
这个时候你会发现相机上多了脚本:
这个时候只需要把cube拖到Target中,这个时候你在重新运行项目你会发现,主摄像机已经开始跟着cube移动了,是不是很酷!
下面我们来解决cube穿过障碍物的问题,这里我们需要为cube添加一个重力碰撞,这样就会为cube增加一个重力感应,点击 Component – > Physics – > Rigidbody :
这个时候我们在点击运行游戏,会发现当物体碰到数目或者山丘时,会被弹开,来吧大家可以试一下自己做的项目吧!
下面是工程的链接,可以自行下载查看:
链接:http://pan.baidu.com/s/1boHx50b 密码:wqfi
想了解更多,请关注我的个人公众号,关注有惊喜哦!:
相关文章推荐
- Unity3D 游戏引擎之控制模型移动旋转与碰撞
- Unity3D 游戏引擎之控制模型移动旋转与碰撞(七)
- Unity3D 游戏引擎之控制模型移动旋转与碰撞(七)
- Unity3D控制物体前后左右移动、旋转及相机跟随
- Unity3D游戏场景之鼠标点击地面控制人物移动
- Unity3D游戏制作-3D横版场景的角色移动控制
- Unity3D游戏制作(一)——3D横版场景的角色移动控制
- unity3d,制作自己的第一个射击游戏demo,实现镜头跟随和键盘控制移动
- Unity3D游戏制作(一)——3D横版场景的角色移动控制
- Unity3D游戏制作之3D横版场景的角色移动控制
- Unity3d相机跟随角色移动
- unity3d阶段性学习脚本代码(2个是摄像机跟随(2D游戏中的),1个是角色跳跃移动脚本)
- RPG游戏人物视角控制,相机跟随
- Unity3D 游戏引擎之脚本实现模型的平移与旋转(六)
- 【Unity3D】使用鼠标键盘控制Camera视角(即时战略类游戏视角):缩近,拉远,旋转
- unity3d简单的相机跟随及视野旋转缩放
- Unity3D 几个基本动画(控制物体移动、旋转、缩放)
- 游戏开发之用摇杆控制摄像机的移动旋转缩放
- Unity3D 游戏引擎之脚本实现模型的平移与旋转(六)
- Unity通过射线碰撞选择模型,然后控制模型的移动、旋转、缩放等动作