需要源码和资源包请点赞关注收藏后评论区留言私信~~~
下面我们用Unity 3D搭建一个飞机在跑道上喷火起飞的3D游戏案例,效果如下面的图片和视频所示
一、效果演示
视频如下
VR飞机
二、实现步骤
打开Unity Hub 选择新建项目 选择3D模块
导入资源 将资源包Aircaft.unitypackage导入,里面包含所有的资源文件
导入资源后 场景目录结构如下
然后就开始搭建场景
我们点击Scenes文件夹,在Level1中进行场景的搭建
找到Models目录下的GroundRunway.FBX地面跑道模型,将其拖入场景,然后对其进行美化
1:调整摄像机 从顶部进行俯视
2:调整灯光的参数
3:设置天空球 防止飞机飞出界外
4:制作材质球
5:调整材质球的参数
然后开始制作火焰喷射特效,不过通常粒子特效由专门的特效师进行制作,所以如果不想学习的小伙伴可以跳过这个步骤,直接使用Project视图中的Prefabs文件夹内的Afterburner.prefab文件即可
接下来实现飞机飞行功能
首先整理一下对象,在Hierarchy视图中右击,选择Create Empty命令,新建一个空对象,命名为Aircraft 将position和rotation参数都设置为全0
新建一个脚本文件命名为AircraftMove 编辑代码如下
using UnityEngine; public class AircraftMove : MonoBehaviour { private float forwardSpeed = 50; //前进的速度 private float backwardSpeed = 25; //后退的速度 private float rotateSpeed = 2; //旋转速度 private GameObject MainCamera; private Vector3 TargetOffset; private void Start() { MainCamera = GameObject.Find("Main Camera"); TargetOffset = MainCamera.transform.position - transform.position; } private void FixedUpdate() { //获取到横轴 前后 的输入 也就是键盘W 和S的输入 float h = Input.GetAxis("Horizontal"); //获取到纵轴 左右 的输入 也就是键盘A 和D的输入 float v = Input.GetAxis("Vertical"); //从上下键的输入,获取到Z轴的输入量 Vector3 velocity = new Vector3(0, 0, v); //将世界坐标转化为本地坐标 velocity = transform.TransformDirection(velocity); //判断是前进还是后退 if (v > 0.1) { velocity *= forwardSpeed; } else { velocity *= backwardSpeed; } //前进或者后退 transform.localPosition += velocity * Time.fixedDeltaTime; //旋转机身 if (v == 0) { transform.Rotate(0, h * rotateSpeed, 0); } //空格起飞 if (Input.GetKey(KeyCode.Space) && v != 0) { float value = 0; transform.Rotate(Mathf.Clamp(value, -2, -1), 0, 0); } //主摄像机跟随 MainCamera.transform.localPosition = transform.position + TargetOffset; } }
将脚本拖到Aircraft身上作为Aircraft组件,运行程序,使用键盘就可以控制飞机移动了 按住空格键前进,飞机就能抬头起飞了
创作不易 觉得有帮助请点赞关注收藏~~~