Unity学习笔记5:2D坦克大战
Posted 肥宝Fable
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity学习笔记5:2D坦克大战相关的知识,希望对你有一定的参考价值。
之前看了很长一段时间的视频,但是基本没有手动操作过,究竟沉淀了多少还真难说得清楚。
所以直接看实例视频跟着做了。
视频地址:http://www.sikiedu.com/my/course/90
下面的内容多是心得或者一些坑的记录,带有大量私货,可能存在很多认识性的错误和局限性。
=================================================================================
.unitypackage unity资源包
双击即可打开,然后点导入,就能解压到Assets目录下了。
也可以直接拖到Project面板
资源包里面的内容包括音频、字体、图片,这些都是原来格式,即其他地方也是能够直接使用的通用格式。
=================================================================================
meta文件:
资源导入后,会给每个资源文件生成meta文件。meta文件记录了一个id,其他地方引用的时候都是用这个ID的。一般情况下这个id是不应该被修改到的,所以提交svn的时候要注意查看。太古1初期的时候,因为很多人提交,导致id经常被修改,经常出现资源丢失的情况,应该就是这个原因了。
meta文件除了记录id还记录了很多其他属性。理论上原本的资源文件加伤对应的meta文件才是一个整体,如果复制到其他路径或者项目,是可以直接使用的。
meta本质上是一个文本文件,场景、预制件、动画、控制器、材质等,本质上也都是文本文件。用notepad++就能打开并查看里面的内容。这意味这只要有耐心,是可以读懂里面的每一个细节的。只是大多数属性并没有立刻弄清楚的必要。本质上这些都是配置文件。
这点对服务端的人来说很重要,刚接触Unity的时候,碰到了一大堆新的知识点,看似毫无关联、散乱,本质上它们都是一堆配置,是一些基础的配置的变体。unity只是根据这些配置做了不同的处理,不同的表现。这个隐藏于背后的程序可能就是unity这个框架的内核。估计要非常非常深入才能接触到,甚至大部分程序员都没接触到就转管理岗或者转行了。
所以习惯服务端的思维的人一开始接触untiy的时候,应该把自己从程序员的身份抽离出来,尝试去代入策划的角色,自己就是去配置一点东西。或者更加容易代入进去,而不会处处产生一种格格不入的感觉。
(嗯。。。对陌生领域的学习,被打断了很难再聚集起来。经常会想着自己想到哪里了。刚刚的思路被打断了,我甚至不知道之前想到什么了。看服务端代码的话,基本上不会这样。思路被打断了,只能想到什么继续写下来了。)
音频,图片(视频本质上就是一连窜的图片)这种通用的东西,感觉上不能完全看作配置,已经算是非常边界的东西了。跟其他领域交接,并沉淀的产物,或者说根本就是其他领域的东西在计算机领域的实现了。刚刚说到的文本类的文件,是封装后的产物。
=================================================================================
C#脚本
双击就能打开,结果直接出现在服务端的VS里面了,然后发现无法识别引入的类。原来只能独立打开根目录下的.sln文件。
双击打开后提示我的.net framework版本太低。跟着提示去下载,安装的时候又提示已经安装更高的版本。这个问题不知道其他人是否会碰到,可能是因为我的win7升到win10,然后又被我升了VS版本,期间各种卸载删除.net framework。导致有些细微的地方已经傻了。最后下载了个对应版本的开发版.net framework。终于成功打开VS的工程,并发现可以识别视频中的代码了。
C#调试
设了断点,发现原来是不能自动触发的。找了网上的解决方案:
vs更新下载速度慢,可以用一下方式尝试:
修改hosts文件
1.地址:默认安装在 C:\\windows\\system32\\drivers\\etc
2.用记事本或者其他编辑工具打开hosts,在最后一行加上
110.53.72.104 download.visualstudio.microsoft.com
- 这里的ip地址可能失效了。可以去https://tool.chinaz.com/dns/ 查一下 download.visualstudio.microsoft.com
3.然后运行cmd,执行以下命令,刷新dns
ipconfig /flushdns
- 由于上面的地址可能会失效,所有搞完了记得还原回去。否则时间长了自己也会忘记。
4.重新再进行安装,更新或者更改
这个方法,我也不知道有没有效,之前是卡70%,用了这个方法后卡90%。最后我还是只能回家等偶尔1k的速度。第二天来了就装完了。
要注意安装过程中好像是无法退出的,点击删除是整个开发模块都被删掉。所以还是建议下班前搞搞,然后回家等自动完成就好了。
安装完之后,在unity菜单Edit-Preferences-External Tool-Extend Script Editor。下拉的时候可以看到有VS选项了。
再在VS上面点调试-附加Unity调试程序,找到附加程序就行了
运行游戏,断点成功
=================================================================================
Input :
unity键盘鼠标输入都在Input可以找到,这里有很详细的描述了,初学只要记得Input类,用到的时候百度应该就可以了:Unity键位输入及Input类
各种查找,都没有人关心为何WSAD键可以当做方向键使用,可能我没搜索正确,更大的可能是大家都默认是这样,没什么不妥。
看到最后的视频的时候提到 Edit-Project Setting-Input,原来在这里。
这么隐蔽,初学者好像很难找到对应的关键词并作出搜索。
=================================================================================
C#的值类型和引用类型 传送门
C#的类和结构还是非常不同的,这点跟C++差别很大,写代码的时候要注意。
=================================================================================
对场景上的对象加部件,改属性是不会对预制件产生变化的,所以有改动的时候可以点Apply All
只有修改了才限时Revert All(还原修改)和Apply All
另外要注意,运行游戏的时候,Prefab这一行是直接找不到的。而且修改过的东西,在关掉游戏之后,全部还原,所以要小心白干了。
=================================================================================
碰撞:
需要加上碰撞盒子(box collider)以及刚体(Rigidbody)
只有带有碰撞器的实体才能碰撞,勾选了IsTrigger则成为触发器,是没有质量的
这个在我们游戏中是很少用到,可以在碰到的时候再去详细学习。
Update()函数是每帧一次,
FixedUpdate()是固定时间执行的,对于碰撞,要固定时间执行
碰到子弹可以打坦克,但是跟墙这些东西无法触发碰撞;坦克可以跟墙触发碰撞的情况。
最后发现,需要碰撞双方要有一个是刚体,看视频好像只加了坦克的刚体,可能看漏了,发现会掉下去。最后发现可以通过设置重力比例才去除重力。
碰到问题的时候有时候知道是某个部件的事情,但是就是百度不出来,可能是因为太简单了,看一下这个部件的属性,百度翻译一下可能自己就能解决了。
=================================================================================
欧拉角和四元素角
这个东西在现在的MMORPG游戏里面,一般只有做战斗的人才会接触一下,其他人基本用不到。不过也是要知道一下的,看一遍就行了。
5种旋转方式
=================================================================================
父物体和子物体的层级关系(是叫层级么?)
把护盾拉到坦克实体下面的时候,可能一开始不知道搞错哪里了,直接让出生的护盾覆盖在坦克上面,而且好像无法消失。后来删掉,重新拉一次护盾就没问题了。
如果要修改层级可以改Order in Layer的数值,数值越大,层级越高
=================================================================================
总结:
这个实例教程,代码不算高效,不过内容是针对性优化过,确实非常通俗易懂。
脚本里面很多用到其他预制体或者资源关联的地方,多数是C#脚本加个属性,然后在Unity里面直接拉过来关联,感觉这样很乱,缺乏集中管理。不知道是为了简化新手的学习难度,还是约定俗成的规则。
预制件应该是非常重要的内容,客户端应该已经做好了大量的UI预制件。拼界面很多时候都是有现成的东西。
从坦克大战,再对照我们的游戏,MMORPG存在非常大量的属性系统功能,基本上都是UI功能。经常听客户端说做了几年,一直在拼界面,应该不是夸张的说法。
跟战斗直接相关都是已经做好的内容,各种玩法多数也是服务端去实现规则,然后客户端只是一个副本界面,进去后也只是一个数据面板。确实存在很大差异。
或许客户端的东西不是太简单,而是难的东西都集中在个别系统内,解决了这个就解决了大部分问题,剩下的都是堆功能的人了。
从这个角度考虑的话,欧拉角、碰撞这些初学的时候知道一下就好了,是不需要深究的。
应该把精力放在UI相关的内容上面去。
另外UI的内容是放在画布上,跟场景的内容是独立性非常高的两大块。目前应该找写UI操作比较多的实例来进行学习。
以上是关于Unity学习笔记5:2D坦克大战的主要内容,如果未能解决你的问题,请参考以下文章