简单AR游戏

  • 简单AR游戏

    • 游戏规则
    • 游戏实现
      • 游戏场景的搭建
      • 游戏逻辑的实现
      • 游戏脚本挂载
      • 游戏打包到安卓平台
    • 实现效果
    • 小结

游戏规则

识别指定图片,显示玩家和防御塔,点击按键对玩家进行上下左右移动,点击射击,在射程范围内会对防御塔进行射击,若玩家或者防御塔死亡游戏结束。

游戏实现

游戏场景的搭建

  • 识别图

在Vuforia官网上上传两张识别图分别命名为Tower和Player,然后下载这两个Targets。在Unity中准备好Vuforia开发环境,导入下载好的两个Database。

然后按照下图设置,这里的Max Simultaneous Tracked Images本次游戏设置为2,可以同时识别2张图

将Vuforia预制件ImageTarget拖入场景中两次,然后分别设置它的Database和Image Target

  • 模型

在Unity的Asset Store中下载模型,我本次游戏使用的是ToonyTinyPeople和CanonTower,导入场景中,将人物和防御塔分别挂载在两张ImageTarget下,调整合适的大小,分别命名为Player和Tower。

为两个模型添加血条,血条的添加是参考分别使用IMGUI和UGUI实现血条的预制设计中的UGUI实现方法。

创建一个Sphere命名为Bullet作为防御塔发射的子弹。在Tower的发射子弹的口的位置创建一个空物体叫做open,作为Tower的子物体,方便定位子弹发射时候的位置。

给Player创建Animator Controller

游戏逻辑的实现

  • 玩家

玩家可以进行移动也可以攻击防御塔,受到子弹攻击后会减血。移动是通过用户点击按钮实现(实现效果很差),因为我这次最后是在移动端进行游戏,所以最好是使用与触摸有关来进行移动。点击攻击按钮,玩家会播放攻击动画,如果塔在射程内,则塔掉血。受到子弹攻击是通过两个物体的碰撞检测来实现的。部分函数如下:

//玩家攻击
public void PlayerAttack()
{//播放攻击动画player.GetComponent<Animator>().SetTrigger("shoot");//如果玩家在塔的范围内,塔掉血float dis = Vector3.Distance(tower.transform.position, player.transform.position);if (dis < distance){tower.GetComponent<TowerController>().ReduceBlood();}
}
  • 防御塔

防御塔在检测到玩家进入射程范围内会间隔2s发射一次子弹,因为子弹时间飞行比发射间隔快,所以场景中一直只有一颗子弹重复利用。防御塔是一直朝向玩家。部分函数如下:

void Update ()
{if(player != null && !gameover){float dis = Vector3.Distance(transform.position, player.transform.position);if(dis < attackDistance){if(player.GetComponent<PlayerController>().getPlayerLife()>0){transform.LookAt(player.transform);time += Time.deltaTime;if(time >= 2){//发射子弹shoot(player.transform.position);time = 0;}}}//子弹朝玩家发射if (bullet.activeSelf)bullet.transform.position = Vector3.MoveTowards(bullet.transform.position, player.transform.position, Time.deltaTime * speed);if (bullet.transform.position == player.transform.position){bullet.SetActive(false);}}
}
//发射子弹
void shoot(Vector3 position)
{bullet.transform.position = open.position;bullet.SetActive(true);
}

游戏脚本挂载

在场景中创建一个空物体,挂载SceneControllerUserAction,在Player上挂载PlayerController,在Tower上挂载TowerController

游戏打包到安卓平台

在Edit->Preference->External Tools中配置好JDK和SDK的路径

然后点击Files->Build Setings,将场景添加并且平台切换成Andriod。点击Player settings修改Other Settings下的 Bundle Identifier 中的com.Company.ProductName为自己的自定义的,例如:com.sysu.test。并选择Android 版本,版本不能低于自己的手机版本。配置好之后点击build保存apk文件。

实现效果

小结

这次AR游戏制作得比较简单,但是在移动端移动使用按键向四周移动体验不是很好,可以制作摇杆或者根据触碰方向移动。代码的耦合度有一点高,还需要改进。塔的位置因为使用LookAt函数有一些不稳定。有时间的话重新再做一次吧。

完整项目和游戏视频请点击传送门

Unity3d学习之路-简单AR游戏相关推荐

  1. 【贪玩巴斯】Unity3D初学圣经(一)——学习要求 Unity简单介绍 游戏引擎介绍 课程体系介绍 「1-1 到 1-4 」—— 2021年12月9日

    Unity3D初学圣经 一 --学习要求 & Unity简单介绍 & 游戏引擎介绍 & 课程体系介绍 本文对应视频P1 1-1 到P2 1-4 1.学习要求 2.Unity简单 ...

  2. android开发学习之路——连连看之游戏逻辑(五)

    GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖, ...

  3. Unity3D 学习笔记4 —— UGUI+uLua游戏框架

    Unity3D 学习笔记4 -- UGUI+uLua游戏框架 使用到的资料下载地址以及基础知识 框架讲解 拓展热更过程 在这里我们使用的是uLua/cstolua技术空间所以提供的UGUI+uLua的 ...

  4. Unity3D学习之路——AI小坦克

    Unity3D学习之路--AI小坦克 作业要求: 坦克对战游戏 AI 设计 从商店下载游戏:"Kawaii" Tank 或 其他坦克模型,构建 AI 对战坦克.具体要求 使用&qu ...

  5. Unity3d学习之路-牧师与魔鬼

    Unity3d学习之路-牧师与魔鬼 游戏基本介绍 游戏规则: Priests and Devils is a puzzle game in which you will help the Priest ...

  6. Unity3D之简单AR游戏

    使用Unity开发AR游戏的基础配置与操作可以参考老师的博客,里面写的非常详细,很适合入门. 但是老师的博客里面介绍的是旧版本的unity配置,现在到官网下载安装 Vuforia 插件时步骤有些不同, ...

  7. Oracle学习之路——简单查询

    本人大三单身狗,虽说还有一年毕业,可是到了大四再幡然醒悟,奋发图强,着实有点晚.为了尽可能将自己从"毕业即失业"的悲惨现状中拯救出来,开始学习吧!!!本博客是为了记录鄙人学习之路中 ...

  8. JAVA学习之路-简单的城堡游戏(一)

    简单的文字城堡游戏(一) 最近在学习后台的一些功能,发现自己的基础不是很牢固,所以想写点小程序,巩固一下以前学的知识,融合一下. 之前在慕课上学的课程中就有一个这样的小程序,写一个简单的文字城堡游戏. ...

  9. Unity3D学习之路Homework4—— 飞碟射击游戏

    简单打飞碟小游戏 游戏规则与要求 规则 鼠标点击飞碟,即可获得分数,不同飞碟分数不一样,飞碟的初始位置与飞行速度随机,随着分数增加,游戏难度增加.初始时每个玩家都有6条生命,漏打飞碟扣除一条生命,直到 ...

最新文章

  1. 解决安装linux时未挂载文件而导致的重启失败
  2. Matlab向量与多项式
  3. linux配置redis服务,记一次linux下安装redis, 设置redis服务, 及添加环境变量
  4. 图论 —— 生成树 —— 曼哈顿距离最小生成树
  5. Swift - 判端网络连接状态,连接类型(3G还是Wifi)
  6. python基础知识7——迭代器,生成器,装饰器
  7. Winsock传输数据
  8. C++ std::set insert 怎么得到 返回值 是什么
  9. git flow 分支合并
  10. No package ‘vte-2.91‘ found
  11. qml之TextArea 添加滚动条
  12. 一份优秀的大数据开发简历是怎么样的?
  13. Python笔记(21)正则表达式
  14. 怎么把做好的ps保存成图片_ps存成jpg格式的快捷键,ps如何另存为图片格式
  15. 单片机c51语言中 两个位变量类型是什么,51单片机中的数据类型解析
  16. AnyPi智能语音交互方案开发-智能语音音箱方案
  17. linux Windows双系统时间不一致的解决办法
  18. ROS2-Foxy安装流程
  19. ModuleNotFoundError:No module named ‘googlemaps‘
  20. Day5:经典的圣诞歌都在这里了

热门文章

  1. SAP SD发货流程中托盘的管理
  2. OpenState安装及 Port Knocking 实验
  3. 最近非常火的电子木鱼流量主小程序源码
  4. 如何在Ubuntu系统下挂载新硬盘(win10+Ubuntu双系统单硬盘挂载新硬盘)
  5. Crack:GrapeCity Documents for Excel 6.0.1
  6. Java集成Hutool实现导出Excel功能
  7. 重启linux没有网络配置文件,Linux 网络配置 修改DNS配置文件/etc/resolv.conf后,重启网络,DNS配置丢失...
  8. 划分vlan实验心得体会_计算机网络实验心得体会_计算机网络实验工作感想
  9. rs485接口上下拉_RS-485总线为什么要加上拉下拉电阻?如何选择RS485的上下拉电阻?...
  10. 大家都在讲敏捷开发模型,但是落地又是迭代模型,迭代模型有哪些优势呢?