unity游戏开发毕设_一个程序小白的unity 2D游戏开发的反思与经验

学游戏设计的码农,中传大三在校生,代码水平目前还在进阶中。

这个学期和美术一起进行了一次不成熟的磕磕绊绊的游戏开发。踩了很多坑,就当是毕设前的预热吧,做个总结,希望毕设不会再犯这些错误。因为整个本科阶段做的或者打算做的都是2d游戏,合作的美术喜欢像素风(封面图就是他画的),如果你想做2d像素风的游戏,遇到什么问题欢迎私信交流~(看我知乎的提问记录)

我们的游戏 2d像素风 横版闯关 《N-S》

小白或者同专业师弟师妹可以看看,大神或者老手的话略过吧,本人水平有限,有不对的地方请指正。

1.开始做一个游戏之前一定要有一个80%完整的策划。一个idea是不能被叫做策划的,这次游戏创作过程所有的痛苦都来自于没有一个完整的策划。程序和美术可以参与到策划里来甚至可以提出一个游戏的核心玩法,但是建议在组队的时候team里一定一定一定要有一个专职策划。没有策划遭遇的痛苦主要有:

1)我把核心玩法的所有功能模块都写好了,就等着关卡设计好然后把这些功能组合起来,结果单个功能测试没问题组合起来就一堆bug。有些问题不是1+1+1+1+1我把每个1准备好然后加起来就会等于5,它可能会等于5.2或者4.8的。

2)游戏中的物体放置的位置、质量、磁性什么的都是程序在测试,相当浪费时间,本来该用来改bug的时间要花在数值测试上。为了展示每一个玩法功能,在关卡设计上有点饥不择食了。

3)因为没人来写策划案,所以就是想到什么做什么,没有计划和书面的东西。有些概念必须要落实到纸上,并不是突然想到一个很棒的设计然后美术开始画程序开始写就行的。在结束前三个周,我把代码全都删了然后重写。因为没有策划,代码也是一团糟,动画状态机的连线看着自己都烦。

原先的unity里player动画状态机,现在已经利用分层和分组彻底改好了。

4)很庆幸最后做出了一个可玩版本的demo,但策划方面的羸弱难以让这个idea的骨架长满血肉。一个好的策划会让你专注于写代码,策划的逻辑很清晰,代码写起来也很清晰。血泪教训,千万要有策划啊...游戏开始前就请明确方向,方向对了再去谈创作。

2.毕竟自己是个没有多少项目实战的程序。前期一时爽,后期火葬场。有些事情不能怨没有完整的策划。『磨刀不误砍柴工』,在开始敲键盘之前,一定得想明白一些事情。举几个例子:

1)游戏整体的框架。这个游戏场景要分多少个layer,哪些物体在哪层layer里,哪些物体需要加tag,不同场景间的触发条件,建议用思维导图做一张图表。每个sprite的行为控制,每个事件的监听,UI层的框架都列出来,条理清晰才能保持清醒。

2)游戏中sprite的逻辑,比如说player,上面那个动画状态机。不同动画状态之间的切换条件什么,每种状态开始或者结束的时候GameManager要做什么,这些问题最好纸上先写一遍。因为游戏中涉及到tween插件和timescale的问题,自己在心里理清楚这些逻辑真的特别重要。写个枚举表示player的不同状态,后期加功能和维护起来特别方便。

3)游戏中的变量和函数。举个挺弱智的例子,游戏中的每一个变量是挂在GameManager上面还是挂在每一个enemy上面,千万别每个enemy的update里都在对某个全局变量进行一些矛盾的修改。有些功能要封装好备用。

4)有些优化的问题一开始就要想到,不能等游戏都做完了再去想优化的事情,除非你想把自己代码从头到脚再看一遍。不要频繁getcomponent,instantiate和destroy,对子弹使用对象池,setactive之前要做判断,图片资源的管理,需要设置static一开始就养成良好习惯。习惯的力量!2D其实还好,我最终生成在mac上的可运行文件是700M,班里做3d的组很多都是好几个G,因为不用去考虑商业化运营的问题很多时候都会忽略到游戏项目的优化,但是该遭的罪以后会补回来的。

5)因为我的美术是主策,所以提前在代码里做好一些接口和封装,让他可以直接在inspector面板里进行一些更改,这样会极大减轻我和美术沟通的压力。

6)慎用插件,尤其是同类型的多种插件一起用。游戏中的一些动画我开始是用的iTween,后来由于什么原因我改成了dotween,最后脚本里是两个tween插件共存,虽然没有冲突,但是不建议这么做。虽然说dotween在UGUI上有点问题,还是建议用dotween。一些特效插件、物理模拟插件、相机滤镜什么的,千万慎重啊,不然下面一堆黄色警告你都不知道自己错在哪。

7)一定要写注释。就算只是个bool开关a,也要加一行注释。当然,我发现了一个骚操作...直接中文命名会被耻笑吗...这个请谨慎...虽然貌似并没有出什么bug...但还是英文最好....还有,记得及时git!

8)程序方面自己得到的经验教训其实挺多的,有很多小的点,一时罗列不完。unity其实不难,做出一个游戏来也并不需要多高的编程水平,只要英文还ok,懂得常用搜索引擎,很多问题都不是问题。但是作为一个程序员,需要更多的数据结构和算法的修炼,栈和队列之类的应用到实际才会觉得所学非无用,而作为一个游戏设计者,需要学的就更多了,目前来说我也不知道到底怎么才能成为一个优秀的Game Designer,学无定法,无法可依,是多玩游戏吗?是多去实践吗?长路漫漫,还需修行。

3.关于像素游戏中的一些问题,比如说怎么实现真·像素旋转,像素图片资源的设置,怎么实现像素特效等一些问题这里就不讨论了,像素游戏对于普通的2D游戏来说还是有很多区别的。像素真的是一种很棒的艺术形式,我很喜欢,想毕设也做下去。

4.程序方面还有挺多想补充的,等我整理一下思路,想到了再说。

5.公众号 cuc-gamer 我的游戏并不算太优秀,师哥师姐们的游戏都不错,同班的大佬们游戏也很屌。革命尚未成功,同志仍需努力。大四一年,好好修炼写代码,想做出好玩的游戏。

13游戏毕设 | 一声CUC Gamer 一生CUC Gamer

毕设展映落幕 | 离开新手村 开始新的主线剧情

来年加油!

求dalao的经验...↑↑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Asp.Net MVC项目通过Git同步到新开发设备上后无法作为网站启动

右键项目名->属性->启动项目->单启动项目,在下拉框中选择你的网站主项目就可以了。(由于用的英文版,所以翻译的内容可能略有差异)转载于:https://www.cnblogs.com/chenyangsocool/p/7127469.html

前端参数编码

前端参数编码//对参数编码 function paramsCode(){var params ;$(.param).each(function () {var name $(this).attr("name");if ($(this).attr("type") "radio"){params (&name encodeStr($("input[name"name"]:checke…

如何以访客模式访问_重新访问了访客模式

如何以访客模式访问访客模式是面向对象设计中最被高估但又被低估的模式之一。 高估了它,因为它通常选择得太快了( 可能是由建筑宇航员选择的 ),然后以错误的方式添加后,使原本非常简单的设计肿了。 如果您不遵循教科书…

abap 创建出口历程_SAP abap 需找出口(BADI)的几种方法

现在给出一些比较简单的方法首先,大家要知道,一个程序的出口不会太多,需找出口,很多的时候都是在尝试第二,方法:首先会给出事务码,然后通过SE93找出对应的程序Y第三,se16里面&#x…

Objective-C基础语法高速入门

Objective-C是Mac软件开发领域最基本的开发语言,假如我们对C语言已经非常熟悉或者具有面向对象语言的基础。对于我们学习Objective-C将会非常实用。 方法调用(Calling Methods) 为了可以尽快上手。我们先来看一些简单的样例。Objective-C语法里面主要的方法调用是这…

华为堡垒机_运维堡垒机----Gateone

简介:运维堡垒机的理念起源于跳板机。2000年左右,高端行业用户为了对运维人员的远程登录进行集中管理,会在机房里部署跳板机。跳板机就是一台服务器,维护人员在维护过程中,首先要统一登录到这台服务器上,然…

拼图推迟将Java 9的发布日期推迟到2017年

由于Jigsaw项目的延迟,Java 9的发布日期被推迟到2017年 由于项目延迟的悠久历史,这可能不足为奇,但是看起来备受期待的拼图项目已被延迟。 再次。 好消息是,与上一次使用Java 8不同,它仍在Java 9的开发路线上。坏消息…

前端获取当前url路径

前端获取当前url路径//获取url路径 function getUrlPath(){//获取当前网址var currentPath window.document.location.href;//获取主机地址之后的目录var pathName window.document.location.pathname;var pos currentPath.indexOf(pathName);//获取主机地址var localhostPa…

jquery改变字符串中部分字符的颜色

//该方法改变字符串中中括号内&#xff08;包括中括号&#xff09;的字符串颜色为红色function changecolocer() {  var zf $(#YWFA).text();   if(zf.length>0){     $(#YWFA).html(zf.replace(/\【.*?\】/g,<label style"color:red;">$&<…

java自动推断类型_Java 7的类型推断

java自动推断类型每个优秀的程序员都喜欢编写简洁但有效且经过优化的代码。 类型推断是JDK 7中引入的一种方法&#xff0c;它肯定会为您带来更少键入的好处。 您以以下方式使用Java代码已有很长时间了。 但是&#xff0c;在初始化Collections的特定实现时&#xff0c;您是否曾经…

shell 删除七日内日志_shell日志删除(超容量自动)

背景&#xff1a;避免双十一磁盘被打爆&#xff0c;本想通过crontab执行&#xff0c;但是删除需要密码&#xff0c;所以用作当机器磁盘高于摸个阈值&#xff0c;进行无关性日志强删#!/bin/sh#use#sh clean.sh wmporder_prehost 38(说明&#xff1a;磁盘超过38%&#xff0c;则进…

form表单序列化转换为json对象

form表单序列化转换为json对象//form表单序列化转换为json对象 (function($){$.fn.serializeJsonfunction(){var serializeObj{};var arraythis.serializeArray();$(array).each(function(){if(serializeObj[this.name]){if($.isArray(serializeObj[this.name])){serializeObj[…

拓扑排序 确定比赛名次

确定比赛名次Problem Description有N个比赛队&#xff08;1<N<500&#xff09;&#xff0c;编号依次为1&#xff0c;2&#xff0c;3&#xff0c;。。。。&#xff0c;N进行比赛&#xff0c;比赛结束后&#xff0c;裁判委员会要将所有参赛队伍从前往后依次排名&#xff0c…

JavaFX技巧22:“自动调整大小(树)”表列

JavaFX “缺少功能调查”中提到的“缺少功能”的第一件事就是能够自动调整表/树表中的列大小。 没错&#xff0c;没有公共API是正确的&#xff0c;但是当您密切关注时&#xff0c;您会注意到JavaFX内部一定有执行此操作的代码&#xff0c;因为用户可以通过双击分隔线自动调整列…

aesmiyao php_PHP使用AES,ECB模式块和PKCS5Padding生成对称密钥

首先,要对你需要即兴创作的输入做PKCS#5填充&#xff1a;// source: http://php.net/manual/en/ref.mcrypt.php#69782function pkcs5_pad($text, $blocksize){$pad $blocksize - (strlen($text) % $blocksize);return $text . str_repeat(chr($pad), $pad);}然后选择你的算法并…

解决复合主键

解决复合主键使用IdClass(BzdmKey.class)注解 package entity.po;import javax.persistence.*;/*** Package main.java.pojo* Description BZDM对象的pojo类* Author zhaohuaqing*/ Entity Table(name "ts_bzdm") IdClass(BzdmKey.class) public class Bzdm {/*** …

【数据挖掘导论】——数据质量

数据质量数据挖掘使用的数据一般是为其它用途收集或者收集的时候还没有明白目的。因此数据经常不能在数据的源头控制质量。为了避免数据质量的问题&#xff0c;所以数据挖掘着眼于两个方面&#xff1a;数据质量问题的检測和纠正&#xff08;数据清理&#xff09;&#xff1b;使…

rocksdb原理_[转]Rocksdb Compaction原理

概述compaction主要包括两类&#xff1a;将内存中imutable 转储到磁盘上sst的过程称之为flush或者minor compaction&#xff1b;磁盘上的sst文件从低层向高层转储的过程称之为compaction或者是major compaction。对于myrocks来说&#xff0c;compaction过程都由后台线程触发&am…

P2216 [HAOI2007]理想的正方形(二维RMQ)

题目描述 有一个a*b的整数组成的矩阵&#xff0c;现请你从中找出一个n*n的正方形区域&#xff0c;使得该区域所有数中的最大值和最小值的差最小。 输入输出格式 输入格式&#xff1a; 第一行为3个整数&#xff0c;分别表示a,b,n的值 第二行至第a1行每行为b个非负整数&#xff0…

MD5加密

MD5加密package common.util;import java.math.BigInteger; import java.security.MessageDigest;/*** Package main.java.utils* Description 加密* Author zhaohuaqing*/ public class MD5 {public static final String KEY_MD5 "MD5";/*** param inputStr 输入的…