下面我们用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组件,运行程序,使用键盘就可以控制飞机移动了 按住空格键前进,飞机就能抬头起飞了