巡逻兵小游戏

本文介绍了使用Unity3D开发的一款巡逻兵小游戏,玩家需躲避自动巡逻的士兵以逃脱追捕。游戏规则包括巡逻兵根据自身坐标选择目标,玩家受鼠标点击控制移动。文章详细讲解了程序结构,包括Player、NpcController、Npc和EventController的实现细节,涉及射线检测、事件订阅与发布等技术。
摘要由CSDN通过智能技术生成

游戏介绍

这次游戏内容是:场景内有若干自动巡逻的士兵,而玩家需要通过移动躲避他们的追捕。逃脱则加分,被抓到则游戏结束。

程序具体规则:

  • 巡逻兵会以自身当前坐标为参照,自动选择下一个移动目标,一旦中途发生碰撞,则重新选择下一个目标点。
  • 玩家受鼠标操控,将会前往鼠标左键点击的坐标。点击事件只对地面生效(tag)。

以下是项目代码:
巡逻兵小游戏

游戏截图


程序结构

首先来看一下程序运行的结构吧:
游戏对象

  1. 其中plane是地面,需要添加一个"plane"的tag,为了让鼠标点击事件识别它。
  2. Cube形成墙壁和障碍物,程序中只是简单地摆放了一些。
  3. Npc和Player分别对应巡逻兵和玩家,上面需要挂载各自的脚本,以及刚体组件。
  4. Manager_1用于挂载各种控制类脚本。
  5. Text用于UI显示分数,详情可见前几次博客。

Manager_1
Text


Player – 鼠标点击

这里最主要的部分就是鼠标点击控制目标移动。
程序使用了射线来获取鼠标击中地面处的坐标,以及Vector3.MoveTowards函数来逐帧改变目标位置。

if (Input.GetButtonDown("Fire1"))
{
   
     mousePosition = Input.mousePosition;
     Ray ray = Camera.main.ScreenPointToRay(mousePosition);
     RaycastHit hit;
     if (Physics.Raycast(ray, out hit) && hit.transform.gameObject.CompareTag("plane"))
     {
   
           direction = hit.point;
           direction = direction + new Vector3(0, transform.position.y, 0);
     }
}

可见击中地面处的坐标是由hit.point获取的。hit就是被击中的对象,这里也就是地面。
注意这里判断了击中物的tag,以确保鼠标事件只对地面生效。
direction 用于计算物体移动的目标。因为物体需要做水平移动,而击中点是在地面上,因此需要加上一个物体的高度。

if(transform.<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值