unity3d基础学习

2018-07-09 16:56:35 q764424567 阅读数 46300
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Note:

因上一期 《Unity3D自学之路》 系列教程资源比较旧(2018.7.9)
很多资源图片资源失效

故更新 《Unity3D自学之路2.0》2020.3.11 船新版本
在新的一年,大家一起加油

JulyOctober2019AprilJulyOctober20201.0版本 2.0版本 版本版本更新

旧版本:
2018.7.9-《Unity3D自学之路1.0》

新版本介绍:
2020.3.11-《Unity3D自学之路2.0》
保留上一版本总体不变的基础上,更新图片、资源的链接

正文

Unity自学之路之零基础篇

目标

掌握面向过程(C语言)的基本概念和基础操作。

如题所示,这是一篇是针对那么一点编程基础都没有的人的。

推荐郝斌老师的C语言基础视频,郝斌老师也是自学过来的。因此他讲的课也是比较适合自学的朋友。
网上有很多资源,我建议大家可以边看郝斌老师的视频边跟着网站和书来。在这里给朋友们推荐一个网站,慕课网,因为它图文说明,且还可以操作。

在这里插入图片描述
总之就是多操作,把能看到的代码都用编辑器自己实现一遍。对了,编辑器我也为大家准备好了,因为大伙们是零基础嘛,所以我给大家配套的是小巧的编辑器 一 Dev-C++。

C语言视频教程网盘资源链接:
链接: https://pan.baidu.com/s/1ykEvE_-ogzJkJi4JHAUDqQ 提取码: 875p

Dev-C++编辑器:
https://sourceforge.net/projects/orwelldevcpp/

网站学习教程:
http://www.imooc.com/learn/249

我希望这篇文章能给你的Unity自学之路中开启新的篇章,还有我是个很有耐心的人,如果你在学习中有什么不懂得问题,我都可以和你慢慢的理解它哟。

Unity自学之路之初级篇(上)

到了这个阶段,我相信大家对基本数据类型,流程控制,数组,函数等都有了一定的了解了吧?接下来就缺面向对象的概念了。让我们进入面向对象编程的世界吧!!

还是老样子,书籍与视频的结合。

首先推荐大家看这本书《21天学通C#》,这本书的特点就是,简单易懂,没有那么多深奥的东西,且里面的每一个例子都非常精华,直扑主题。我个人觉得啊,刚刚开始学不需要学的那么深,要有一个循序渐进的过程,对吧。
在这里插入图片描述
这本书有些内容是不需要看的,当然你想看也行,至少我当时是没有看。

好了,书是有了,那教程呢?

教程的话,我相信大家都应该认识一个老好人吧,siki老师,他是一个很有耐心,且很负责任的一个人。他讲的C#教程与Unity有一定的联系,因此请大家看他的C#教程即可。

好了,等你把《21天学通C#》看完之后,就要看下一本书了,那就是《图解C#》,这本书实在是太经典了。
在这里插入图片描述
这本书利用图文的形式详细的讲述了程序运行时内存的分配状况,这便能让你最一些底层的东西有了一定的了解,这便扩展了你的编程思维。

好了,Unity自学之路之初级篇(上)到此就完了,学习是一个不断积累的过程,因此我希望大家不要贪快而导致基础不牢。你懂的,基础不牢就如一栋大楼,地基没打好一样没啥卵用。

书籍资源:
  书籍资源链接:https://pan.baidu.com/s/178FMCnXlBlmhtLVAi37Mbg 提取码:n4xe
教程资源:
  C#初级:链接:https://pan.baidu.com/s/1CMsW2plFOO60DIKwsWBrog 提取码:wpgk
  C#中级:链接:https://pan.baidu.com/s/1SVRWCO4cix0K759LCq3Byw 提取码:upke
  C#高级:链接:链接:https://pan.baidu.com/s/1uKp9F87UXpe9-Qv56ACtfg 提取码:39j6

我希望这篇文章能给你的Unity自学之路中开启新的篇章,还有我是个很有耐心的人,如果你在学习中有什么不懂得问题,我都可以和你慢慢的理解它哟。

Unity自学之路之初级篇(中)

好了,学了那么多基础的东西了,现在是时候接触接触Unity了。让我们进入Unity的世界吧。

这个时候的书籍,相信很多人都知道是哪本书了吧?

那就是《Unity5.x从入门到精通》(对的,你没看错,不是Unity5.x从入门到放弃,,233)。这本是中国官方出的时,内容上也比较通俗易懂(至少对于Unity4.x。。好多了)。
这里写图片描述
看这本书的目的主要是开始认识Unity,对Unity的基本操作有一点的了解。

视频资源

对于视频资源嘛。不用说,那当然是我们的siki老师了。一个有耐心的、有责任的老师。

对于这个阶段来说,视频嘛,我们就看一些基本操作、和一些基础的视频即可。

所以我首先推荐大家能跟这我的步骤来:

  1.首先先看Unity的基本操作,方便了解一些基础的操作和认识一下Unity的大概结构
  2.其次看一些基础的案例视频,在我看来所谓的基础案例视频就是那些编写代码上没有那么复杂(即大多使用面向过程来编写)、没有设计到一些设计模式和算法的教程。

Unity3D入门教程视频链接:https://pan.baidu.com/s/1mhDZO7m

总结

在这个阶段呢,主要是提高大家对Unity的了解和兴趣。让大家大概了解Unity到底是一个什么样的东西,以及知道那是如何工作的。总之就是认识它吧(妈蛋,又不知道怎么说了,好了唠叨至此吧)

PS:对了,在前面的学习中有什么问题的朋友可以加我微信,我会尽量的帮助到你的。
wx:yao_11521
qq:764424567

Unity自学之路之初级篇(下)

过前面的学习,我相信现在大伙们对于一些简单的程序阅读起来是一点压力都没有了吧(妈蛋,这语文,肯定有病句,但愿你们能懂意思吧。。)?

好了,现在一些简单的程序都可以写出来了,就是代码逻辑上还是不够强/好/猛(不知道用那个字)。就是一些想法都能通过代码实现了,只是代码写得有点长,有点乱。

其实我也不知道怎么说明,总之就是代码不够Perfect吧。现在举个例子:
这里写图片描述
大家有没有发现一个问题呢。Yes,那就是有重复出现的语句!!!

这个时候我们要怎么做呢?那就利用面向对象的特征中的封装来解决。
这里写图片描述
我们就可以把相同的东西提取出来,把它们封装到一个函数中去。这样的好处相信大家都知道,如果我们现在要把Hi改为Hello呢?那么我们只需要改一个地方即可(只需在SayHello函数中把Hi改为Hello即可)。如果是上面第一种方法的话,那我们就得改3个地方。看吧,这样的代码是不是就Perfect多了?

好吧,讲到这里,相信有些朋友知道我要在这章里讲什么了吧?

那就是设计模式

设计模式
设计模式的概念:

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

好了,还是老样子。书籍和视频的结合学习。

对于书籍呢,相信有一些朋友也知道是哪一本书籍了。那就是非常经典且Humor的《大话设计模式》

在这里插入图片描述
这本书还是不错的,案例贴切生活,并且非常的有趣儿,易于理解。记得我那个时候看着看着就入迷了,我居然把这本书当成一个小说来看了,真XX有趣~!!哇哈哈。

视频教程

对于视频,不怕大家说我。由于我的学习方式是书籍和视频的组合,因此在我看这本书的时候,为了能结合视频来学习,我是直接百度,然后随便下了一个设计模式系列的视频教程。

不过请大家放心。对于这个视频教程,我还是蛮认可的,讲得也是非常的好。只不过该教程是用Java来讲课的。

Don’t wrong,Please!虽然是用Java来讲,但是Java和C#其实就是一对兄弟,除了一些关键字不一样,其它都差不多。因此请大家放心学习,如有什么关于这个教程的问题,随时可以给我说说。我尽可能帮助到大家。

好了,今天就到这里吧。下一篇就是我最近学的东西了,也就是Unity自学之路之中级篇了。如果学到这里的朋友,那就让我们一起学习,一起进步吧!!可以得话,我们一起分享怎么样呢?

设计模式书籍资源:https://pan.baidu.com/s/15vJKWoJKPkT9CI4GkvT_Fg 提取码:09sd
设计模式视频资源:http://www.ibeifeng.com/goods-10.html

Unity自学之路之中级篇(上)

好了,我们学到这里,对于面向对象的四个基本特征的运用已经掌握得差不多了吧。对自己写的程序也自信了许多了吧。

那么,是时候运用这些特征,加上所学的设计模式去做一些事情了。

能做哪些事情?
你们应该见过Array、List这些数据吧,你们也应该有操作过它们吧。但是,你们知道它们是怎么在程序中运作的吗?还有我们为什么要知道它们在程序中的运动呢?

因为我们更好的操作它们,那就得了解它们,这样我们才能随心所欲的操作它们去完成我们要完成的事情。正所谓,“知己知彼,百战百胜”。

算了,我不知道怎么写了,毕竟语文不好。不和大伙们绕了,在这篇文章里主要给大家说的就是数据结构。

数据结构
这时候可以会有人有疑问,为什么我们不先去学习数据结构再学习设计模式呢?

至少我是这样的情况,以前我也是这么想的,因此我就先去学了数据结构,结果太难搞懂了,这便导致我的学习效果非常的差。

之后经过学习设计模式后,对面向对象的基本特征掌握的非常熟练后。当我再去学习数据结构的时候,OMG。居然没有那么吃力了,这种感觉太棒了。

说了那么多,我们先大体了解一些数据结构的概念吧(我是直接百科的)。

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率的算法。数据结构往往同高效的检索算法和索引技术有关。

正如上面所说的。”通常情况下,精心选择的数据结构可以带来更高的运算或者存储效率的算法。数据结构往往同高效的检索算法和索引技术有关“

大体上就是说选择正确适合你的数据结构能提高工作效率。

总之学了数据结构,能让我们了解数据之间的存储关系,让我们能在合适的地方运用合适的数据结构来提高我们的工作效率,并且数据结构中常常会有一些常用的算法,例如:排序算法、查找算法等等,特别再一些框架中也运用到了数据结构等等。

学习方式
还是老样子,书籍与视频的结合。

对于书籍呢,我当时看的是这本书《C#数据结构》。
在这里插入图片描述

对于视频,当时我看的是郝斌的数据结构,但是它用的是C语言来讲解的。不过讲解的非常详细,大伙们可以选择性的观看。

对于C#版的数据结构教学视频呢,目前我看到的还是siki老师的视频,但是有一点缺陷就是。他没把树形结构、图形结构讲出来。对于这一点,我想了想。如果可以我为大家出这一部分的视频教程,但是我个人不怎么会搞教程,毕竟语文不好,怕说错话。
好吧,今天就到这了。

Unity自学之路之中级篇(中)

好了,大伙们学到这个阶段了,在编程代码方面已经是非常完美了。但是完美还不够,我们还需要工作效率啊,对不对?

接下来,我要给大伙们在这章中讲的东西就是能提高工作效率的工具 ------- 《框架》

框架
首先先来看下框架的概念:

  • 什么是框架

框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。

  • 抽取关键词:可重用设计

可重用性指的是什么呢?

其实我也不怎么理解,以下是我对于可重用设计的理解(仅代表个人理解,不对的地方还请大家告诉克森):

可重用性设计,就是说,一套代码能用到很多个不同的游戏类型中,这便达到了可重用性。例如:有很多游戏都用到了背包系统吧,那么我只要写一套背包系统的代码,其他有背包系统的游戏便能用到这套代码,这便提高了工作效率,对吧。

总之,一套很屌的框架可以运动到任何方面,不仅限于游戏噢。

不怕大家笑,其实克森最近也在学习框架。因此,对于框架的理解还不是很透测,所以下面给大家的资源只是克森已经学过的东西,觉得还不错,就分享给大家去学习(如果哪位哥们还有好的资源,请分享给克森,我们一起学习)。

首先,我当时学习框架的时候是先从MVC框架学起的,毕竟那也没那么难嘛。。

克森当时学习MVC的时候是看了一些博客,比如你可以去百度直接搜索:“浅谈Unity使用MVC”便能找到克森当时看的一些学习资源

在这里插入图片描述
对于比较好的文章的话,克森看过的文章里面就是下面这个讲的比较详细,且还有一些对MVC的简单操作:
在这里插入图片描述
文章网站:http://www.manew.com/thread-50564-1-1.html

对了,忘记说了,我的学习方式还是书籍和视频的结合,但是这回的书籍就是所谓的技术博客了(对于框架的学习,暂时还不知道看什么书籍,如果谁知道介绍给我下,谢谢你了)。

视频教程
对于视频,当时我看的是泰课网的PuseMVC,所谓PuseMVC嘛,它是基于MVC建立的一个轻量级的应用框架,因此和MVC也差不多。

在这里插入图片描述
视频网站:http://www.taikr.com/course/280

讲得还不错,就是老师说话有点怪,对于刚刚看他视频的哥们来说,也许时不时会被吓到 = =。。。总之,请耐心,认真的把这个视频看完吧,你觉得能收获很多。

接下来我就去看了有限状态机框架了,对于框架来说,我只能看一些技术文章,还是老样子,百度一下,你就知道 = =。直接输入“Unity有限状态机”即可(注意:这个部分,大伙们可以选择性的来学,因为克森当时学的时候很是艰难 = =)
在这里插入图片描述
视频的话看的是这个视频,但是个人觉得他的那套有限状态机好复杂,很难懂,不过也给大伙们介绍介绍吧,大伙们可以选择性的学习。
在这里插入图片描述
链接:https://edu.51cto.com/course/3924.html

PS:不过这套视频要钱,可以用学习卡免费看的,只不过只能免费看一个星期。

对于这个视频,他也写了一些相应的文章:
在这里插入图片描述
文章网站:http://www.manew.com/forum-47-231-1.html

对了,还有一个非常棒儿的视频,真的很棒~!!!
在这里插入图片描述
链接:https://edu.manew.com/course/151/learn

这套教程里面大概讲了这些东西:针对一些框架的优劣点讲解、设计模式的原则讲解、简单的讲解UI框架等等。

当然他也有一套全面的视频教程,但是要花一大笔钱,不过克森觉得这笔钱花得很值得吧,如果有钱的朋友可以选择性的购买他的教程哟。
在这里插入图片描述
没错,那可是一大笔钱啊,3000多。不过有个窍门,你可以加入他的群,然后跟他讨价还价哟,233。

接下来就是克森目前在学习的框架,这套框架是针对Unity制作的,并且还是免费的,代码任你看的哟。

那就是StrangIOC框架。对于它的解释我还不是很了解哟。因为克森还在学习中,我怕误导大伙们,所以就直接给大伙们介绍一些学习资源吧。
在这里插入图片描述
unity StrangeIoc框架总结-链接:https://www.jianshu.com/p/f59d85c88405

Unity自学之路之中级篇(下)

首先先感谢学到这里的大伙们,谢谢你相信克森,坚持到了这里。

好了,克森相信学到这里的哥们对于C#掌握已经很OK了,现在自己看一些代码啊啥的已经不是那么的吃力了。那么接下来我们要做什么呢?

那就是进一步了解Unity,之前我们只是对Unity做了个简单的了解,现在我们要做的事是对Unity进一步的了解。

进一步了解Unity

那么我们要怎么对Unity做进一步的了解呢?

那就是熟练的掌握Unity的各个组件,比如:物理系统、粒子系统、UGUI等等。

那么我要怎么去熟练的掌握它们呢?

那就是通过官方的文档说明,然后结合文档做一些测试和学习掌握它。
在这里插入图片描述
传送门:http://docs.unity3d.com/Manual/index.html

大家可能会问,克森,官网上面全是英文,看不懂怎么办?
好吧,那我们就找个中文的看看呀,对吧?相信有很多人都知道我要说的中文文档是什么了,那就是Unity圣典!
在这里插入图片描述

Unity官网的组件模块对应于Unity圣典的组件手册:
这里写图片描述
在学习组件手册的时候顺便也把相应组件的API也学了,这样便能事倍功半,对吧。

UnityAPI官方文档对应于Unity圣典的脚本手册:
这里写图片描述
传送门:http://www.ceeger.com/

PS:最近这个网站访问不了,不知道是服务器到期了,还是管理者关闭了。小伙伴们可以百度Unity3D圣典,下载本地版本

PS:由于Unity圣典的版本更新得比较慢,因此克森建议大家边看Unity圣典,边打开官方的文档进行对比。

温馨提醒:不要觉得学这些太多,太无聊,因为Unity都是由这些东西组成的。你只有深入的了解它们,才能知道怎么运用它们,并且扩展它们。

好吧,等大伙们把上面这些内容都弄懂的话,那么使用Unity已经是小菜一碟了。

找感觉
好,是时候展示真正的技术了!

之前没有叫大伙们学习太多的教程,为什么呢?

那是克森帮大伙们节省时间。这时候肯定有些人会说,挖草,你吹牛吧,假好人吧!

好,是时候解释一波了。

仅代表个人观点:那是因为我们要在对应的阶段学习该学的东西。

怎么说呢?

就是你没到达那个阶段,就盲目的跟着教程来,你是学不到什么的,反而会让你产生负面的影响(至少克森当时是这样的)。

因为你看不懂啊,看不懂怎么办,那我就只能跟着教程来。教程怎么来,我就怎么来,只要能达到效果就行,便导致整个过程都只是在抄教程里的代码,而不是去理解它(因为理解不了嘛,即可教程里也做了一些解释)。

但是现在的你已经不同往日了,现在的你已经可以看懂那些教程了(对应国内的免费教程蛤)。So,让我们盲目一次吧,开始跟着一些教程来制作一些项目找感觉了。

那么这里教程去哪里找呢?(我相信我说的这句话是废话吧)

这里是克森要装逼一次了蛤,那就是去APP来社区~

这回知道克森分享给大家的东西都是精华了吧~
在这里插入图片描述
传送门:http://www.appcome.com/forum-49-1.html

PS:由于工程太大,克森就不帮大伙们整理了,大伙们自己去下载吧。。还有就是9秒上面真的有很多好东西,大伙们可以自行收集。

大伙们要是把这里都学习了,都弄懂了。好吧,大伙们离找到一个合适的工作不远了。

Alright,今天就到这吧,今天是最近发布最快的一天了,好爽啊。

Unity自学之路之数学篇

其实我这个是有点废话了,但是我也勉强解释一下为什么弄一个《Unity自学之路之数学篇》吧。

相信大家心里都明白,我们现在用的是Unity3D,所谓3D,那必定会与数学扯上关系。

这时候也许有人会说,却,数学Unity不是帮封装好了吗,我们直接用就行了啊。

好吧,我也只能跟你说一声,你这个想法有点简单咯哟。这样吧,至少我个人觉得,你要用一个东西,至少要准备一下几点:

1.了解它的概念
2.知道它的用法
3.在什么时候用它

因此,你不了解它,何谈利用它呢?(妈蛋,废话有点多了,请大家体谅)

PS:我这篇是针对零基础的,意味着你连数学都不知道。。如果以下内容你有学过的,可以跳过那些学过的,直接进入没有学的过进行学习

干货链接
在这里插入图片描述
加法与减法:http://open.163.com/special/Khan/additionandsubtraction.html

乘法和除法:http://open.163.com/special/Khan/multiplication.html

约数与倍数:http://open.163.com/special/Khan/multiples.html

数的性质:http://open.163.com/special/Khan/number.html

分数:http://open.163.com/special/Khan/fractions.html

负数:http://open.163.com/special/Khan/negative.html

小数:http://open.163.com/special/Khan/decimals.html

指数:http://open.163.com/special/Khan/exponents.html

对数:http://open.163.com/special/Khan/logarithms.html

绝对值:http://open.163.com/special/Khan/value.html

复数:http://open.163.com/special/Khan/complexnumber.html

基础几何:http://open.163.com/special/Khan/introductory.html

几何学-角:http://open.163.com/special/Khan/angles.html

三角形:http://open.163.com/special/Khan/triangle.html

多边形、四边形、平行四边形:http://open.163.com/special/Khan/polygon.html

三角学:http://open.163.com/special/Khan/trigonometry.html

基本代数:http://open.163.com/special/Khan/algebra.html

线性代数:http://open.163.com/special/Khan/linearalgebra.html

好了,学到这里的话,你绝对算得上一个数学大神了。对了,上面的视频是网易的公开课,我相信有些朋友是知道网易公开课的。在这里我也只是为了方便大家和对一些不了解网易公开课的朋友总结一下路线,件此而已。

当然,上面的视频有一些还没有翻译中文,还有一些你可以跳过不学,具体由你来吧。

题外话
真的真的,我说真的,大伙们不要觉得太多了,我还是老样子,高楼大厦与地基的关系。你只有基础牢了,才能走得更远。我知道有些朋友很急着立马找到工作。

也许有些人说,去了公司能学得更快。嗯嗯,对的对的。是很快。但是去了公司你基本上自己学习的时间就少了,这意味着什么?意味着你想深入研究一些东西就没得时间研究了,这便导致你的技术只能停留在完成公司项目的程度上。

这个时候也许还会有人反驳我,在公司上班不还有晚上的休息时间和双休日的休息时间吗?

好吧,是有,但是能拿那些时间来学习的人有多少呢(我不是针对谁,请谅解)?妈蛋,又唠叨太多了,对于这篇文章就到这了。

分享一些学习资源

官网教程

首先是一些官网的教程,为什么要看官网的教程的,个人觉得嘛,首先你作为主人,你要给别人用你的东西,那就得做详细、且简单易懂的介绍,对吧。因此,我认为官网的教程还是蛮精华的。

有人会问,官网的教程不都是英文的嘛,,哈哈,放心。我已经为大家找到翻译版的。
在这里插入图片描述
网站:http://space.bilibili.com/7647261/#!/index

看了吧,这个人是英文的真大神啊。把官网上的教程都翻译得差不多了。。。

里面涵盖了:脚本,UGUI,2D游戏等等。

可以的话,建议大家都它看完了吧。。

论坛网站

对于论坛(博客)网站的话,不用说CSDN、知乎、简书。

在这些论坛上,你只要搜索一些关键词都能找到你想要找到的文章,然后你可以多阅读几个内容一样,但是解释不一样的文章,然后进行分析分析,取之精华之处,放进你的大脑。

接下来就是腾讯的GWB腾讯游戏创意合作计划平台:
在这里插入图片描述
网站:https://gwb.tencent.com/cn
在这里插入图片描述
在这个网站上,可以将自己优秀的点子,游戏,进行上传,优秀的项目会得到
专家咨询,技术支持,发行支持,资金支持,宣传推广等。

当然还有腾讯游戏学院:
在这里插入图片描述
https://gameinstitute.qq.com/course

在这上面会讲一些腾讯的爆款游戏的开发之路,开发思路等。
里面的东西还不是很多,不过对于我们来说,已经是一个非常不错的学习圣地了。

对于资源嘛,可以来这个网站 - 《APP来》
在这里插入图片描述
网站:http://www.appcome.com/

里面有很多很多的资源

2019-03-26 11:19:35 JingDuiTell 阅读数 0
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

协程

在主程序之外额外创建一段逻辑,来协助主程序的运行,并发执行
同时只能存在一个协程

开启方式1

    //通过StartCoroutine(”方法名“)使用,但最多只能传递一个参数
	//用协程开启void方法特别消耗系统内存,一般不推荐。

开启方式2

    //通过StartCoroutine(IEnumerator routine)使用,可以传递多个参数
	//使用协程开启IEnumerator类型方法一般推荐此方法

返回值等待说明

	//yield return X; 数字(0除外的数字)  程序运行到这里,会等待1帧后执行
	//yield return new WaitForSeconds(X);  等待X秒后执行
	//yield return new WaitForFixedUpdate ();  等待FixedUpdate ()执行完后执行0.02f
	//yield return new WaitForEndOfFrame ();  等待程序渲染和GUI中的内容完成后执行
	//yield return StartCoroutine (); 本协程到这里停止 开启下一个协程,直至开启的协程关闭或运行结束后,则重新开始当前协程
	//yield break; 直接结束当前协程

关闭协程

	//1.StopCoroutine(string menthod)只能关闭通过StartCoroutine(”方法名“)开启的协程
	//2.StopAllCoroutines 关闭所有协程

实例

    void Start ()
       {

	    //StartCoroutine ("TextCoroutineMethod");
		//StartCoroutine (TextCoroutineMethod2(0,10));
		//StartCoroutine (TextCoroutineMethod3(0,10));

		//StopCoroutine ("TextCoroutineMethod");
		//StopAllCoroutines ();
	}
	void TextCoroutineMethod( ) 
	{
		for (int i = 0; i < 10; i++) 
		{
			Debug.Log (i);
		}	

	}
	IEnumerator TextCoroutineMethod2(int a,int b)
	{   	
		for (int i = a; i < b; i++) 
		{
			Debug.Log (i);
			//yield return new WaitForSeconds(2);
			//yield return new WaitForFixedUpdate ();
			//yield return new WaitForEndOfFrame ();
		}
	}	
	IEnumerator TextCoroutineMethod3(int a,int b)
	{
	while (true)
		{
			Debug.Log ("coroutine");
			yield return StartCoroutine(TestTimer());
        }
	}
	IEnumerator  TestTimer()
	{
		//yield return new WaitForSeconds (4);
		yield break;
	}
2016-02-17 15:02:59 u014261855 阅读数 0
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:

1. 什么是TCP/IP、UDP?
2. Socket在哪里呢?
3. Socket是什么呢?
4. 你会使用它们吗?

什么是TCP/IP、UDP?

TCP/IP(TransmissionControl Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种。
这里有一张图,表明了这些协议的关系。



图1

TCP/IP协议族包括运输层、网络层、链路层。现在你知道TCP/IP与UDP的关系了吧。
Socket在哪里呢?
在图1中,我们没有看到Socket的影子,那么它到底在哪里呢?还是用图来说话,一目了然。



图2

原来Socket在这里。
Socket是什么呢?
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
你会使用它们吗?
前人已经给我们做了好多的事了,网络间的通信也就简单了许多,但毕竟还是有挺多工作要做的。以前听到Socket编程,觉得它是比较高深的编程知识,但是只要弄清Socket编程的工作原理,神秘的面纱也就揭开了。
一个生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。 生活中的场景就解释了这工作原理,也许TCP/IP协议族就是诞生于生活中,这也不一定。

图3

先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
在这里我就举个简单的例子,我们走的是TCP协议这条路(见图2)。例子用MFC编写,运行的界面如下:



图4



图5

在客户端输入服务器端的IP地址和发送的数据,然后按发送按钮,服务器端接收到数据,然后回应客户端。客户端读取回应的数据,显示在界面上。
下面是接收数据和发送数据的函数:

int Receive(SOCKET fd,char *szText,int len)

{
int cnt;
int rc;
cnt=len;

while(cnt>0)
{
rc=recv(fd,szText,cnt,0);
if(rc==SOCKET_ERROR)
{
return -1;
}

if(rc==0)

return len-cnt;

szText+=rc;

cnt-=rc;

}

return len;

}

int Send(SOCKET fd,char *szText,int len)
{

int cnt;

int rc;

cnt=len;

while(cnt>0)

{

rc=send(fd,szText,cnt,0);

if(rc==SOCKET_ERROR)

{

return -1;

}

if(rc==0)

return len-cnt;

szText+=rc;

cnt-=rc;

}

return len;

}

服务器端:

在服务器端,主要是启动Socket和监听线程。

#define DEFAULT_PORT 2000

void CServerDlg::OnStart()

{

sockaddr_in local;

DWORD dwThreadID = 0;

local.sin_family=AF_INET;

//设置的端口为DEFAULT_PORT。

local.sin_port=htons(DEFAULT_PORT);

//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。

local.sin_addr.S_un.S_addr=INADDR_ANY;

//初始化Socket

m_Listening = socket(AF_INET,SOCK_STREAM,0);

if(m_Listening == INVALID_SOCKET)

{

return ;

}

//将本地地址绑定到所创建的套接字上

if(bind(m_Listening,(LPSOCKADDR)&local,sizeof(local))== SOCKET_ERROR )

{

closesocket(m_Listening);

return ;

}

//创建监听线程,这样也能响应界面上操作。

m_hListenThread =::CreateThread(NULL,0,ListenThread,this,0,&dwThreadID);

m_StartBtn.EnableWindow(FALSE);

m_StopBtn.EnableWindow(TRUE);

}

监听线程函数:
DWORD WINAPI CServerDlg::ListenThread(LPVOID lpparam)
{

CServerDlg* pDlg = (CServerDlg*)lpparam;

if(pDlg == NULL)

return 0;

SOCKET Listening = pDlg->m_Listening;

//开始监听是否有客户端连接。

if(listen(Listening,40) == SOCKET_ERROR)

{

return 0;

}

char szBuf[MAX_PATH];

//初始化

memset(szBuf,0,MAX_PATH);

while(1)

{

SOCKET ConnectSocket;

sockaddr_in ClientAddr;

int nLen = sizeof(sockaddr);

//阻塞直到有客户端连接,不然多浪费CPU资源。

ConnectSocket =accept(Listening,(sockaddr*)&ClientAddr,&nLen);

//都到客户端的IP地址。

char *pAddrname = inet_ntoa(ClientAddr.sin_addr);

pDlg->Receive(ConnectSocket,szBuf,100);

//界面上显示请求数据。

pDlg->SetRequestText(szBuf);

strcat(szBuf," :我是老猫,收到(");

strcat(szBuf,pAddrname);

strcat(szBuf,")");

//向客户端发送回应数据

pDlg->Send(ConnectSocket,szBuf,100);

}

return 0;

}

服务器端一直在监听是否有客户端连接,如有连接,处理客户端的请求,给出回应,然后继续监听。

客户端:

客户端的发送函数:

#define DEFAULT_PORT 2000

void CClientDlg::OnSend()

{

DWORD dwIP = 0;

TCHAR szText[MAX_PATH];

memset(szText,0,MAX_PATH);

m_IP.GetWindowText(szText,MAX_PATH);

//把字符串形式的IP地址转成IN_ADDR结构需要的形式。

dwIP = inet_addr(szText);

m_RequestEdit.GetWindowText(szText,MAX_PATH);

sockaddr_in local;

SOCKET socketTmp;

//必须是AF_INET,表示该socket在Internet域中进行通信

local.sin_family=AF_INET;

//端口号

local.sin_port=htons(DEFAULT_PORT);

//服务器的IP地址。

local.sin_addr.S_un.S_addr=dwIP;

////初始化Socket

socketTmp=socket(AF_INET,SOCK_STREAM,0);

//连接服务器

if(connect(socketTmp,(LPSOCKADDR)&local,sizeof(local))< 0)

{

closesocket(socketTmp);

MessageBox("连接服务器失败。");

return ;

}

//发送请求,为简单只发100字节,在服务器端也规定100字节。

Send(socketTmp,szText,100);

//读取服务器端返回的数据。

memset(szText,0,MAX_PATH);

//接收服务器端的回应。

Receive(socketTmp,szText,100);

TCHAR szMessage[MAX_PATH];

memset(szMessage,0,MAX_PATH);

strcat(szMessage,szText);

//界面上显示回应数据。

m_ReplyBtn.SetWindowText(szMessage);

closesocket(socketTmp);

}

客户端就一个函数完成了一次通信。在这里IP地址为何用127.0.0.1呢?使用这个IP地址,服务器端和客户端就能运行在同一台机器上,这样调试方便多了。当然你可以在你朋友的机器上运行Server程序(本人在局域网中测试过),在自己的机器上运行Client程序,当然输入的IP地址就该是你朋友机器的IP地址了。

 

2018-06-06 16:16:26 blueplus 阅读数 0
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

 http://edu.manew.com/course/445 


2018-03-26 00:46:22 l1336037686 阅读数 3801
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Unity3D基础学习之打砖块

基于unity2017

1) 使用Plane创建初始地图

(层级菜单[Hierarcy]-> 3D Object -> Plane)

2) 将Plane命名为Gound

3) 更改Scale

x = 2,y = 2,z = 2,将Plane变为原来的两倍

这里写图片描述

4) 在Assest下新建一个文件夹并命名为Material

用于存放材质

5) 创建材质

(右键 -> Create -> Mateial),并命名为Gound

6) 设置材质的贴图

    1.材质的贴图
    2.金属度
    3.光滑度

这里写图片描述

7)设置墙壁

1.在Assets中创建一个Prefab目录。
2.在层级目录中创建一个Cube,并将其设为Prefab,设置为Prefab主要是便于整体修改。
3.创建一个空组件,将Cube作为空组件的子组件,并将空组件命名为Bircks
4.为Prefab的Cube组件添加Rigibody属性(物理属性) (点击add Component搜索 Rigibody)
5.使用Ctrl + D 复制方块 与 Ctrl + 左键 按单元格拖动方块

这里写图片描述

8.创建子弹

在prefab下创建Sphere,同时添加Rigibody属性

9.添加子弹飞出脚本

1.在Assets下创建Script文件夹用于存放脚本
2.右键创建C#脚本,命名为Shoot
3.将Shoot脚本赋予给相机(Main Camera)只需要将脚本拖到Main Camera组件上就可以添加脚本了

这里写图片描述

4.编辑脚本
    public GameObject buttle;//用于获得子弹对象
    public float speed = 20F;
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        //当鼠标按下左键时触发
        if (Input.GetMouseButtonDown(0))
        {
            //创建子弹对象
           GameObject gb = GameObject.Instantiate(buttle,transform.position,transform.rotation);
           //创建刚体对象
           Rigidbody rg = gb.GetComponent<Rigidbody>();
           //设置子弹初始速度
           rg.velocity = transform.forward * speed;
        }
    }
5.赋予脚本Public属性值
只要脚本声明为public的字段,就可以从外部直接得到,这时将准备好的Prefab的Shpere子弹赋值给Buttle

这里写图片描述

10.创建镜头移动脚本

方法同上,创建一个Movement的C#脚本,赋予Main Camera

public class Movement : MonoBehaviour {
    public float speed = 5F;
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        float h = Input.GetAxis("Horizontal"); //控制水平移动
        float v = Input.GetAxis("Vertical");//控制垂直移动

        //设置摄像机位置
        transform.Translate(new Vector3(h, v, 0) * Time.deltaTime * speed);

    }
}

11.结束

这里写图片描述