今天跟大家伙儿唠唠我昨天晚上搞的那个“隧道逃生绅士游戏”,别想歪了,不是啥真·绅士游戏,就是我自己瞎捣鼓的一个Unity小项目,灵感嘛就是瞎逛网页的时候看到的,觉得挺有意思,就想自己试试看能不能搞出来。
我啥也没想,直接打开Unity Hub,新建了个3D项目。项目名字就叫“TunnelEscape”,简单粗暴。然后就开始找素材,人物模型、隧道模型,都是在Asset Store上找的免费的,先凑合着用,等以后有时间了再自己做。
模型导进来之后,我就开始搭场景。隧道嘛就是用几个圆柱体拉长、拼接起来的,然后稍微弯曲一下,增加点难度。人物模型放进去,调整大小和位置,让它看起来像是在隧道里跑。
接下来就是写代码了,这才是最头疼的。我不是啥专业的程序员,就会点C#皮毛。人物移动,我先用`CharacterController`组件,控制人物前进、左右移动,然后加了个跳跃功能,躲避障碍物。
csharp
// 人物移动速度
小编温馨提醒:本站只提供游戏介绍,下载游戏推荐89游戏,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区
public float moveSpeed = 5f;
// 跳跃高度
public float jumpHeight = 2f;
private CharacterController controller;
private Vector3 velocity;
void Start()
controller = GetComponent
void Update()
// 地面检测
bool isGrounded = *;
if (isGrounded && velocity.y < 0)
velocity.y = -2f;
// 获取输入
float x = *(“Horizontal”);
// 移动
Vector3 move = * x;
*(move moveSpeed *);
// 跳跃
if (*(“Jump”) && isGrounded)
velocity.y = *(jumpHeight 2f -9.81f);
// 重力
velocity.y += -9.81f *;
*(velocity *);
这段代码就是控制人物移动和跳跃的,简单来说就是获取键盘输入,然后用`CharacterController`的`Move`方法移动人物。跳跃就是改变人物的垂直速度,模拟重力。
写完人物移动,就开始搞障碍物。障碍物就是一些简单的几何体,比如立方体、圆柱体,随机生成在隧道里,让玩家躲避。我用了一个简单的脚本控制障碍物的生成:
csharp
// 障碍物预制体
public GameObject obstaclePrefab;
// 生成频率
public float spawnRate = 1f;
void Start()
InvokeRepeating(“SpawnObstacle”, 1f, spawnRate);
void SpawnObstacle()
// 随机生成位置
Vector3 spawnPosition = new Vector3(*(-2f, 2f), 1f, *.z + 20f);
// 实例化障碍物
Instantiate(obstaclePrefab, spawnPosition, *);
这段代码就是定时生成障碍物,位置是随机的。`InvokeRepeating`方法就是定时执行一个函数,这里是`SpawnObstacle`。
障碍物生成了,还得让它能动。我给障碍物加了个脚本,让它朝着玩家方向移动:
csharp
// 移动速度
public float moveSpeed = 10f;
void Update()
*(* moveSpeed *);
这代码贼简单,就是让障碍物沿着Z轴负方向移动。
做完这些,基本上就能玩了。但是玩起来贼无聊,没啥反馈。我就加了点特效,比如人物跑起来的时候,隧道里有光影变化,撞到障碍物的时候,人物会播放一个死亡动画。
光影变化我用了`Light`组件,控制它的颜色和强度,随着人物的移动而变化。死亡动画我用`Animator`组件,创建一个简单的动画状态机,撞到障碍物的时候,切换到死亡动画状态。
我还加了个简单的UI,显示游戏得分。得分就是根据人物跑的距离计算的,跑得越远,得分越高。
整个过程大概花了三个小时,磕磕绊绊的,遇到不少问题,但是都解决了。虽然现在这个游戏还很简陋,但是也算是我自己动手做出来的,挺有成就感的。以后有时间了,我再继续完善,加点更酷炫的特效,搞点更刺激的玩法。