Unity项目 - 捡苹果 Apple Picker
项目展示

Github项目地址:Apple Picker
涉及知识
- 正投视图
- 3D场景内树与苹果的图层
- 记录最高分到本地
准备工作
模型制作:
- 基本模型创建
- 树叶:sphere 拉伸为椭圆形,绿色材质球
- 树干:cylinde 修改为合适尺寸,棕色材质球
- 苹果:sphere 附加深红金属光泽球
- 篮筐:cube 修改为合适尺寸,黄色材质球
- 位置、层级关系
- 调整树叶树干的位置搭配,呈现简单树木形态
- 另设的空物体
AppleTree包含着树叶和树干
- 标签、图层
- 新建标签Apple标记苹果物体
- 新建图层 AppleTree、Apple和Basket,后在Edit->Project Setting->Physics内取消Apple与AppleTree图层的碰撞。后修正对应物体图层
- 相机及预制体
- 调整主摄像机为正投影(Orthographic),移动到合适位置
- 创建苹果的预制体
游戏逻辑
- 苹果树:
- 每帧都以一定的速度移动,当碰到左右边界则转向,且在左右移动过程中有概率改变运动方向
- 每一定时间间隔落下一个苹果
- 苹果:
- 从树叶位置实例化并落下(本例采用rigidbody重力)
- 与篮筐产生碰撞即被销毁
- 若篮筐未与其碰撞,则当苹果下落到一定距离就自动销毁
- 篮筐:
- 开局有3个篮筐,且均实例化出来
- 篮筐跟随鼠标限制在界面的x轴方向移动
- 篮筐用于接住苹果,与苹果碰撞后销毁苹果
- 当漏接苹果(也就是当苹果下降到自行销毁的底线时),罗筐数减少(相当于玩家的生命值)
- 机制:
- 开局,苹果树左右移动,生成苹果下落
- 玩家操作鼠标使篮筐左右移动
- 接到苹果时得分增加,超过历史分值就刷新记录
- 当没接到苹果时,篮筐数减少(生命值减少),且场景内还在下落中的苹果消失
- 当3个篮筐都没了,游戏结束,几秒后自动重新开局
代码相关
- AppleTree.cs:绑定于苹果树AppleTree
- Apple.cs:绑定于苹果Apple
- Basket.cs:绑定于篮筐Basket
- ApplePicker.cs:绑定于主摄像机;BasketPrefab 挂载Basket,EndUI 挂载Canvas->End
- HighScore.cs:绑定于 Canvas->HighScore
问题探讨
苹果树移动时概率转向问题:
- 问题分析:在AppleTree.cs内,原计划实现每秒转向概率为
chanceToChangeDirecyions=0.02(如下原版代码),但是发现,在FixedUpdate()内,每秒执行50次,也就会导致AppleTree平均每秒改变一次方向:(设概率为t) 50 x (t/1) = 1 ,因此需要修改。 - 解决方案:对随机数Random.value进行修改,即 Random.value/Time.deltaTime,此时每秒转向概率为: 50 x (t / (1/0.02)) = 50 x 0.02(t/1) = 0.02 ,至此解决问题
- 其他:但试验下来0.02概率过低,我已调为0.4,且速度为5
private void FixedUpdate()
{
/*-----原版-----*/
//随机改变运动方向,概率为 chanceToChangeDirecyions
if ((Random.value) < chanceToChangeDirecyions)
speed *= -1;
/*-----修正版-----*/
if ((Random.value / Time.deltaTime) < chanceToChangeDirecyions)
speed *= -1;
}
苹果下落被销毁就不再生成问题:
- 问题分析:当第二个苹果还未实例化,第一个实例化的苹果就因下降越线被销毁或者被篮筐接住销毁,此刻场景内就再无Apple预制体,也就是说,AppleTree脚本 就失去对象applePrefab,无法再实例化产生苹果
- 解决方案:围绕保证场景内任意时刻存在一个applePrefab
- 调高树的高度(本例方案)
- 缩短实例化苹果的间隔
- 先隐藏再延时销毁苹果(理论可行,但感觉大材小用)
参考
- 《游戏设计、原型于开发》 - Jeremy Gibson
- unity如何调用另一个脚本中的变量
- Unity5.x的GUIText被UI Text所取代
Unity项目 - 捡苹果 Apple Picker的更多相关文章
- 为Unity项目生成文档(二)
Unity项目生成文档 接着上篇文章:为Unity项目生成文档(一) .Net项目可在VS配置XML 我们可以在VS中通过配置来生成xml文件,但是unity的project,就算同样配置了xml文档 ...
- unity项目实现“再按一次退出程序”提示功能
unity项目,再按一次退出程序,按第一次做提示,再按一次,程序退出. float _waitTime = 2f;//前后两次按退出间隔时间 void OnGUI() { ) { GUI.Label( ...
- Unity学习笔记(二)——第一个Unity项目Hello Unity
保留版权,转载请注明出处:http://blog.csdn.net/panjunbiao/article/details/9318811 在这一篇文章里,参照宣雨松的<Unity 3D游戏开发& ...
- 关于Unity项目中创建项目遇到的一些问题
1.Unity调用Android的方法默认不是在UI线程执行,所以在Android上写一些页面的重绘的方法,让Unity去调用时,注意要在Android中添加对应的runOnUiThread才可以: ...
- 使用Slua框架开发Unity项目的重要步骤
下载与安装 下载地址 GitHub 安装过程1.下载最新版,这里, 解压缩,将Assets目录里的所有内容复制到你的工程中,对于最终产品,可以删除slua_src,例子,文档等内容,如果是开发阶段则无 ...
- 2017最新苹果 APPLE ID注册流程
不管你是苹果开发者还是苹果爱好者,只要你手中有苹果的终端(IPHONE .IPAD .ITouch,MAC电脑) 你想用苹果的一些服务,你就必须要申请苹果APPLE ID,才能享受到苹果提供高品质的服 ...
- Unity项目开发过程中常见的问题,你遇到过吗?
最近看到有朋友问一个unity游戏开发团队,需要掌握哪些知识之类的问题.事实上Unity引擎是一个很灵活的引擎,根据团队开发游戏类型的不同,对人员的要求也有差异,所以不能一概而论.但是,一些在Unit ...
- 用好lua+unity,让性能飞起来——关于《Unity项目常见Lua解决方案性能比较》的一些补充
<Unity项目常见Lua解决方案性能比较>,这篇文章对比了现在主流几个lua+unity的方案 http://blog.uwa4d.com/archives/lua_perf.html ...
- Unity项目中的资源管理
这是我在2017金山技术开放日分享的部分内容.从贴图资源格式配置的介绍开始,引申出资源配置工具,最后再谈谈一整套项目资源管理方案.在GitHub上可以获取到资源配置工具的代码,是基于下面理念的一份简单 ...
随机推荐
- Cash Machine POJ - 1276
解法 多重背包板子题 多重背包板子 如果上限的体积大于了给定的体积那么套完全背包 否则二进制优化成01背包 代码 #include <iostream> #include <cstr ...
- [USACO15JAN]Grass Cownoisseur
\(tarjan\)缩点+\(DAG\)上最长路. 求一个以\(1\)为起点的最长路和一个以\(1\)为终点的最长路,然后找那个逆行边就行了. 然后这个我\(RE\)了好久,原因是\(vector\) ...
- Python学习-字符串函数操作2
字符串函数操作 find( sub, start=None, end=None):从左到右开始查找目标子序列,找到了结束查找返回下标值,没找到返回 -1 sub:需要查找的字符串 start=None ...
- VS C#报错CS1056意外的字符"(Unexpected Character")
今天重装了下VS2017,再打开之前的项目发现运行不了了,报错如图 解决方法: 找到.NETFramework,Version=v4.5.2.AssemblyAttributes.cs这个文件删除就好 ...
- Jmeter使用基础笔记-写一个http请求
前言 本篇文章主要讲述2个部分: 搭建一个简单的测试环境 用Jmeter发送一个简单的http请求 搭建测试环境 编写flask代码(我参考了开源项目HttpRunner的测试服务器),将如下的代码保 ...
- on绑定事件支持的事件类型
blurfocusfocusinfocusoutloadresizescrollunloadclickdblclickmousedownmouseupmousemovemouseovermouseou ...
- 洛谷 2777 [AHOI2016初中组]自行车比赛
[题解] 为了让某个选手能够获得总分第一,就让他最后一天的得分是n,并且让别的选手的得分的最大值尽量小.于是我们先把目前积分排序,并且让他们最后一天的排名刚好与积分排名相反.即某个积分排名为X的人最后 ...
- jmeter 性能测试
1. Ramp-up Period(in seconds)代表多长时间内启动所有线程 2. Aggregate Report Samples:总共发给服务器的请求数量 Average:单个请求的平均响 ...
- 类中的普通方法伪装成属性 @property
class P: def __init__(self,name,age): self.name=name if type(age) is int: self.__age=age else: print ...
- 【Codeforces 140C】New Year Snowmen
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 每次都选择剩余个数最多的3个不同数字组成一组. 优先消耗剩余个数多的数字 这样能尽量让剩余的数字总数比较多,从而更加可能得到更多的3个组合 [ ...