项目展示

Github项目地址:Apple Picker

涉及知识

  • 正投视图
  • 3D场景内树与苹果的图层
  • 记录最高分到本地

准备工作

模型制作:

  1. 基本模型创建

    • 树叶:sphere 拉伸为椭圆形,绿色材质球
    • 树干:cylinde 修改为合适尺寸,棕色材质球
    • 苹果:sphere 附加深红金属光泽球
    • 篮筐:cube 修改为合适尺寸,黄色材质球
  2. 位置、层级关系
    • 调整树叶树干的位置搭配,呈现简单树木形态
    • 另设的空物体AppleTree包含着树叶和树干
  3. 标签、图层
    • 新建标签Apple标记苹果物体
    • 新建图层 AppleTree、Apple和Basket,后在Edit->Project Setting->Physics内取消Apple与AppleTree图层的碰撞。后修正对应物体图层
  4. 相机及预制体
    • 调整主摄像机为正投影(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
    • 调高树的高度(本例方案)
    • 缩短实例化苹果的间隔
    • 先隐藏再延时销毁苹果(理论可行,但感觉大材小用)

参考

Unity项目 - 捡苹果 Apple Picker的更多相关文章

  1. 为Unity项目生成文档(二)

    Unity项目生成文档 接着上篇文章:为Unity项目生成文档(一) .Net项目可在VS配置XML 我们可以在VS中通过配置来生成xml文件,但是unity的project,就算同样配置了xml文档 ...

  2. unity项目实现“再按一次退出程序”提示功能

    unity项目,再按一次退出程序,按第一次做提示,再按一次,程序退出. float _waitTime = 2f;//前后两次按退出间隔时间 void OnGUI() { ) { GUI.Label( ...

  3. Unity学习笔记(二)——第一个Unity项目Hello Unity

    保留版权,转载请注明出处:http://blog.csdn.net/panjunbiao/article/details/9318811 在这一篇文章里,参照宣雨松的<Unity 3D游戏开发& ...

  4. 关于Unity项目中创建项目遇到的一些问题

    1.Unity调用Android的方法默认不是在UI线程执行,所以在Android上写一些页面的重绘的方法,让Unity去调用时,注意要在Android中添加对应的runOnUiThread才可以: ...

  5. 使用Slua框架开发Unity项目的重要步骤

    下载与安装 下载地址 GitHub 安装过程1.下载最新版,这里, 解压缩,将Assets目录里的所有内容复制到你的工程中,对于最终产品,可以删除slua_src,例子,文档等内容,如果是开发阶段则无 ...

  6. 2017最新苹果 APPLE ID注册流程

    不管你是苹果开发者还是苹果爱好者,只要你手中有苹果的终端(IPHONE .IPAD .ITouch,MAC电脑) 你想用苹果的一些服务,你就必须要申请苹果APPLE ID,才能享受到苹果提供高品质的服 ...

  7. Unity项目开发过程中常见的问题,你遇到过吗?

    最近看到有朋友问一个unity游戏开发团队,需要掌握哪些知识之类的问题.事实上Unity引擎是一个很灵活的引擎,根据团队开发游戏类型的不同,对人员的要求也有差异,所以不能一概而论.但是,一些在Unit ...

  8. 用好lua+unity,让性能飞起来——关于《Unity项目常见Lua解决方案性能比较》的一些补充

    <Unity项目常见Lua解决方案性能比较>,这篇文章对比了现在主流几个lua+unity的方案 http://blog.uwa4d.com/archives/lua_perf.html ...

  9. Unity项目中的资源管理

    这是我在2017金山技术开放日分享的部分内容.从贴图资源格式配置的介绍开始,引申出资源配置工具,最后再谈谈一整套项目资源管理方案.在GitHub上可以获取到资源配置工具的代码,是基于下面理念的一份简单 ...

随机推荐

  1. linux环境下时间的查看和修改

    查看日期和时间date 查看时区date -R 查看UTC时间date -u 修改日期[root@centos ~]# date -s 20181230Sun Dec 30 00:00:00 EST ...

  2. MAC上postman离线安装时提示加载扩展程序出错怎么办?

    目前的postman插件如果想正常使用,必须安装Postman Interceptor插件,这样才能直接使用chrome浏览器的cookie等信息,否则postman是无法完成老版本的功能的.post ...

  3. flask——CSRFToken保护

    根据 csrf_token 校验原理,具体操作步骤有以下几步: 1.后端生成 csrf_token 的值,在前端请求登录或者注册界面的时候将值传给前端,传给前端的方式可能有以下两种: 在模板中的 Fr ...

  4. 泛型约束 ---类型参数上的限制(where T:class,new())

    今天遇到的一个问题,找到了解决办法,收藏以后记得看一下!

  5. [luoguP1351] 联合权值(Dfs)

    传送门 距离为2的点会产生权值,第一问,只需要在dfs的时候把一个点相邻的点都处理出来就行. 具体处理方式看代码,然而这样只处理了一遍,最后在乘2就好了. 第二问只需要处理一个点相邻的点中最大的和次大 ...

  6. [luoguP2701] [USACO5.3]巨大的牛棚Big Barn(DP)

    传送门 经典问题. 找出最大的不包含 1 的正方形. f[i][j] 表示 以 (i,j) 结尾的最大的不包含 1 的正方形 f[i][j] = min(f[i - 1][j], f[i][j - 1 ...

  7. centos7 安装mongodb3.4 及用户管理

    https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/1.semanage command not found yum ...

  8. - > 并查集+路径压缩(详解)(第一节)

    先举一个友爱的例子解释一下并查集: 话说江湖上散落着各式各样的大侠,有上千个之多. 他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的,就免不了要打一架.但大侠们有一个优点就是讲义 ...

  9. Ubuntu查看隐藏文件夹的方法

    比如要查看当前用户目录下的隐藏文件夹 进入/home/jim目录,使用快捷键Ctrl+H,即可显示隐藏文件夹,如果要关闭,再次按Ctrl+H即可. GUI操作如下所示: 进入文件夹,左上角->查 ...

  10. Behavioral模式之Interpreter模式

    1.意图 给定一个语言,定义它的文法的一种表示.并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 2.别名 无 3.动机 假设一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各种 ...