Unity3d学习之路-简单AR游戏
简单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);
}
游戏脚本挂载
在场景中创建一个空物体,挂载
SceneController
和UserAction
,在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游戏相关推荐
- 【贪玩巴斯】Unity3D初学圣经(一)——学习要求 Unity简单介绍 游戏引擎介绍 课程体系介绍 「1-1 到 1-4 」—— 2021年12月9日
Unity3D初学圣经 一 --学习要求 & Unity简单介绍 & 游戏引擎介绍 & 课程体系介绍 本文对应视频P1 1-1 到P2 1-4 1.学习要求 2.Unity简单 ...
- android开发学习之路——连连看之游戏逻辑(五)
GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖, ...
- Unity3D 学习笔记4 —— UGUI+uLua游戏框架
Unity3D 学习笔记4 -- UGUI+uLua游戏框架 使用到的资料下载地址以及基础知识 框架讲解 拓展热更过程 在这里我们使用的是uLua/cstolua技术空间所以提供的UGUI+uLua的 ...
- Unity3D学习之路——AI小坦克
Unity3D学习之路--AI小坦克 作业要求: 坦克对战游戏 AI 设计 从商店下载游戏:"Kawaii" Tank 或 其他坦克模型,构建 AI 对战坦克.具体要求 使用&qu ...
- Unity3d学习之路-牧师与魔鬼
Unity3d学习之路-牧师与魔鬼 游戏基本介绍 游戏规则: Priests and Devils is a puzzle game in which you will help the Priest ...
- Unity3D之简单AR游戏
使用Unity开发AR游戏的基础配置与操作可以参考老师的博客,里面写的非常详细,很适合入门. 但是老师的博客里面介绍的是旧版本的unity配置,现在到官网下载安装 Vuforia 插件时步骤有些不同, ...
- Oracle学习之路——简单查询
本人大三单身狗,虽说还有一年毕业,可是到了大四再幡然醒悟,奋发图强,着实有点晚.为了尽可能将自己从"毕业即失业"的悲惨现状中拯救出来,开始学习吧!!!本博客是为了记录鄙人学习之路中 ...
- JAVA学习之路-简单的城堡游戏(一)
简单的文字城堡游戏(一) 最近在学习后台的一些功能,发现自己的基础不是很牢固,所以想写点小程序,巩固一下以前学的知识,融合一下. 之前在慕课上学的课程中就有一个这样的小程序,写一个简单的文字城堡游戏. ...
- Unity3D学习之路Homework4—— 飞碟射击游戏
简单打飞碟小游戏 游戏规则与要求 规则 鼠标点击飞碟,即可获得分数,不同飞碟分数不一样,飞碟的初始位置与飞行速度随机,随着分数增加,游戏难度增加.初始时每个玩家都有6条生命,漏打飞碟扣除一条生命,直到 ...
最新文章
- 解决安装linux时未挂载文件而导致的重启失败
- Matlab向量与多项式
- linux配置redis服务,记一次linux下安装redis, 设置redis服务, 及添加环境变量
- 图论 —— 生成树 —— 曼哈顿距离最小生成树
- Swift - 判端网络连接状态,连接类型(3G还是Wifi)
- python基础知识7——迭代器,生成器,装饰器
- Winsock传输数据
- C++ std::set insert 怎么得到 返回值 是什么
- git flow 分支合并
- No package ‘vte-2.91‘ found
- qml之TextArea 添加滚动条
- 一份优秀的大数据开发简历是怎么样的?
- Python笔记(21)正则表达式
- 怎么把做好的ps保存成图片_ps存成jpg格式的快捷键,ps如何另存为图片格式
- 单片机c51语言中 两个位变量类型是什么,51单片机中的数据类型解析
- AnyPi智能语音交互方案开发-智能语音音箱方案
- linux Windows双系统时间不一致的解决办法
- ROS2-Foxy安装流程
- ModuleNotFoundError:No module named ‘googlemaps‘
- Day5:经典的圣诞歌都在这里了
热门文章
- SAP SD发货流程中托盘的管理
- OpenState安装及 Port Knocking 实验
- 最近非常火的电子木鱼流量主小程序源码
- 如何在Ubuntu系统下挂载新硬盘(win10+Ubuntu双系统单硬盘挂载新硬盘)
- Crack:GrapeCity Documents for Excel 6.0.1
- Java集成Hutool实现导出Excel功能
- 重启linux没有网络配置文件,Linux 网络配置 修改DNS配置文件/etc/resolv.conf后,重启网络,DNS配置丢失...
- 划分vlan实验心得体会_计算机网络实验心得体会_计算机网络实验工作感想
- rs485接口上下拉_RS-485总线为什么要加上拉下拉电阻?如何选择RS485的上下拉电阻?...
- 大家都在讲敏捷开发模型,但是落地又是迭代模型,迭代模型有哪些优势呢?