Unity小组工程实践项目《最强外卖员》策划案&纠错文档
二人小组合作开发的工程实践Unity游戏,在此记录策划案和纠错文档,以便日后方便查询 开发平台:Unity 使用语言:C# 团队成员:2人
**
策划案:
** 最强外卖员策划案 背景: 开始显示ui: 在十字城市中长期存在两个恶势力A,B组织,他们之间长期存在不正当的交易,你作为C组织派来的特务,要想方设法帮助自己的组织获得秘密情报,从而占领这座城市。C组织得知,AB组织都不愿过多暴露自己的势力,经常假借外卖线下委托单让当地的高星级评分外卖员为他们传送情报,因此,你决定以外卖员的身份为伪装,一方面走街串巷了解城市基本情况,更重要的是截取AB组织的重要情报并上报给自己的组织……
十字城部分 游戏封面 开始游戏,设置,退出游戏 点击开始游戏 出现操作说明UI:人物操作按键,任务:这里是当前需要派单的外卖清单,会根据完成情况随时更新,请注意查收(当收到新任务的时候会有小红点提示) 背包系统:里面是待运送的货物,以礼品UI显示 进入UI显示,右上角分别是职业等级,道德指数,摩托车生命值 初始外卖组长提醒玩家好好上班以及,需要随时关注摩托电量,以及及时充电,不然可能会影响派单
为了避免冲突,加油P,对话M
对话台词(为了方便展示,游戏里面对话台词是中英对照,因为确实不能对话框里面放太多字不然小的根本看不见,所以中英确实没办法末尾换行,如果后面效果不佳,酌情取消中英对照,只使用纯英文内容) n-TheDeliveryBro 外卖团长 Hey there, new guy! Welcome to join our delivery team! 你好啊,新来的!欢迎加入我们外卖员队伍! n-TheDeliveryBro 外卖团长 I’m the head of the delivery team, and since this is your first time in the business, I have a few words of advice for you: 我是这里的外卖团长,鉴于你是第一回干这行,有几句话哥得叮嘱你: n-TheDeliveryBro 外卖团长 First, when delivering takeout, you must check the destination and kind of the deliveries.第一,送外卖的时候一定要看清楚目的地和外卖类型 n-TheDeliveryBro 外卖团长 Be careful not to send them to the wrong place, or customers will give bad comments!小心不要送错了,不然顾客会给差评的! n-TheDeliveryBro 外卖团长 Second, although 996 is a blessing, but also pay attention to not tired out! 虽然996是福报,但是也要注意不要累坏了身子! n-TheDeliveryBro 外卖团长 If you feel tired, be sure to get to one of the delivery man‘s rest stops around here in time to replenish your energy! 如果感到体力不支,务必及时赶到这附近的外卖员休息站补充体力! n-TheDeliveryBro 外卖团长 第三,这座城市并不太平,时刻注意安全。 n-TheDeliveryBro 外卖团长 Good luck, little brother! Strive to be the best delivery man! 祝你好运,小兄弟!努力成为最强外卖员吧! n-you 你 All right! Thank you! 好嘞!谢谢团长!
充电站 预制体名字:Electricity_Meter_04 Unpack之后改名ChargePlace 上面给他放了个UI表示这里有电,G键长按空格充电,直到充满
升级外卖第二颗星 从最好的猪肉焦烧送到健康食品店旁边的铁门 From “The best pork charred” to the iron door next to the "health food store. 送肉,枚举类型meat 顾客对话内容: n-you 你 Hello, this is your takeout! 您好,这是您的外卖! n-Customers waiting for takeout 等外卖的顾客 Wow, that’s just in time. Thank you! 哇,太及时了,谢谢你!
升级第三颗,从不知名鱼店送到女装童装店和水族馆之间的铁门 From “unknown fish shop” to an iron door which is between “children’s clothing shop” and “aquarium” 送鱼,枚举类型fish
顾客对话内容: n-you 你 Hello, here’s your takeaway! 您好,您的外卖在这! n-Customers waiting for takeout 等外卖的顾客 Thank you so much, five-star review! 太感谢了,五星好评!
升级第四颗星,从不知名外卖作坊送到国家美食餐厅 From anonymous Takeout to National Cuisine. 枚举类型vegetable
顾客对话内容: n-Customers waiting for takeout 等外卖的顾客 Thank you for delivering our takeout, young man! 谢谢你送来我们的外卖,小伙子辛苦了! n-you 你 You’re welcome 不客气 ——————————————————————————————————————— 送完后,禁止玩家控制权,从旁边走出一个大哥,对话内容: n- the Social Bro 社会大哥 Wait,please. 等等,别走! n- the Social Bro 社会大哥 I heard that you are our best delivery man, I have a big order, with very high salary, take? 听说你是我们这最好的外卖员,我这有个大单子,薪酬很高,接吗? n-you 你 Okay, no problem. I 'll take it. 好的,没问题,包在我身上! n- the Social Bro 社会大哥 Be careful, this must be delivered! 你可小心点,一定要送到
从国家美食餐厅送到来自大陆的鲜花店 From “national gourmet restaurants” to “flower shops from the mainland” 枚举类型document
n-theSocialSister 黑帮大姐 Thank you. I got your stuff, but I have something which needs you to take back. 谢谢你,东西我收到了,不过我这有一样东西需要你送回去。 n-you 你 Sure,OK. 好的可以。 ———————————————————————————————————————
从来自大陆的鲜花店送回国家美食中心 From “flower shop from mainland China” to “national gourmet restaurant” 枚举类型special 玩家自言自语: 等大姐走后,玩家自言自语:“终于拿到了组织需要的文件,我得赶快离开这里!”(为了实现方便,这段剧情被移到这了) I finally got the files the boss needed! I need to get out of here ASAP! 终于拿到了上级需要的文件,我得尽快离开这里! In case not to be questioned, I’d better talk to the Delivery team leader. 为了防止被怀疑,还是跟团长交代一下吧。
因为要和组长对话两次,所以第一次对话完要移除talkable脚本,结尾对话让Conditional Talkable脚本发挥作用
n-you 你 Sorry,Bro, I have chores to deal with recently and I have to ask for leave for some time. 团长,我手头最近有一些私事,需要离职一段时间。 n-TheDeliveryBro 外卖团长 Okay, that’s fine. 好的,没事。
——————————————————————————————————————— 小偷碰到玩家偷外卖对话(就一个小偷) n-The thief小偷 This free gift mine,thank you very much 你的好东西我拿走啦,谢谢您嘞!
——————————————————————————————————————— 警察逮到主角对话(就一辆警车) n-The police 警察 You! Why do you see us so nervous? Come and have a chat with us! 你!看见我们这么紧张干什么?跟我们走一趟聊聊天去!
玩家回到出生点,跟组长交接工作,游戏结束,任务胜利。
如果玩家拿着大哥的东西直接跑了,准备跑回去,从保险代理人这里触发传送
进入新场景则出现对话,大哥狂笑:" n-the SocialBro 社会大哥 II knew it! You were a C agent! 哼,我就知道你是C组织的奸细! n-the SocialBro 社会大哥 Naive child, you didn’t realize what I gave you was fake, did you? 小子,你没想到我给你的东西是假的吧? n-the SocialBro 社会大哥 Now let’s see where you’re going 这下看你往哪跑! ———————————————————————————————————————
倒计时3,2,1,开始跑酷,玩家出生点NewBirthPlace 挂着和大哥的以上对话脚本和碰撞体Box Collider
系统提示:你现在正在被大哥追杀,需要跑回自己组织的势力范围。 进入碰撞体:成功逃离但是任务失败 出口的设置地点有些变动,详见HandOver交付文档 文档里面大概在这个位置: 如果中途被敌人追上,就是显示已被敌人击杀 摩托车生命值少于百分之20提示玩家需要充电 死法:任务失败或者中途摩托车没电被追上了
——————————————————————————————————————— 路人情报对话: Passby1: n-passers-by 路人 Boy, I’m lost. Do you know how to get to the National Gourmet restaurant? 小伙子,我迷路了,请问你知道国家美食餐厅怎么走吗? n-you 你 It’s easy. Just turn left and go straight for 50 meters. 很简单,您只需要向左转然后直走50米就到啦! n-passers-by 路人 Thank you so much! I was going to a party, and I heard that all the bigwigs of this town like to party there! 太谢谢了!我是去赴宴的,本市黑白两道的大人物都喜欢在那里聚会! ——————————————————————————————————————— Passby2: n-passers-by 路人 What, another delivery guy? 怎么,又一个送外卖的? n-you 你 ? n-passers-by 路人 I have no regard for you errand boys, only god knows who you are secretly working for! 我可瞧不上你们这帮跑腿的,鬼知道你们背地里都给谁当狗腿子! n-you 你 Well, I guess this gentleman’s parents didn’t teach him to respect other people’s work! 好吧,看来这位先生的家长并没教过他要尊重别人的工作!
**
纠错文档
** **
最强外卖员纠错文档The strongest delivery man:error correction document
本文档用以记录开发过程当中遇到的所有错误以及解决办法
** This document is used to document all errors encountered during development and how to resolve them
1在测试任务系统时,意外发现部分UI颜色、透明度等属性消失 如图,在BUG出现时,图中所有UI有字的地方全部变成了纯黑色,Panel的透明度设置也消失。整个UI带颜色的部分就是一片死黑 解决办法:1.重新运行,2.如果重新运行不行的话整个项目关了重新启动,之后啥都正常了 Unity项目老不好,多半是欠重开和删档 (图片是跟着网课学的测试项目) 2.Unity项目打不开,一打开就卡回hub界面 解决办法:强行退出hub,重开,发现提示准可证不合要求,去管理准可证发现是没登录,应该是之前重启电脑更新,hub被自动退出了,重新登录hub,成功打开。 参考文档: 【Unity 之 关于UnityHub无法打开项目的问题(弹出Unity启动界面有退回到Hub选择工程界面)】https://mbd.baidu.com/ma/s/Vq1tL3tL
基本上所有的问题这里面都涉及了。
3.使用CreateAssetMenu通过CreateAssetMenu为使用自定义资源(.asset) 添加 Assets 菜单按钮时发现无法创建
检查脚本,发现类别继承错误,不能继承MonoBehaviour类,应该继承ScriptableObject 类 相关知识: Unity 通过CreateAssetMenu为使用自定义资源(.asset) 添加 Assets 菜单按钮_LixiSchool的博客-CSDN博客_createassetmenu unity
更正继承类别之后,问题解决。
4.UI的scrollbar 无法滑动到底部,而且UI无法稳定在调好的大小 解决办法:scrollbar以及handle都不要用圆形的UI,用长条形的 目前slider没问题,如果不行的话参考这条的解决办法
5.导入购买的模型素材之后,运行模式无动画播放 解决办法:检查发现模型缺少avatar组件,在模型预制体的inspector界面选中rig—avatar Definition,create from this model,生成avatar组件,然后赋给模型身上自己创建的动画状态机,并且把模型动画拖入状态机,再运行即可看见模型动画。 (模型是淘宝素材店买的)
3dmax 动作导出到unity里会有个avatar 怎么去掉它? - 知乎 (zhihu.com) 在最后一步换个选项选择,这个教程是教怎么移除avatar组件的,而我是需要生成avatar组件。
6.使用NavMeshAgent组件时,报错Stop()函数已过时
附录:一个关于导航网格代理的不错网课: 零基础学Unity教程之导航系统的建立(完整版)从零开始制作游戏角色和导航系统 一学就会 U3D/Unity/游戏制作/导航 B0096_哔哩哔哩_bilibili
7.切换场景不销毁物体的办法:
给导航网格添加障碍物,不希望玩家穿过场景当中的某些东西寻路 静止物体:地形类型选用Not Walkable 移动物体:使用Nav Mesh Obstacle组件,勾选Carve选项在导航网格上掏出一个洞,Center和Size调节偏移尺寸,Shape选形状(圆形、方形—)
8.对话系统播放第一个字就没有然后了 解决办法:经过检查,发现是开启对话系统之后暂停的功能惹的祸,可能是暂停游戏导致了协程停止和动画不能播放,把这行代码去掉之后问题解决,并且任何代码都不能写暂停对话系统
9.拿外卖的角色到达销毁地点之后并没有销毁自己,而是继续原地维持行走状态 解决办法:对比黑帮大哥的脚本,这个GotoDestination函数要在Update里面每帧调用,这样才能保证isArrive()函数每帧都在判断是否玩家到达了既定地点,然后才能执行为true的操作,不然只调用一次GoToDestination的话,虽然NPC最后到达了销毁地点,但是IsArrived始终是False,所以他不会停下行走动画,也不会销毁自身 修改代码以后,问题解决:
10.不兼容游戏自设的快捷键按E对话,也不允许运行模式下按ESC出去更改参数:快捷键不兼容,更换成冷门不容易冲突的M键,不用按ESC,把鼠标硬拽出去,在旁边的场景下点一下即可 移除对话图标(NPC子物体)时遇到代码报错:
11.因为场景过大,跳转场景时卡死无法运行
解决办法:移除另一个场景的摄像机和缺少脚本等一切报错组件,拖拽成为一个大型预制体嵌入初始场景内,避免场景跳转造成卡顿。 12.跳转到废土场景时,玩家闪烁一下到达目的地,然后被卡在距离原位有一段距离的墙里面 猜测原因: 因为俩套模型的拼接,nav导航系统并没有连起来,导致玩家到不了那个地点从而被打回了原nav能到达的最远处
使用了现炒现卖现学现用的OffMeshLink,把Nav的跳跃距离和水平跨度都拉大,把中间缺失的路复制预制体补平,都不行。
截止目前我已经十分确定,这就是那个大楼搞得事情,那个路线规划都划到从楼顶上一跃而下了啊! 此图没有截,喊我撤回很不容易对劲的Nav去给这个碍事的大楼一个特写?不可能!绝对不可能! 本来打算当穿山甲拆条路出来,但是因为这个场景的模型是一体的,没有办法,我只能强拆了一栋楼。
这下没事了,看吧,我就说我的脚本没问题,哈哈。 我打算从周边挪一些用不着的楼来美化一下这个空缺,瞧瞧,为了这个碍事的楼,Nav和主角的牺牲多么大啊,这都可以随便找个地儿落地成盒了。
就这样吧,有点挤,但是玩家过得了(微笑) 妙啊!!
15在实现长按充电的时候受到了困惑,不知道怎么写长按的代码,经过百度、B站、CSDN的搜刮,最后偶然看见下面这个帖子: Unity的GetKey()、GetKeyDown()以及GetKeyUp()区别与用法_颤抖的小学弟的博客-CSDN博客_getkey 把GetKeyDown改为GetKey,问题解决
16.制作路人随机行走功能时,发现CheckDir(检测距离)和CheckAngle(检测角度)这两个变量赋值失败,虽然定义时写了默认值,也在初始化函数里面调用了赋值函数,但是Inspector面板里面还是都是0
解决办法:在每个Inspector面板里面手动赋值,问题解决,而且就这么来了一趟,所有的都好了,就很奇妙
17.因为所有随机行走人员身上都是一模一样的脚本,用Random.Range产生的随机数也是一模一样,导致他们一运行所有人都往同一个地方走,不够随机真实。 解决办法:经过百度,找到了产生每次不一样随机数的办法: Unity使用Random每次生成与上次不一致的随机数_游在雨城的博客-CSDN博客_unity 随机数
经过自行修改,封装为函数以后,实现功能。 public int GetRangeNum()//得到每次不一样的随机数,避免路人都往一个地方走 { //最后输出的与上次随机数不同的随机数 int getRangeNum = 0; //每次随机产生的随机数,用于与上次进行比较 int rangeRadomNum = 0; //用于统计每次输出的数,方便观察 //int numCount = 0; //numCount++; do { rangeRadomNum = Random.Range(0, directPoints.Length);//产生0-目的地数组长度之内的随机数 } while (getRangeNum == rangeRadomNum);//只要当前得到的数和上次得到的数一样就继续执行 getRangeNum = rangeRadomNum;//把最后得到的这个不一样的数保存下来并且返回回去 //Debug.Log(“第” + numCount.ToString() + “得到的随机数:” + getRangeNum); return getRangeNum; }
”我们各奔东西,大家都有光明的未来“:
18.运行模式下无法拖动人物改变位置,检查nav无问题 解决办法:拖动人物一定要拖到最外层级,不要拖成了里面的某一个子物体,这不是nav的问题
19.不明原因报错,点不开具体写的是哪段代码的毛病: 这种莫名其妙的毛病一般都是Unity自己抽风卡出来的,关了重开就行了 20.导入汽车模型之后,测试运行发现模型往下掉 吓得我赶紧上网搜了个教程看看: Unity物体往下掉 如何站在地面上_刘建杰的博客-CSDN博客_unity穿过地形往下掉 我一看这也没勾选啊,整不会了都
那就手动找找问题吧,看了一下掉的最厉害的四个轮子,我不理解,你说他把use gravity用上干啥? 把重力取消了,测试项目里面倒好了 可是正式项目里面他还是往下掉!!!
没办法,我只能再去查个教程 https://mbd.baidu.com/ma/s/WjcWWkbv
跟上一个教程说的正好相反····:
但是勾选之后真的不掉下去了耶!
等等,只是车身不掉下去了,那几个轮子动画一播放还是照样该掉不误。 搞生气了,之间给他刚体组件移除了!
可算是不掉了,动画也正常了,可把我累的······
21.动画状态机报错AnimationEvent has no function name specified! Unity3D “xx AnimationEvent has no function name specified!”解决方案_Emperor_Dandy的博客-CSDN博客
这个是添加Event的 这个才是我们要的添加关键帧的 22.一个奇怪的错误,不知道为什么运行模式下发现UI画布跑到了场景中间,试图把整个场景物体拖拽到UI后面,发现就不是初始运行那个漂亮的景象了,所以我猜测让UI跑这里是作者为了一运行就这个景色有意为之(估计是固定的Camera的位置?因为我们的项目需要定位在主角附近所以这里可以随便改) 不知道为什么会出现这种灵车漂移惨案:
解决办法:经过检查,发现应该是误触了Nav Mesh Agent的如下属性:
跑酷的另一条路Nav寻路无法到达 一个并没有解决问题但是以后可能用得着的链接: Unity学习笔记–解决NavMeshAgent无法到达的点_就一枚小白的博客-CSDN博客 Unity-导航网格链接 (NavMesh Link) 23.如图所示,在通往错误出口的这条路上Nav不知道什么原因无法烘焙,始终不愿意相连 解决办法:如果确实无法调整Nav适应的话,可能只好考虑禁用玩家身上的Nav Mesh Agent
24.不知道怎么实现跑酷开始前倒计时 解决办法: Unity中实现倒计时的几种方式_上班摸鱼.的博客-CSDN博客_unity倒计时实现 报错:Unity 报错TLS Allocator ALLOC_TEMP_THREAD, underlying allocator ALLOC_TEMP_THREAD has unfreed allocati 解决:重开,不要看网上的骚操作 解决办法:
此处删去空格即可 25.加入Nav障碍物的步骤: (2条消息) unity-Navigation寻路-添加障碍物Obstacle_蝶泳奈何桥.的博客-CSDN博客
没有动画状态机的物体挂上需要调用状态机的脚本报错 解决办法:创建空状态机,随便建立几个空状态,把触发条件一律都写上,这样就不会报错,也没有什么影响。
|