学unity有前途吗
一、学unity有前途吗?有前途,游戏产业作为一个新兴产业,已经成为文化娱乐产业、网络经济的重要组成部分,是所有行业中发展前景可观的朝阳产业。目前国内的游戏研发人才缺口巨大,移动端人才需求非常迫切。随着网络快速发展和不断成熟,我国游戏产业呈现快速稳定发展的良好趋势,拥有庞大的群众基础,与此同时,亦需要一大批游戏研发人员,助兴游戏产业开发。unity作为一款跨平台的游戏引擎,发展前景十分广阔!并且虚拟现实、增强现实产业的快速成长,也让unity开发人员的需求变得更大。二、学unity可以做什么?1、Unity3d游戏开发Unity常见的应用方向就是在游戏开发上目前市场上的手游,绝大部分都是unity开发,例如王者荣耀等。2、移动端VR随着移动VR设备的增多,手机VR眼镜等的普及,移动VR行业也在增长,Unity开发软件发布成手机app,打开后二分屏形式呈现,然后将手机放入盒子中进行观看。3、AR通过ARkit高通AR在Unity中进行开发。4、手机APP因为unity是跨平台的,开发完,可以发布到不同的平台。5、Kinect体感开发/leapmotion开发leapmotion开发:手势识别的。Kinect开发:骨骼驱动模型/手势识别/手势触发UI。这一块统称,体感开发。6、工艺仿真软件主要是exe格式的,给企业开发时,有时为了软件的版权,使用加密锁,工艺仿真主要实现步骤:美工建模–模型导入unity加入业务逻辑7、建筑可视化通过Unity处理大量的复杂几何体再结合逼真的灯光、表面还有渲染功能,可以做出一个工程或建筑模型。常见的应用制作建筑模型、样板间模型建设,结合VR技术做VR看房等等。8、模拟Unity还有一个重要的用途,就是它能模拟各种场景,协助培训或办公,比如现在医疗就用Unity模拟各种实验场景,航空航天模拟各种飞行情况,机械制作可以模拟各种安装和安全等等。用Unity创建各种模拟环境,不仅可以节省成本,还能提高工作效率,使它成为模拟环境中的理想选择,未来也会有更多的使用空间。9、动画Unity可以制作动画游戏,其实也可以应用到动画电影制作当中,Unity可以搭建基础的动画场景等等,都可以以上给出Unity几个应用方向,Unity应用虽然大部分在游戏开发上,Unity在与VR/AR等技术结合的情况下还可以应用到更广的空间中。
学unity3d需要什么基础
学unity3d需要什么的前期基础如下:1.学unity3d需要对于编程语言要熟练,因为目前unity3d的游戏开发核心语言在于C# /Lua / C++这类语言,建议还是从C# lua 开发着手开发。2.除此之外还需要俱备基本的3D知识。这些知识如果通过学习底层的DirectX或者OpenGL等可以获得更好的效果以及更透彻的理解,同时可以学习一些3d建模软件,譬如:3Dmax。3.从unity官方网站给出的demo以及模块讲解入手,作为初步学习的理论及实践依据,要熟悉和理解那些基础性的知识案例。任何一门知识技能,基础永远是最重要的,官方提供的都是一些最新功能,知识框架,制作理念。
求unity4.3.0f4,Unity3D 4.2.0版本的专业版破解插件?
unity4.3.0f4,Unity3D 4.2.0版本的专业版破解插件分享破解方法在Unity folfer里输入你的Unity的Editor文件夹路径,或者点击Brows查找。点击Cre Lic生成Unity_v4.x.ulf.打开你的Unity(我之前的是免费版unity)Help->Manager License..选择Manual activation->save License 在你的Unity安装目录下Editor文件夹路径下选中刚刚生成的Unity_v4.x.ulf.完事后确定,重启Unity3D,就是深灰色的Unity3D专业版啦~。ps:4.3.0f4的其他破解方法:把破解插件Unity 4.x Pro Patch.exe放到Unity安装目录下的Editor目录下然后直接点击Patch生成破解文件。如果你还有什么不懂的,可以百度搜下:编程回忆录,他们现在正在录制这方面的教程,都是零基础开始,由浅入深。
如何安装及破解 Unity 3d 4.3.1f 的方法
Unity3d 4.3.1f安装破解教程:1.在Unity3d安装软件上点击鼠标右键,以管理员方式运行。2.点击Next。3.点击I Agree。4.点击Next。5.设置安装路径(不能有中文字符),点击Install。6.软件安装中。7.软件安装完成,去掉复选框里的勾选,点击Finish退出安装向导。8.找到破解补丁文件,鼠标右键选择复制。9.进入Editor目录,鼠标右键选择粘贴。10.以管理员方式运行破解补丁,点击Browse,选择Editor目录并按确定按钮。11.点击Patch按钮打补丁。12.退出激活页面,双击安装目录里的Unity.exe启动软件,新建一个工程(不能用中文名称)。13.查看界面。
新手应该学习什么编程语言?
编程语言较多常用的有c,c++,java,c#,perl,Delphi等,我建议按Python->C++ 这个顺序学,
基本上学通这两种语言就够用了,最好在了解一下汇编和c就更好了。
python是一种脚本语言,简单易学,可跨平台运行(windows,linux,部分手机等),配合第三方库可以实现许多常用功能,例如建站,谷歌的搜索引擎就是用它开发的。
c++是经典的编程语言就不多说了。将python与c++结合起来编程威力强大。
但不知是否可以完全代替java等语言呢?有待检验。其他语言应该也有其各自优点和用途,只是编程语言很多,并且想真正学通一种语言很费时间,如果 将所有语言学会是不可能的,即使全部学会的话,真正应用起来大概只需一两种语言足以。
因此建议挑一两种常用且功能强大覆盖范围广的语言即可。
unity怎么调用外部摄像头录像
1在unity的场景中新建一个Quad。2.新建一个Material文件夹用来存放Material,在Material里新建一个Material材质,并命名为CamTex.。3.选中CamTex材质,在Inspector面板中选择shader的模式为Unlit/Texture。4.新建C#脚本,并将其命名为WebCam,双击脚本进行编辑,添加以下代码:using UnityEngine;using System.Collections; public class WebCam : MonoBehaviour { public string deviceName; WebCamTexture tex; // Use this for initialization IEnumerator Start () { yield return Application.RequestUserAuthorization(UserAuthorization.WebCam); if(Application.HasUserAuthorization(UserAuthorization.WebCam)) { WebCamDevice[] devices = WebCamTexture.devices; deviceName = devices[0].name; tex = new WebCamTexture(deviceName, 400, 300, 12); renderer.material.mainTexture = tex; tex.Play(); } }}
想做个独立游戏开发者
隔三岔五就会有人问我怎么才能成为一个职业的独立游戏开发者。首先,我对此深感荣幸,并表示感谢。其次,尼玛……这个问题可不是那么容易说清。当然了,我可以用“尽你所能!拼命苦干!忠于自我!”这样的话来回复,而且听上去也不赖。可这样的答案没多少干货。
所以你懂的。如果这种小概率事件再次发生的话,我就会用这篇文章作为挡箭牌——这么长的文章谁愿意再写一篇呢!以下是我认为对那些刚刚起步的独立游戏开发者来说比较实际的建议。希望能对你有所帮助。
“独~唔~立”(INDIEPENDENT)
……indie这个词该怎么解释?它是independent的缩写吗?某某游戏是“独立游戏”吗?“独立游戏”是一种类别吗?这听上去让人抓狂——我们到底为什么要用这个词?
为了回答最后这个问题,让我们想象如下情境。
情境1:一个人想要制作游戏,或者建立自己的游戏工作室。他百度了“游戏开发”的字样。得到的结果,往轻了说,也是不给力的。干瘪、学术、全是程序猿看的东西。(你可以自己搜搜看)。
情境2:与之相反,这个家伙键入了“独立游戏”。和刚刚看到的开发者会议、游戏开发课程、编程工具不同,一页页可供试玩的小游戏、与他/她志同道合的人在开发者论坛热火朝天的讨论映入了眼帘。这些开发者有些受过高等教育,有些则是自学成才。多种多样的游戏引擎任君选择。甚至有人拍了一部纪录片来讲他们的故事!这不是通过学院培训然后应征上岗的流水线,任何人都可现在、立刻、马上开始做游戏。
“独立”这个词并不仅仅描述一种开发模式——和任何标签一样,这个词本身包含了探索这种模式并获得成功的路径。它有其现实意义。它提供了游戏开发和盈利的成功案例。它让人热血沸腾!
当然,看到这个词被滥用或者作为装逼工具是让人不爽的。和所有标签一样,“独立游戏”会滋生教条主义、拉帮结派和其他弊端。但它的优势是毋庸置疑的。作为一个曾经因为害怕朝九晚五而放弃职业游戏制作的人,我可以负责任的说,这个词是有价值的。
关于“什么是真正的独立游戏”的争论永远不会有结果,这也许对大家都好。但是我可以讲一下我在“独立游戏源”(译注,The Independent Gaming Source,TIGSource,以介绍和评论独立游戏作品的网站,由Derek于05年接手维护,其下属论坛是世界上最大的独立游戏开发者社区)为“独立游戏”所定下的两条定义:
1. “独自发行”,即不通过发行商。
2. 开发规模小(不超过20人左右)。
这是我认为最行之有效的定义。想要成为独立游戏开发者的人会对这样的限制条件下工作室如何运作、能够做出什么东西充满兴趣。Valve和Double Fine这样的公司当然不属此列,虽然他们足够独立,但是人太多了。这也排除了那些“感觉很独立”但通过发行商推广和销售的作品。
这样的定义还是会留下一些灰色地带。但是就因为谁也说不清楚什么时候红色变成了紫色,不代表我们不知道什么是红、什么是紫。想象一个人要和二三基友自己制作并发行一款游戏,他/她会在谷歌搜索栏输入什么关键字来寻找灵感、建议和社区呢?我想,“独立游戏”应该还是一个最好的选择。
那么,我应该去读大学学习游戏制作吗?
关于电子游戏制作及其培训最重要的一点就是,没有人在乎学历,不管是大公司还是独立小组。如果他们在乎的话,怎么可能会有那么多业界大神是肄业生或者压根没上过大学的人呢?John Carmack、Cliff Bleszinski(译注,《虚幻》、《战争机器》系列制作人)、Jonathan Blow(译注,《时空幻境》作者)和Team Meat(译注,Super Meat Boy作者)全是这类人里的佼佼者。
文凭是一张证明你“理论上会做某事”的纸头——游戏开发者需要你具有真刀真枪大干一场的热情,不管你是否某科得了个优。而如果你想要从事独立游戏制作,你连别人的看法都不用在乎——你只需要具备通向成功所需的激情,不然就是失败。你必须成全自己。
话虽如此,我并不是想要阻止你去上大学(我在大学主修计算机科学,虽然远远称不上完美,但是我从课程和认识的朋友那里收获了很多)。重要的是做点什么东西出来——游戏、MOD、绘画和音乐。如果大学能够帮你做到这些,很好。如果不能,你需要重新想一想自己是否应该把宝贵的资源花在极度消耗时间和金钱的大学上。
如果我去上大学,我应该学什么?
- 在正规的大学,我建议读计算机科学,即便你“只想当设计师”——因为游戏设计和编程是难以分开的。
- 对于艺校生来说,插画、概念设计和3D建模等课程对游戏制作最有用的。
- 游戏制作的专科学院大概会尝试教授从编程到设计等各个方面的知识。我建议不要去选那种只是空谈设计的课程,这种大多是扯淡,没有实用价值。除此之外,搞清楚你是否具有学生作品的版权。
延伸阅读:《Jonathan Blow:谈独立游戏的编程》(看视频和楼主的回复)
好吧。你说做点什么东西。我该怎么开始?
我的建议是不要想太多。一个人很容易就会对工具、成员、平台、发售合同、宣传、获奖浮想联翩——而你还没有一个能在屏幕上动起来的“精灵”(sprite)。这些遥不可及的东西会让你迷失方向、不知所措。你需要做的是每时每刻把功夫花在你自己的游戏上。
假设我们谈论的是油画。我就会让你马上去最近的美术用具店买一套笔、纸和颜料。然后你就会在画板上画下一坨屎。但这坨屎画得你津津有味——于是你会不断地画下去。在此过程中,你会阅读绘画理论、研习别人的作品。通过良好的品味和敏锐的眼光,直到有一天,你会发现自己画出了不错的东西。
然而我们聊的是游戏。我推荐全能的游戏开发套件Game Maker和Unity。两者都兼顾易用性和强大功能;都有免费版和价格不高的付费版;都有丰富的教程和插件等网络资源。两者都有大量的商业作品(特别是Unity)。下载下来,从游戏教程文件开始学习。碰到问题时,上网发问。熟练掌握之后,试着帮助别人。积极融入游戏开发者的网上社区。
但最最重要的是,不要停止,把你的游戏一个一个地做出来。因为这是解答你脑中十万个为什么的唯一办法。
还有,看这个视频。
(译注,电视节目《如此美国生活》的制作人Ira Glass根据个人经验,讲述所有的艺术从业人员在取得创作突破之前都会有很长时间的瓶颈期,而突破的唯一办法就是继续工作。)
最后,我的十大建议:
1. 不要烂尾,把你的游戏做完。
2. 不要在美术上偷工减料。太多的人忽略画面对一个游戏的重要性。就算你没有忽略这一点,你或许也没有意识到独特的画风对一款游戏的价值。这样的结果就是满大街丑陋不堪或毫无特点(“拷贝-粘贴风格”)的游戏,无法给人留下任何印象。
如果你没有绘画的天赋也无所谓,你可以像很多成功的独立开发者一样,尝试一种特殊和统一的风格。实话实说,丑陋不堪也比没有特点要强。记住,游戏画面是你的游戏给大多数玩家的第一印象。
3. 不要(过多地)责备发行和宣传的失败。现在的独立游戏开发社区充斥着太多的“创业失败反思”,用截图和文字告诉人们一个难看而无聊的游戏是怎么因为“行销决策的失误”而遭到失败。面对现实吧——谁也不愿意承认自己缺乏创意、眼光、或者才华。相对来说,把失败的责任推给档期、预告片、主页或者任何东西要容易得多。
但这是互联网。好玩的游戏总会被人发现。宣传固然重要,一次网络炒作可以在短期内见效,但是不会有大的成果——起决定性作用的还是你游戏的品质。找别的借口只能损害你自我批判并获得提高的能力。这种做法也会传染给其他人。
4. “独立游戏”并不代表一种游戏类型,或美学风格。做你想要做的游戏,而不是把它做成一个独立游戏“应该是的样子”。就在不久之前,一个很小、很独立的团队宣布自己的复古第一人称地牢探险游戏《魔岩山传说》取得了销售量超过60万套的佳绩。不要为你自己真心想做的游戏感到压力或者难以启齿——要是连创作自由都没有,还有什么“独立”可言?
5. 建立一个适合你的健康的工作环境。你是旁边有人就束手束脚的闷瓜,还是人多就来劲的人来疯?或者是两者居中?你心目中的理想的日常工作是什么样子的?
你需要把所有的精力都放在和创作有关的事情上,而看似平淡无奇的琐事会吃掉你极大的精力。规划你的实际工作地点和建立为你提供帮助的人际网络同样重要,这对你作为一个独立创作者来说息息相关。
6. 保持独立。毫无疑问,一两个人单干是让人怵头的。总会有这样那样的诱惑,让你想要出卖自己或自己的创意,换取些许的安全感。但实话实说,那是一条不归路——给别人卖命并不一定能够提高自己。我并不是主张切断后路胡来,但是你应该恪守承诺、保持专注地把自己手头的项目做完。人只活一次。
此外,不要把你自己的知识产权轻易卖给某一家厂商。假如要独占的话,加上一个时间期限。当我们的《安琪拉之歌》(Aquaria)上市时,我们不知道Steam的存在,独立游戏合集The Humble Bundle还没有出现。iPad还没有出现。现在,在这些平台上发布对我们来说是非常好的事。不要因为眼前的利益,错失了将来的机会。
7. 创造机遇。作为一个画画的人,我身边的人对我帮助很大——我的家庭、朋友、同行和偶像们。我深知,我的成功的一大部分要归功于出生在这些人身边的运气。
但你应该知道,创造机会也同样重要。以我的例子来说,我和Alec(我的好友,以及《安琪拉之歌》的另一位作者)是因为当初他自告奋勇为《I’m O.K.》提供帮助认识的。《I’m O.K.》这款游戏是我在Pix Fu论坛发起的。Pix Fu是我个人网站的一部分,论坛的成员是我在更早之前混迹Blackeye Software和Klik n' Play网站认识的。
同样,你也可以从TIGSource论坛、Spelunky的PC版本再到XBLA版本诞生的过程,看到一个相似的轨迹。
我想说的是——展示你自己。做一些东西(我不能再强调这一点了!)。你永远不知道幸运女神何时会向你垂青,但当它发生的时候,很有可能是和你以前所认识的人、所参与的创意有关。
8. 杜绝“商场即战场”的想法。作为一个职业开发者,你需要和别人做生意,起码偶尔作出商业决策。但作为一个“创意人士”的人来说,你可能对那些东西有点抵触。说不定,你怕得要死。
其实你不需要成为心黑手狠的《华尔街》戈登•盖柯。而且,不要尝试变成那个样子。实际上,不要让你自己变成戈登•盖柯。避开那些试图让你迷惑的人。避开那些鸡蛋里挑骨头的人。避开那些逼迫你仓促做决定的人。
如果你手握一款牛叉的游戏,没有哪个发行商你必须合作,哪个平台你必须登录,或者哪个人你必须一起工作。一定要从不利的情况中主动走开,特别是那种威胁到你作为创作者独立性的情况。反过来,做一个直率而大度的人。
人们在害怕的时候总会选择自我防范。不要和那样的人合作,做买卖应该是一件乐事!这儿不是华尔街!
9. 不要耍花招。简单的来说,专注做一个好的游戏——一个深刻、有趣、独一无二的游戏,不要通过廉价的把戏哗众取宠。不管是那种“听上去很赞实际很挫”的游戏机制或那种剑走偏锋的宣传手段,雕虫小技就是雕虫小技。不仅如此,你应该对此敬而远之——因为一旦使用了这些短期高危的手段,你作为一个艺术家的身价(真实的和象征性的)就会大打折扣。
诚然,一个人应该在生活和游戏设计里打破常规,冒一些风险。我想说的是,这些风险应该是诚实并值得承担的——从长远看来危险性不高的风险。
10. 你就是你的作品——理解并开发你自己。作为一个独立开发者,你的作品比那些成百上千人开发出来的作品会更加个人化。为了制作一个真正成功的游戏,你需要对自我有相当的认识。幸运的是,逐步获悉你之所以成为“你自己”的原因——你的口味、你在乎的东西、你的能力——的过程是生活中最大的快乐之一,而这个过程又和你努力成长为一个独立创作者的目标密不可分。珍惜它!
关于独立游戏开发?
你问这个问题,说明你有这方面的想法,我首先要告诉你的是,要做好面对一切困难的准备。世上无难事,只怕有心人。其实,要想成为独立开发者,是一个非常不容易的事情,这也决定是一个无比艰难的选择,下面是我的建议。1、耐得住寂寞,忍的了孤独,你需要毅力、恒心、勇气。2、热爱游戏。无论如何老子就是要做出来,这个决心一定要有。3、良好的自学能力。我跟着视频做个unity3d小游戏花费了100多个小时,不能比我更差了。4、努力。别人在玩守望先锋的时候,你在学引擎,别人去聚会的时候,你在写代码。5、要豁达,脸皮要厚。你的作品,刚开始的作品可能被一群人嘲讽,而你一定要大度。6、需求要明确,我要做什么,核心是什么,一定要规划清楚,不然一辈子做不出来。你要想真正取得成功,就必须提高自己的竞争力,不要畏惧所谓的大公司,要发挥自己的优势。老实说这个问题鄙人无法回答。昨天《战神》的主创还在接受采访的时候明确表示“没有商业炒作的游戏必然受挫”,而即使小岛秀夫这样的游戏制作人,面对一整个公司,他个人的竞争力也显得不足。总结路漫漫其修远兮,你要想成为一个合格的、卓越的游戏独立开发者,那就要从每一天做起,不断努力,才有可能成功。
C#编程语言的特点与优势
C#比其它语言的优势
C#(读做 "C sharp")是微软公司在去年六月发布的一种新的编程语言,并定于在微软职业开发者论坛(PDC)上登台亮相.C#是微软公司研究员Anders Hejlsberg的最新成果.C#看起来与Java有着惊人的相似;它包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角.
在本文中,我将考察创建一种新计算机语言的一般动机,并将特别指明是什么原因导致了C#的出现.然后我将介绍C#和它与Java,c,c++的相似之处.其次我将讨论一些存在于Java和C#之间的高层次的,和基础的差别.我将以衡量在用多种语言开发大型应用程序的时候所需的知识(或者对这种知识的缺乏程度)来结束本文,而这正是.NET和C#的一个主要战略.目前,C#和.NET还只能以C#语言规则,以及Windows 2000的一个"d预览版本",还有MSDN上迅速增多的文档集子的形式获得(还没有最终定型).
微软c#语言定义主要是从C和C++继承而来的,而且语言中的许多元素也反映了这一点.C#在设计者从C++继承的可选选项方面比Java要广泛一些(比如说structs),它还增加了自己新的特点(比方说源代码版本定义).但它还太不成熟,不可能挤垮Java.C#还需要进化成一种开发者能够接受和采用的语言.而微软当前为它的这种新语言大造声势也是值得注意的.目前大家的反应是:"这是对Java的反击."
C#更象Java一些,虽然微软在这个问题上保持沉默.这也是意料中的事情,我觉得,因为Java近来很成功而使用Java的公司都报告说它们在生产效率上比C++获得了提高.
Java所带来的巨大影响和大家对它的广泛接受已经由工作于这种语言和平台之上的程序员数量明显的说明了(估计世界范围内共有两百五十万程序员使用Java).由这种语言写成的应用程序的数量是令人惊讶的并已经渗透了每一个级别的计算,包括无线计算和移动电话(比如日本发明的Java电话).C#能够在用户领域获得这样的礼遇吗?我们必须等待并观望,就象已经由SSI公司的CEO和主席Kalpathi S. Suresh指出来的那样,"我发现所有这些都是渐进的.如果C#不存在,我们总能回到Java或C和C++.这些都不完全是新技术;它们在更大的意义上来说只是大公司制造的市场噱头.我们必须给他们时间安顿下来看看这些是不是真的对IT工业有什么影响."
C#从Java继承而来的特点
类:在C#中类的申明与Java很相似.这是合理的因为经验告诉我们Java模型工作得很好.Java的关键字import已经被替换成using,它起到了同样的作用.一个类开始执行的起点是静态方法Main().下面的Hello World程序展示了基本的形式:
using System;
class Hello {
static void Main() {
Console.WriteLine("Hello, world");
}
}
在这个例子中,System这个名字指向一个包括了基本C#实用类集合的命名空间(namespace).这个命名空间包括了Console类,它在这个例子中被用来输出一个字符串.类可以是抽象的和不可继承的:一个被申明成abstract的类不能被实例化;它只能被用做一个基类.C#关键字lock就象Java关键字final,它申明一个类不是抽象的,但是它也不能被用做另一个类的基类.界面:就象在Java中一样,一个界面是一组方法集合的抽象定义.当一个类或结构体实现一个界面的时候,它必须实现这个界面中定义的所有方法.一个单一的类可以实现几个界面.也许以后会出现一些微妙的差别,但是这个特点看起来与Java相比没有变化.布尔运算:条件表达式的结果是布尔数据类型,布尔数据类型是这种语言中独立的一种数据类型.从布尔类型到其他类型没有直接的转换过程.布尔常量true和false是C#中的关键字.错误处理:如Java中那样,通过抛出和捕捉异常对象来管理错误处理过程.内存管理:由底层.NET框架进行自动内存垃圾回收.
C#从C和C++继承的特点
编译:程序直接编译成标准的二进制可执行形式.如果前面的Hello World程序被保存成一个文本文件并被命名为Hello.cs,它将被编译成命名Hello.exe的可执行程序.
结构体:一个C#的结构体与C++的结构体是相似的,因为它能够包含数据申明和方法.但是,不象C++,C#结构体与类是不同的而且不支持继承.但是,与Java相同的是,一个结构体可以实现界面.
预编译:C#中存在预编译指令支持条件编译,警告,错误报告和编译行控制.可用的预编译指令有:
#define
#undef
#if
#elif
#else
#endif
#warning
#error
#line []
没有了#include 伪指令.你无法再用#define 语句对符号赋值,所以就不存在源代码替换的概念--这些符号只能用在#if和#elif伪指令里.在#line伪指令里的数字(和可选的名字)能够修改行号还有#warning和#error输出结果的文件名.
操作符重载:一些操作符能够被重载,而另一些则不能.特别的是,没有一个赋值运算符能够被重载.能够被被重载的单目操作符是:
+ - ! ~ ++ -- true false
能够被重载的二元运算符是:
+ - * / % & | ^ > == != > = <=
C#独有的特点
C#最引人入胜的地方是它和Java的不同,而不是相似的地方.这一节(和这个系列第二部分的大部分地方)讲述了C#实现的和Java不同的地方或者Java根本没有的特点.
中间代码:微软在用户选择何时MSIL应该编译成机器码的时候是留了很大的余地.微软公司很小心的声称MSIL不是解释性的,而是被编译成了机器码.它也明白许多--如果不是大多数的话--程序员认为Java程序要不可避免的比C编写的任何东西都要慢.而这种实现方式决定了基于MSIL的程序(指的是用C#,Visual Basic,"Managed C++"--C++的一个符合CLS的版本--等语言编写的程序)将在性能上超过"解释性的"Java代码.当然,这一点还需要得到事实证明,因为C#和其他生成MSIL的编译器还没有发布.但是Java JIT编译器的普遍存在使得Java和C#在性能上相对相同.象"C#是编译语言而Java是解释性的,"之类的声明只是商业技巧.Java的中间代码和MSIL都是中间的汇编形式的语言,它们在运行时或其它的时候被编译成机器代码.
命名空间中的申明:当你创建一个程序的时候,你在一个命名空间里创建了一个或多个类.同在这个命名空间里(在类的外面)你还有可能声明界面,枚举类型和结构体.必须使用using关键字来引用其他命名空间的内容.
基本的数据类型:C#拥有比C,C++或者Java更广泛的数据类型.这些类型是bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double,和decimal.象Java一样,所有这些类型都有一个固定的大小.又象C和C++一样,每个数据类型都有有符号和无符号两种类型.与Java相同的是,一个字符变量包含的是一个16位的Unicode字符.C#新的数据类型是decimal数据类型,对于货币数据,它能存放28位10进制数字.
两个基本类:一个名叫object的类是所有其他类的基类.而一个名叫string的类也象object一样是这个语言的一部分.作为语言的一部分存在意味着编译器有可能使用它--无论何时你在程序中写入一句带引号的字符串,编译器会创建一个string对象来保存它.
参数传递:方法可以被声明接受可变数目的参数.缺省的参数传递方法是对基本数据类型进行值传递.ref关键字可以用来强迫一个变量通过引用传递,这使得一个变量可以接受一个返回值.out关键字也能声明引用传递过程,与ref不同的地方是,它指明这个参数并不需要初始值.
与COM的集成:C#对Windows程序最大的卖点可能就是它与COM的无缝集成了,COM就是微软的Win32组件技术.实际上,最终有可能在任何.NET语言里编写COM客户和服务器端.C#编写的类可以子类化一个以存在的COM组件;生成的类也能被作为一个COM组件使用,然后又能使用,比方说,JScript语言子类化它从而得到第三个COM组件.这种现象的结果是导致了一个运行环境的产生,在这个环境里的组件是网络服务,可用用任何.NET语言子类化.
索引下标:一个索引与属性除了不使用属性名来引用类成员而是用一个方括号中的数字来匿名引用(就象用数组下标一样)以外是相似的.
public class ListBox: Control {
private string[] items;
public string this[int index] {
get {
return items[index];
}
set {
items[index] = value;
Repaint();
}
}
}
可以用一个循环器来匿名引用字符串内部数组成员,就象下面这样:
ListBox listBox = ...;
listBox[0] = "hello";
Console.WriteLine(listBox[0]);
代理和反馈:一个代理对象包括了访问一个特定对象的特定方法所需的信息.只要把它当成一个聪明的方法指针就行了.代理对象可以被移动到另一个地方,然后可以通过访问它来对已存在的方法进行类型安全的调用.一个反馈方法是代理的特例.event关键字用在将在事件发生的时候被当成代理调用的方法声明中.
编程语言的C#
C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。C#是面向对象的编程语言。它使得程序员可以快速地编写各种基于MICROSOFT .NET平台的应用程序,MICROSOFT .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。 C#是多种语言的混合体,因此它像Java一样语法简洁,像VB6一样使用简单,像C++一样功能强大和灵活(C#没有像C++那样麻烦的位操作)。以下是C#核心特征的一部分,其中大部分特点也是其他支持.NET的程序语言所共有的特征。不需要指针!C#程序通常不需要直接对指针进行操作(尽管在绝对必要时也能自由地进行底层操作)。垃圾收集器能够自动管理内存。因此,C#不支持delete关键字。类、接口枚举、结构和委托都有正式的语法结构。具有与C++类似的功能,可以简单地重载运算符为自定义类型(例如,不需要操心确保返回*this以能够链接)。支持基于特性的编程。这种方式的开发允许我们注释类型及其成员来进一步限定其行为。构建泛型类型和泛型成员的能力。使用泛型,我们可以构建非常高效的并且类型安全的代码,在和泛型项交互的时候可以定义很多占位符。支持匿名方法,它允许我们在任何需要委托类型的地方提供内联函数。很多委托/事件模型的简化,包括协变、逆变以及方法组转换。使用partial关键字跨多个代码文件定义单个类型的能力(或者如果有必要的话,可以作为内存中的表示)。支持强类型的查询(就像LINQ,即集成查询语言),可用于和各种形式的数据进行交互。支持匿名类型,它允许我们建模一个类型的形(shape)而不是其行为。使用扩展方法扩展既有类型功能的能力。包含了Lambda运算符(=>),它可以进一步简化.NET委托类型的使用。新的对象初始化语法,它允许我们在对象创建时设置属性的值。支持动态类型dynamic。 ⑴Visual Basic 提供了强大的可视化编程能力,可以让你轻松地做出漂亮的程序。⑵众多的控件让编程变得象垒积木一样简单。⑶Visual Basic 全部汉化,对于不会英语的人也能轻松使用。 ⑴Visual Basic 不是真正的面向对象的开发工具。⑵Visual Basic 的数据类型太少,而且不支持指针,这使得它的表达能力很有限。⑶Visual Basic 不是真正的编译型语言,它产生的最终代码不是可执行的,是一种伪代码。它需要一个动态链接库去解释执行,这使得Visual Basic 的编译速度大大变慢。(Visual Basic 5以及以前的版本产生的代码是伪代码,Visual Basic 6 编译出来的代码是真正的可执行代码。)综述Visual Basic对学习者的要求不高,几乎每个人都可以在一个比较短的时间里学会VB编程,并用VB 做出自己的作品。对于那些把编程当做游戏的朋友来说,VB 是您最佳的选择。
unity可以用c#开发,那么怎么移植到android上的
为了实现交互,我们采用的是简单的函数相互调用。如果我们在Unity3D中想调用Android代码,那么可以在脚本文件C#中这样写:
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = jc.GetStatic("currentActivity"); activity.Call("UnlockGame")
第一行代码构造了"com.unity3d.player.UnityPlayer"类的一个对象,然后获取了本类的静态成员"currentActivity",取得了activity就可以调用Android代码了(如果你在Unity导出的Eclipse工程中查看unity-class.jar这个文件中的类,你会发现com.unity3d.player这个package下就有UnityPlayer.class这个类,这个类中有个currentActivity)。这个UnlockGame函数是简单的成员方法,一般直接写在MainActivity中,也就是说Android代码中必须要有UnlockGame这个函数,然后才能调用;而"com.unity3d.player.UnityPlayer"和"currentActivity"都是默认的参数。
如果要在Android工程中调用Unity3D中的方法,我们需要新建一个Android工程。可以这样写java代码:
UnityPlayer.UnitySendMessage("AndroidManager", "AndroidCallBackUnlockGame", "");
这里调用了Unity3D中"AndroidCallBackUnlockGame"这个方法,最终激活了游戏。第一个参数表示Unity3D中某个gameObject,第二个参数是这个gameObject上的脚本中的某个方法,第三个参数是这个方法的参数。
上面只是讲述了交互的基本原理,下面是详细步骤。
(1)在Unity3D中创建脚本,如上面第一段代码所示,加入调用Android函数的代码;如果Android要调用C#代码,也要写下被Android代码回调的C#函数。然后,把Unity项目导出为Android工程即可。这里需要注意下图红色部分,其中Bundle Identifier就是导出的Android工程的包名。
(2)打开Eclipse,导入工程,选择import->Existing Android Code Into Workspace,最好把Copy Into WorkSpace选项也选上,这个工程通常叫做“UnityPlayerProxyActivity”。导入工程后,我们可以直接运行这个工程了。但这里是为了与Android代码交互,所以还不能这样做。通常的方法是,我们新建一个Android Application Project,包名必须与导入的工程包名相同;然后把导入的工程作为新工程的Library Project,在工程的Properties里设置
(3)将导入的Unity工程assets目录里的bin和libs目录(新版的没有lib目录)拖放到新工程的assets目录里,即移动资源位置而已。说明一点,新建的Android工程作为了主工程,导入的Unity工程作为了Library Project,它们的Assets和Res资源将会最终合并在一起,但主工程必须要添加Library工程中所有需要的配置信息,也就是AndroidManifest.xml中的内容。这里还可能遇到资源ID冲突的现象,优先级高的主工程将覆盖优先级低的工程。
(4)好了,现在我们有两个工程,一个是新建的,一个是从Unity3D中导入的。这里必须学点Android开发的基础知识,onCreate函数是入口函数,其它的自学吧。想在Android里调用Unity3D代码,就用本文开头的第二段代码即可。通常,我们在新工程里创建一个Activity,在AndroidManifest.xml里进行设置要启动的Activity。假设要启动的是MainActivity,那么对于MainActivity这个类,我们要让它继承UnityPlayerActivity这个类,然后在Oncreate里调用super.onCreate即可。然后,运行新工程,我们的Unity3D游戏也跟着启动了。我们的主工程是新建的,没有设置任何视图,之所以启动了游戏,是因为继承了UnityPlayerActivity这个类,然后调用super.onCreate通过父类启动了游戏。