unity 字体描边5.5自带scene点击描边怎么实现

&img src=&/v2-cacf93a4a56d21a_b.jpg& data-rawwidth=&600& data-rawheight=&414& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/v2-cacf93a4a56d21a_r.jpg&&&p&商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。&/p&&p&原文地址:&a href=&/?target=http%3A///lab/view/324.html%3Ffrom%3Dcontent_zhihu& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/lab/view/324.html&i class=&icon-external&&&/i&&/a&&/p&&p&&br&&/p&&h2&&b&WeTest 导读&/b&&/h2&&p&随着Unity、cocos2dx等优秀跨平台游戏引擎的出现,开发者可以把自己从繁重的Android、iOS原生台开发中解放出来,把精力放在游戏的创作。原来做一款跨平台的游戏可能需要开发者懂得Java、Objective-C、C#甚至是C、C++,现在借助Unity我们开发者只需要懂得很少的原生应用开发知识就能够打造一款优秀的游戏。特别是在鹅厂,有了Apollo这样的组件,原生的接入更加简单,可能每个项目组只需要有1-2个人懂Android,iOS开发就够了。但是也正因为如此,很多同事有了充足的理由不去学习、接触Android和iOS的开发,等到真正需要做接入的时候才开始找人找资料,难免会踩坑。基于此,本文的目的就是通过介绍基础的Android开发知识以及部分的实际操作,让大家有一定的Android基础知识储备。又或者是当作一份Unity接入Android SDK/插件的基础教程,只要照着做,就基本上不会错了。&/p&&p&&br&&/p&&p&本文将会从大家熟悉的Unity为出发点来介绍如何将自己写的或者第三方的Android插件集成到自己的游戏中。&/p&&p&1. Unity是怎么打包APK文件的?&/p&&p&2. 安装及配置Android Studio&/p&&p&3. Android开发基础以及导入到Unity&/p&&p&&br&&/p&&p&&b&一 Unity是怎么打包APK文件的?&/b&&/p&&p&大家看过一些第三方组件的接入文档都知道,在Unity里面有几个特殊的文件夹是跟打包APK有关的。首先我们就来了解一下,这些文件夹里面的内容是经历了哪些操作才被放到APK里面的呢?&/p&&p&在Unity的Assets目录下,Plugins/Android无疑是其中的重中之重,首先我们先来看一个常见的Plugins/Android目录是什么样子的。&/p&&p&&br&&/p&&img src=&/v2-468e234f8f617f7ef1c1_b.png& data-rawwidth=&1127& data-rawheight=&244& class=&origin_image zh-lightbox-thumb& width=&1127& data-original=&/v2-468e234f8f617f7ef1c1_r.png&&&p&&br&&/p&&p&后面的四个是Android工程的文件。前面两个文件夹是我们引用的第三方库,他们也会被打包到APK中。我们这个时候如果点进去前两个文件夹,我们会发现他们的目录结构跟Android这个目录也很像,大概是一下这个样子的。&/p&&p&&br&&/p&&img src=&/v2-186aeba33a00adf64f225ac_b.png& data-rawwidth=&1130& data-rawheight=&182& class=&origin_image zh-lightbox-thumb& width=&1130& data-original=&/v2-186aeba33a00adf64f225ac_r.png&&&p&&br&&/p&&p&比较上下两层的目录接口我们可以发现有很多相似的部分,如:libs、res、assets文件夹以及AndroidManifest.xml文件。这些其实都是一个标准的Android项目的所需要的文件。Unity自带的Android打包工具的作用就是把上述这几个文件夹里面的内容以固定的方式组织起来压缩到APK文件里面。&/p&&p&&br&&/p&&p&&b&接下来我们分别来看看Android打包工具都会做什么样的操作。&/b&&/p&&p&&br&&/p&&p&● libs文件夹里面有很多*.jar文件,以及被放在固定名字的文件夹里面的*.so文件。*.jar文件是Java编译器把.java代码编译后的文件,Android在打包的时候会把项目里面的所有jar文件进行一次合并、压缩、重新编译变成classes.dex文件被放在APK根目录下。当应用被执行的时候Android系统内的Java虚拟机(Dalvik或者Art),会去解读classes.dex里面的字节码并且执行。把众多jar包编译成classes.dex文件是打包Android应用不可或缺的一步。&/p&&p&&br&&/p&&p&看到这里有人可能会想不对啊,这一步只将jar包打成dex文件,那之前的java文件生成jar文件难道不是在这一步做吗?没错,这里用的jar包一般是由其他Android的IDE生成完成后再拷贝过来的。本文后面的部分会涉及到怎么使用Android的IDE并且生成必要的文件。&/p&&p&&br&&/p&&p&● libs文件夹的*.so文件则是可以动态的被Android系统加载的库文件,一般是由C/C++撰写而成然后编译成的二进制文件。要注意的是,由于实际执行这些二进制库的CPU的架构不一样,所以同样的C\C++代码一般会针对不同的CPU架构生成几分不同的文件。这就是为什么libs文件夹里面通常都有armeabi-v7a、armeabi、x86等几个固定的文件夹,而且里面的.so文件也都是有相同的命名方式。Java虚拟机在加载这些动态库的时候会根据当前CPU的架构来选择对应的so文件。有时候这些so文件是可以在不同的CPU架构上执行的,只是在不对应的架构上执行速度会慢一些,所以当追求速度的时候可以给针对每个架构输出对应的so文件,当追求包体大小的时候输出一个armeabi的so文件就可以了。&/p&&p&&br&&/p&&p&● assets文件夹,这个里面的东西最简单了,在打包APK的时候,这些文件里面的内容会被原封不动的被拷贝到APK根目录下的assets文件夹。这个文件夹有几个特性。&/p&&p&&br&&/p&&p&√ 里面的文件基本不会被Android的打包工具修改,应用里面要用的时候可以读出来。&/p&&p&√ 打出包以后,这个文件夹是只读的,不能修改。&/p&&p&√ 读取这个文件夹里面的内容的时候要通过特定的Android API来读取,参考getAssets()。&/p&&p&√ 基于上述两点,在Unity中,要读取这部分内容要通过WWW来进行加载。&/p&&p&&br&&/p&&p&除了Plugins/Android内的所有assets文件夹里面的文件会连同StreamingAssets目录下的文件一起被放到APK根目录下的assets文件夹。&/p&&p&&br&&/p&&p&● res文件夹里面一般放的是xml文件以及一些图片素材文件。xml文件一般来说有以下几种:&/p&&p&√ 布局文件,被放在res中以layout开头的文件夹中,文件里描述的一般都是原生界面的布局信息。由于Unity游戏的显示是直接通过GL指令来完成的,所以我们一般不会涉及到这些文件。&/p&&p&√ 字符串定义文件,一般被放到values文件夹下,这个里面可以定义一些字符串在里面,方便程序做国际&/p&&p&化还有本地化用。当然有时候被放到里面的还有其他xml会引用到的字符串,一般常见的是app的名称。&/p&&p&√ 动画文件,一般定义的是Android原生界面元素的动画,对于Unity游戏,我们一般也不会涉及他。&/p&&p&√ 图片资源,一般放在以drawable为开头的文件夹内。这些文件夹的后缀一般会根据手机的像素密度来来进行区分,这样我们可以往这些文件夹内放入对应像素密度的图片资源。&/p&&p&例如后缀为ldpi的drawable文件夹里面的图片的尺寸一般来说会是整个系列里面最小的,因为这个文件夹的内容会被放到像素密度最低的那些手机上运行。而一般1080p或者2k甚至4k的手机在读取图片的时候会从后缀为xxxxhdpi的文件夹里面去读,这样才可以保证应用内的图像清晰。图片资源在打包过程中会被放到APK的res文件夹内的对应目录。&/p&&p&√ Android还有其他一些常见的xml文件,这里就不一一列举了。&/p&&p&&br&&/p&&p&res文件夹下的xml文件在被打包的时候会被转换成一种读取效率更高的一种特殊格式(也是二进制的格式),命名的时候还是以xml为结尾被放到APK包里面的res文件夹下,其目录结构会跟打包之前的目录结构相对应。&/p&&p&&br&&/p&&p&除了转换xml之外,Android的打包工具还会把res文件夹下的资源文件跟代码静态引用到的资源文件的映射给建立起来,放到APK根目录的resources.arsc文件。这一步可以确保安卓应用启动的时候可以加载出正确的界面,是打包Android应用不可或缺的一步。&/p&&p&&br&&/p&&p&● AndroidManifest.xml,这份文件太重要了,这是一份给Android系统读取的指引,在Android系统安装、启动应用的时候,他会首先来读取这个文件的内容,分析出这个应用分别使用了那些基本的元素,以及应该从classes.dex文件内读取哪一段代码来使用又或者是应该往桌面上放哪个图标,这个应用能不能被拿来debug等等。在后面的部分会有详细解释。打包工具在处理Unity项目里面的AndroidManifest文件时会将所有AndroidManifest文件的内容合并到一起,也就是说主项目引用到的库项目里面如果也有AndroidManifest文&/p&&p&件,都会被合并到一起。这样就不需要手动复制粘贴。需要说明的是,这份文件在打包Android程序的时候是必不可少的,但是在Unity打包的时候,他会先检查Plugins目录下有没有这份文件,如果没有就会用一个自带的AndroidManifest来代替。此外,Unity还会自动检查项目中AndroidManifest里面的某些信息是不是默认值,如果是的话,会拿Unity项目中的值来进行替换。例如,游戏的App名称以及图标等。&/p&&p&&br&&/p&&p&● project.properties,这份文件一般只有在库项目里面能看得到,里面的内容极少,就只有一句话android.library=true。但是少了这份文件Android的打包工具就不会认为这个文件夹里面是个Android的库项目,从而在打包的时候整个文件夹会被忽略。这有时候不会影响到打包的流程,打包过程中也不会报错,但是打出的APK包缺少资源或者代码,一跑就崩溃。关于这份文件,其实在Unity的官方文档上并没有详细的描述(因为他实际上是Android项目的基础知识),导致很多刚刚接触Unity-Android开发的开发者在这里栽坑。曾&/p&&p&经有个很早就开始用Unity做Android游戏的老前辈告诉我要搞定Unity中的Android库依赖的做法是用Eclipse打开Plugins/Android文件夹,把里面的所有的项目依赖处理好就行了。殊不知这样将Unity项目跟Eclipse项目耦合在一起的做法是不太合理的,会造成Unity项目开启的时候缓慢。&/p&&p&&br&&/p&&p&● 其他文件夹例如aidl以及jni在Unity生成APK这一步一般不会涉及到,这里不展开。&/p&&p&&br&&/p&&p&看到了上述介绍的Unity打包APK的基础知识我们知道了往Plugins/Android目录下放什么样的文件会对APK包产生什么样的影响。但是实际上上述的内容只是着重的讲了Unity是怎么打包APK,所以接下来会简述一下打包这个步骤到底是怎么完成的。&/p&&p&&br&&/p&&p&Android提供了一个叫做aapt的工具,这个工具的全称是Android Asset Packaging Tool,这个工具完成了上述大部分的对资源文件处理的工作,而Unity则是通过对Android提供的工具链(Android Build Tools)的一系列调用从而完成打包APK的操作。这里感觉有点像我们写了个bat/bash脚本,这个脚本按照顺序调用Android提供的工具一样。在一些常见的Android IDE里面,这样的“bat/bash脚本”往往是一个完整的构建系统。最早的Android IDE是Eclipse,他的构建系统是Ant,是基于XML配置的构建系统。后来Android团队推出了Android专用的IDE——Android Studio(这个在文章后面会有详述),他的构建系统则是换成了gradle,从基于xml的配置一下子升级到了语言(DSL, Domain Specific Language)的层级,给使用Android Studio的人带来更多的弹性。&/p&&p&&br&&/p&&p&写到这里我想很多人都清楚了要怎么把Android的SDK/插件放到Unity里面并且打包到Unity里面。这时候应该有人会说,光会放这些文件不够啊,我还需要知道自己怎么写Android的代码并且输出相应的SDK/插件给Unity使用啊。&/p&&p&&br&&/p&&p&本文接下来的内容将会一步一步描述怎么写Android代码并且输出库文件给Unity。&/p&&p&&br&&/p&&p&&b&二 Android开发基础以及导入到Unity&/b&&/p&&p&&b&1. 开始你的第一个Android程序&/b&&/p&&p&安装完Android Studio并且配置好代理以后我们就可以打开它,在弹出的框中选择“Start a new Android Studioproject”。&/p&&p&&br&&/p&&img src=&/v2-4d3f34f36bc2bd0952f45bddc4a0429b_b.png& data-rawwidth=&1133& data-rawheight=&675& class=&origin_image zh-lightbox-thumb& width=&1133& data-original=&/v2-4d3f34f36bc2bd0952f45bddc4a0429b_r.png&&&p&&br&&/p&&p&在接下来弹出的界面里面输入应用名称,公司域名(这个其实不怎么重要)以包名(Package Name),其中我认为最重要的是包名,毕竟看一个应用的包名可以看得出一个开发者的逼格如何。。。&/p&&p&&br&&/p&&img src=&/v2-1ebfed4bdb181a128d0f333d1a7e0203_b.png& data-rawwidth=&674& data-rawheight=&814& class=&origin_image zh-lightbox-thumb& width=&674& data-original=&/v2-1ebfed4bdb181a128d0f333d1a7e0203_r.png&&&p&&br&&/p&&p&接下来选择要开发什么类型的App,这里勾上Phone and Tablet就可以了。SDK的选择一般来说根据项目的需要,最低一般不低于API 9: Android 2.3(Gingerbread),这也是Unity能接受的最低SDK。如果有些插件不能运行在这么低的Android SDK环境下的话可以酌情考虑提升到API 15: Android 4.3(IceCreamSandwich),这个等级的API一般也是可以兼容绝大多数近3-4年的机器。&/p&&p&&br&&/p&&img src=&/v2-ab435f500_b.png& data-rawwidth=&676& data-rawheight=&782& class=&origin_image zh-lightbox-thumb& width=&676& data-original=&/v2-ab435f500_r.png&&&p&&br&&/p&&p&因为我们要输出的内容是给Unity用的,这里可以先选择不带有Activity(就是承载游戏画面的基础部件),后续用到再说。&/p&&p&&br&&/p&&img src=&/v2-ea0a5a8d0f_b.png& data-rawwidth=&675& data-rawheight=&782& class=&origin_image zh-lightbox-thumb& width=&675& data-original=&/v2-ea0a5a8d0f_r.png&&&p&&br&&/p&&p&点击OK以后Android Studio就会开始初始化当前的这个Android项目。初始化会需要一段时间,因为AndroidStudio有可能会去下载一些必要的框架或者更新Android工具的版本。初始化完成以后到左边按照图里面的步骤点开就可以看到整个项目目录树的情况。&/p&&p&&br&&/p&&img src=&/v2-62dfdf36d6_b.png& data-rawwidth=&570& data-rawheight=&827& class=&origin_image zh-lightbox-thumb& width=&570& data-original=&/v2-62dfdf36d6_r.png&&&p&&br&&/p&&p&通过上图我们可以知道,一个Android Studio的项目(Project)可以由许多小的模块(Module)组成,这些模块可以是带有Activity的应用类模块,也可以是不带有Activity的库模块等等。这些小的模块之间可以有引用关系。我们可以把一些完成基础功能或者容易被复用的模块单独拆出来。&/p&&p&&br&&/p&&p&如果要新建一个模块我们可以在上图的列表中点右键选择New Module,在弹出的界面中我们可以选择要新建什么样的模块,或者从Eclipse导入旧的项目也可以。一般来说给Unity游戏开发插件最常用的就是库模块(AndroidLibrary)。同样的,在接下来弹出的窗口中填写好模块名称、包名以及最低运行的SDK。&/p&&p&&br&&/p&&p&简单的看一下Android项目的目录结构。如下图所示:&/p&&p&&br&&/p&&img src=&/v2-fb1efd851f3a_b.png& data-rawwidth=&355& data-rawheight=&273& class=&content_image& width=&355&&&p&&br&&/p&&p&● libs目录跟本文第一部分介绍的libs目录的功用是一样的,把依赖到的库放在这里面就可以了。&/p&&p&● src/main/res目录也是跟本文第一部分介绍的res目录的功能和结构是一样的,把对应资源放进去就可以了。&/p&&p&● 接下来是java代码所在的目录src/main/java,这个目录有点特殊,他的子路径跟java文件里面定义的包名(package name)要对应的上。&/p&&p&● AndroidManifest.xml也是跟第一部分介绍的AndroidManifest的功能是一样的。&/p&&p&● build文件夹是Android Studio动态生成的,打出的APK包(应用模块)或者AAR包(库模块)会被放到这里面的output文件夹。需要注意的是这个文件夹不应该被放提交到svn里面,要不然会造成项目成员之间的冲突,切记。&/p&&p&● src/test以及src/androidTest是做单元测试用的,本文不涉及。&/p&&p&&br&&/p&&p&至此,我们就可以开始动手写代码了,这里我们写一个可以弹出Android的Toast提示的Activity来替换掉Unity默认的Activity。&/p&&blockquote&简述一下Unity跟Activity的关系:在Android系统中,打开一个应用,就是开启该应用指定的启动Activity。&br&Unity里面有个默认的Activity,他的作用就是在系统启动应用的时候加载Unity的Player,这个Player就是就相当于是Unity应用的“播放器”,他会执行我们在Unity项目中创作的内容,并且通过GL指令渲染到指定的SurfaceView中,而SurfaceView则是被置于Activity里面的一个特殊的View。&/blockquote&&p&首先,我们在Android Studio中找到src/main/java(如上图所示),然后点击右键,选择新建Empty Activity。&/p&&p&&br&&/p&&img src=&/v2-ea09bdf42f8ed7b93adddbf_b.png& data-rawwidth=&1134& data-rawheight=&543& class=&origin_image zh-lightbox-thumb& width=&1134& data-original=&/v2-ea09bdf42f8ed7b93adddbf_r.png&&&p&&br&&/p&&p&在弹出的窗口中给你的Activity取个符合Java代码规范的名字,然后再想个合理的包名(当然,也可以直接用默认项目的包名也可以)。可以参考下图的配置:&/p&&p&&br&&/p&&img src=&/v2-2d22fb0a8c8_b.png& data-rawwidth=&938& data-rawheight=&795& class=&origin_image zh-lightbox-thumb& width=&938& data-original=&/v2-2d22fb0a8c8_r.png&&&p&&br&&/p&&p&其中的Generate Layout File,我们在制作给Unity游戏用的Activity是不需要勾上的。Launcher Activity勾上以后Android Studio会帮你在当前模块的AndroidManifest.xml中声明本Activity是应用的入口之一。作为一个库项目我们这边其实也不需要这个选项。点击Finish之后Android Studio就会帮我们在指定目录下创建一个很简单的Activity。里面的内容如下:&/p&&p&&br&&/p&&img src=&/v2-af0b8d5c43e7a148ef6239_b.png& data-rawwidth=&944& data-rawheight=&333& class=&origin_image zh-lightbox-thumb& width=&944& data-original=&/v2-af0b8d5c43e7a148ef6239_r.png&&&p&&br&&/p&&p&需要注意的是这只是一个最基础的Android Activity,他还不会去加载我们的Unity出来,所以我们要让他继承自Unity的Activity而不是默认的。为此,我们要先将Unity相应的jar包引入到我们的模块当中。首先找到Unity的安装目录,然后找到以下子目录Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes\里&/p&&p&面的classes.jar,这个就是被打包成jar包的Unity默认的Activity。我们把这个jar包复制到当前模块的libs目录下(可以把这个jar包改成你想要的名字,便于管理)。(这个jar包的源码在Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player这个目录下。感兴趣的同学可以翻阅一下源码,就可以理解Unity播放器的加载机制。)&/p&&p&&br&&/p&&p&接下来,我们可以在Android Studio左边的Project View中找到当前的模块以后点击右键,选择“Open ModuleSetting”或者直接按F4。在弹出的窗口中我们选到最右边的页签“Dependencies”,然后选择右边绿色的加号-JarDependency。&/p&&p&&br&&/p&&img src=&/v2-99ac7f6a54ee8edb5ea874_b.png& data-rawwidth=&948& data-rawheight=&663& class=&origin_image zh-lightbox-thumb& width=&948& data-original=&/v2-99ac7f6a54ee8edb5ea874_r.png&&&p&&br&&/p&&p&从项目的libs文件夹中找到刚刚导入的jar包,点击OK即可。接下来有一个比较关键的步骤就是,我们改变这个jar包的scope属性,因为默认的scope属性(Compile)是会将该jar包里面的内容跟本模块里面Java代码合并到一起。这在之后Unity打包这个模块的jar包的时候会报错,因为Unity里面内置了刚刚这个jar包。所以我们可以参考下图把这个jar包的scope设置成provided。&/p&&p&&br&&/p&&img src=&/v2-d031d7c83fdb5a776a7751_b.png& data-rawwidth=&943& data-rawheight=&798& class=&origin_image zh-lightbox-thumb& width=&943& data-original=&/v2-d031d7c83fdb5a776a7751_r.png&&&p&&br&&/p&&p&然后删除上述列表的第一行,因为他会把所有libs文件夹下的jar包都打包到一起。跟我们刚刚做完的provided设置会有冲突。&/p&&p&&br&&/p&&p&搞定了这步骤以后我们就可以回到刚刚新创建出来的Activity把他的父类改成UnityPlayerActivity,同时别忘记引用一下相应的package,改完之后的代码是这样的:&/p&&p&&br&&/p&&img src=&/v2-aa7bc8f8b5ea1f2eaff8f4_b.png& data-rawwidth=&945& data-rawheight=&383& class=&origin_image zh-lightbox-thumb& width=&945& data-original=&/v2-aa7bc8f8b5ea1f2eaff8f4_r.png&&&p&&br&&/p&&p&到这一步,如果我们的Activity如果能被运行的话,他应该能够借助他的父类UnityPlayerActivity里面的代码来运行Unity。接下来,我们来给这个Activity添加一方法,当这个方法被调用的时候会展示一个系统默认的Toast提示。&/p&&p&&br&&/p&&img src=&/v2-0b8fb17de8f2d_b.png& data-rawwidth=&943& data-rawheight=&227& class=&origin_image zh-lightbox-thumb& width=&943& data-original=&/v2-0b8fb17de8f2d_r.png&&&p&&br&&/p&&p&看得出来,里面最核心的一个方法其实就只是调用Android里面的Toast组件而已,没啥好解释的。相反,是外面的runOnUiThread是值得大家注意的,在Android编程中,所有涉及到对UI的操作必须要放在UI线程里面来做,否则会造成其他线程修改UI线程里面的数据然后崩溃。由于我们写的这个ShowMessage方法最后会被Unity那边调用,而来自Unity的调用可能不是UI线程,所以我们要给他做适当的保护。&/p&&p&&br&&/p&&p&在Android中有很多种调度方法可以把某段代码放到UI线程里面来跑。上面这段代码的runOnUiThread的写法是最简便的一种写法。如果遇到比较复杂的逻辑可以考虑使用Messenger或者Handle来调度线程,感兴趣的同学可以上网查一下。&/p&&p&&br&&/p&&p&&b&2. 导入到Unity并且编译&/b&&/p&&p&完成Activity的代码编写之后就可以输出这个模块到Unity项目中去。在Android Studio中选择Build - Make Project或者是在左边的项目视图中选中要导出的模块然后选择Build - Make Module。选择完了之后就可以看到下面有个Gradle的进度条,待进度条完成了以后我们就可以到该模块的build/outputs/aar目录下去找输出的文件。打开这个文件夹,可以看到有个*.aar的文件。这个就是该模块所编译出来的结果,如果你用解压缩软件去解压缩它,你会发现他几乎就是一个完整的Android工程。根据本文第一部分所说的内容,我们只要在Unity工程中的Plugins/Android目录下新建一个文件夹,然后把这个文件解压缩以后整个丢进去,再手写一个名字叫project.properties,内容是android.library=true的文件放到新建的文件夹里面就可以了。&/p&&p&&br&&/p&&p&胜利在望,我们接下来只要把Unity工程里面的AndroidManifest.xml文件的入口Activity从Unity默认的的改成我们刚刚写的这个就可以了。需要注意的是,如果是旧的Unity工程,可能已经有人写过相关的AndroidManifest文件放在了Plugins/Android目录下,但是如果是全新的Unity项目的话,就没有这份文件了。在打包的时候,如果Unity发现Plugins/Android目录下没有这份文件,他会复制一份默认的文件并且修改其中跟项目有关的内容。这里我们可以从Unity的安装目录的Editor\Data\PlaybackEngines\AndroidPlayer\Apk文件夹内找到AndroidManifest.xml这份文件,把它复制一份到Unity工程的Plugins/Android目录下。接下来就是修改里面的内容。&/p&&p&&br&&/p&&img src=&/v2-f1a5dfcf28d16bd5b179eedb_b.png& data-rawwidth=&942& data-rawheight=&768& class=&origin_image zh-lightbox-thumb& width=&942& data-original=&/v2-f1a5dfcf28d16bd5b179eedb_r.png&&&p&&br&&/p&&p&&b&这里解释一下这份文件里面的一些关键内容。&/b&&/p&&p&&br&&/p&&p&● package=&com.unity3d.player&这里的内容如果放着不动,打包的时候Unity会将其修改为Player Setting的Bundle Identifier。&/p&&p&● android:versionCode以及android:versionName这两部分的内容则在打包时会根据Player Setting里面的Version以及Bundle Version Code的内容来进行修改。&/p&&p&● android:icon以及android:label这两个对应的是应用的图标以及应用名称。如果不改的话,Unity也会自动根据Player Setting里面的内容来进行修改。&/p&&p&● android:debuggable=&true&这个在打包的时候Unity也会自动根据Build Setting里面的Development Build选项自动进行修改。&/p&&p&● activity里面的android:name,这个name只的是该activity需要运行的哪个Java的Activity的类。如果不修改,加载的就是Unity默认Activity的类。这篇文章需要把默认的Activity改成刚刚我们的实现,所以,我们把刚刚写好的那个Activity的完整名称写上去(包括包名还有类名)。&/p&&p&● activity里面的android:label,这个是在桌面上图标下面写的那一行文字,也是应用的名称。不修改的话Unity会帮你维护。&/p&&p&● meta-data的这一行的name值是key,value值就是这个key对应的内容。meta-data可以根据需要自定义多个,但是key值不能重复,上面代码里面的unityplayer.UnityActivity应该是写给Unity看的,让Unity知道他自己是运行在这个Activity上。&/p&&p&&br&&/p&&p&这里我们基本上只要修改activity里面的android:name这一项。修改完成后,我们就可以通过Unity自带Build功能来出Android包了。出包之前请检查一下Player Setting里面的Bundle Identifier,不能留默认的包名在这里,会造成编译失败。编译过程中,可能会出现一些错误,&b&下面罗列几个常见的错误,可以尝试解决:&/b&&/p&&p&1. 合并Manifest文件出错,一般来说是在合并所有的AndroidManifest文件的时候出的错,常见的有重复定义了activity、里面的最低sdk写错了。模块的最低sdk不可低于项目的最低sdk。&/p&&p&2. jar文件dex错误,当你的项目中不小心存在了一个以上的相同的jar文件,就会出这个错误,把重复的删掉,只留一个就好了。&/p&&p&3. 找不到Android SDK里面的工具,这个一般来讲是Unity自己的bug,Unity一般不能兼容最新的Android SDK的工具,所以要手动降级才行。&/p&&p&&br&&/p&&p&除了上述这些之外,在打包Android项目的过程中还会出现这些那些的错误,大家看到以后不要慌张,会报错总是好的,而且一般的错误你把错误信息贴在万能的Google上,都能找到解决方案。&/p&&p&&br&&/p&&p&&b&3. Unity对Android代码的调用&/b&&/p&&p&文章到这里为止,说清楚了怎么把Android这边写成的插件打包到Unity的项目中去。但其实并没有涉及到Unity中怎么调用刚刚写好在Android的Activity中的代码。这一部对于一个Unity开发来说其实非常简单,只要以Unity提供的AndroidJavaClass还有AndroidJavaObject来做为中介就可以在Unity和Java中互传数据。这两个类的调用给人一种通过反射来调用Java代码的感觉。只要你能通过包名和类名拿到某个Java对象,就可以直接通过成员变量名称或者方法名称直接调用到Java那边的代码。举个例子,假如要在Unity中调用刚刚我们写的那个类的ShowMessage类的话我们需要在Unity中准备以下代码。&/p&&p&&br&&/p&&img src=&/v2-fbed5f97734eecc7ae9c8_b.png& data-rawwidth=&943& data-rawheight=&565& class=&origin_image zh-lightbox-thumb& width=&943& data-original=&/v2-fbed5f97734eecc7ae9c8_r.png&&&p&&br&&/p&&p&&b&简单介绍一下这段代码的几个关键点:&/b&&/p&&p&1. 通过UnityPlayer可以很方便的拿到当前Activity的Java对象实例。&/p&&p&2. 对Java对象实例的方法的调用实际上很简单,只要调用Call就可以了。&/p&&p&3. 注意用宏来区隔Native代码。UNITY_ANDROID && !UNITY_EDITOR这个推荐的写法,如果不过滤掉UNITY_EDITOR会在运行的时候报错。&/p&&p&4. 推荐在new出AndroidJavaClass还有AndroidJavaObject的地方用using来进行保护,确保执行结束后Unity会自动回收相应的代码。&/p&&p&&br&&/p&&p&其他的部分在这篇文章里面我们不展开。&/p&&p&本文到这里差不多把Unity Android的开发过程描述了一遍,如果有不清楚,欢迎留言。&/p&&p&&br&&/p&&p&&b&针对手游的性能优化,腾讯WeTest平台的Cube工具提供了基本所有相关指标的检测,为手游进行最高效和准确的测试服务,不断改善玩家的体验。&/b&&/p&&p&&b&目前功能免费开放中。欢迎点击链接:&a href=&/?target=http%3A///product/cube%3Ffrom%3Dcontent_zhihu& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/product/cube&i class=&icon-external&&&/i&&/a&&/b& &b&使用。&/b&&/p&&p&如果对使用当中有任何疑问,欢迎联系腾讯WeTest企业qq:&/p&
商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。原文地址: WeTest 导读随着Unity、cocos2dx等优秀跨平台游戏引擎的出现,开发者可以把自己从繁重的Android、iOS原生台开发中解放出来,把精力放在游戏的…
多图预警。&br&长文预警。&br&&br&上一次更新:日。&br&这次没有更新本回答的正文内容,但是我在我的专栏&a href=&/studygame& class=&internal&&自学游戏开发 - 知乎专栏&/a&中,发布了&a href=&/p/& class=&internal&&一个游戏是如何被设计和开发出来的 - 知乎专栏&/a&。里面比较详细地展示了游戏的开发流程,以及人员分工、每个岗位的工作内容和能力要求。那篇文章共28900字,附带50个视频,希望有所帮助。&br&&br&这篇回答还在龟速更新中,大家如果特别想了解哪一部分,或者对已提到的部分还有疑问,可以在回答下留言。收到反馈能帮我更好地解答~另外,好多人加我好友,一上来打招呼就问应该怎么开始学习。其实我正文中说得很清楚了,请仔细参考程序部分。&br&&br&&br&&b&以这篇真诚的回答,致敬每一个 愿意把人生奉献给游戏事业的人。&/b&&br&&img src=&/v2-e9ede9be7fbc9d7b8bbd6d44fd554ce7_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-e9ede9be7fbc9d7b8bbd6d44fd554ce7_r.jpg&&&br&&br&&br&题主你好~很想分享下学习经验。&br&我学习游戏设计到现在有五六年了,主要研究游戏的核心玩法设计,学过编程学过美术也学过音乐音效制作。曾经在游戏行业呆过一段时间,当时负责一款MMORPG游戏的土耳其市场。我的目标是做一个全能游戏设计师——什么都懂的游戏策划。目前的个人最高水平可以一人独立做出CS、Rust这样游戏的Demo。细分说技能的话,我会的东西有:&br&&ul&&li&编程(C、C++、C#、Java、JavaScript、HTML、Perl、Shell、SQL,&a href=&///?target=http%3A//ASP.NET& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&ASP.NET&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&网站制作,计算机图形学背景,熟悉Unity、Unreal4引擎)&/li&&li&美术(原型概念设计/不太熟练,素描还可以,色彩/应用不太熟练;3ds Max 建模、骨骼、蒙皮; C4D-Bodypainter贴图绘制;Maya建模;Zbrush雕刻在学,Substance Painter贴图绘制在学)&/li&&li&声音(学过音效处理,会用Au,给电影做过音效配音; 音乐是我目前最薄弱的一项,懂些乐理、识谱,知道鼓组、提琴阵、贝斯等基础编排,会用FL,平时没时间练习,打算2017年专项学习)&/li&&li&其他(以前玩摄影摄像,曾经做过大型舞台摄像、随行摄影;会用AE、PR、会声会影,做过不少视频。 我热爱户外运动。)&/li&&/ul&上面这些是我的技能树,每一个单项技能和专业人士是没法比的,但基本都往就业水平去学了。重要的是基本上&b&所有这些技能我都是自学的&/b&,所以我还算比较了解自学游戏设计与开发怎样才能避免走弯路。我也很想给同样选择了游戏事业,志同道合的朋友一些帮助。我也曾经少年过,做过游戏梦,心怀过”伟大的“游戏想法。五六年过去,现在我已经具备独立开发游戏的能力了。这个时间还不算久,因此我还能记得六年前的我,在站门外是什么感觉。我理解你们。发自内心地想要帮助你们实现游戏梦。有的知友在看完回答后私信我说,找到了人生的方向,今后几年的奋斗目标。我很感动,真诚地希望中国出现越来越多真正的游戏人,优秀的游戏设计师。这篇回答从2015年7月开始写,一直写到现在,六个月过去了,期间我一直在推敲我给出的学习方案的合理性以及效率最大化,并跟踪了一些刚入门的学习者的学习进度,学习体验。以此为基础来完善我们的学习路线。这也是为什么我更新得如此缓慢。我原本就计划是在两年之内完成本回答,包括美术和音乐的全部内容。为此我需要亲自去走一遍每个领域的学习路线,再总结成适合自学的方法论。在理论经过亲自验证之前,我不会公开宣扬,这是我坚持的做事原则。在过去的半年内,我把美术方面从概念设计到次时代级模型制作的整个流程通学了一遍,现在我正试着亲自带几个人来一次全面的学习。做这些事情,花费了我大量的精力,但我仍然坚持拒绝接受任何资金回报,以免变了味,成了个人商业培训。我做这些事的目的很纯粹,如前文所说,就是希望看到中国出现更多优秀的游戏设计师。&br&同时,我也发现了一些非常不好的现象:&b&许多私信联系我的学习者,连此篇回答都没能认真看完,就来问我应该如何开始自学,是否能提供学习资源。我通篇都在讲述如何自学,每一个板块后面都贴了资源。&/b&让人气愤的是我写了几个月的回答,如果连花费一小时阅读的耐心都没有,那么我也只能认为他更没有耐心来学习几年的游戏开发了。因此在私信提问我之前,请认真阅读此回答,这是一种对他人工作的尊重。&br&&br&现在开始严肃地讨论。看了题主的问题,我看得出题主是一个&b&真正想做游戏的人,而不是一个只想通过游戏赚钱的人。&/b&确实是这样的话,题主不需要去趟国内游戏行业这趟浑水,更不用通过进游戏公司来学习。在你什么都不会的情况下,就算进公司你也只能做苦逼体力活(比如:黑盒测试、配表、客服),成长很慢。而且国内游戏行业是一个聊钱聊产品聊运营的地方,不是聊游戏设计的地方。现在我&b&假设你的目标和我一样是做一个“全能游戏设计师”,并且假设你是高中刚毕业,什么都不会。&/b&这个假设的期望比较高,要高于你单纯地做出一款游戏来。应该能满足你的需求吧?&br&&b&在这样的前提下,你要达到你的目标,需要哪些的能力?我先给你展示一下&/b&:&br&&br&这是A大的游戏开发日记视频列表:&a href=&///?target=http%3A///%21/video/0//1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AliveGameStudio的个人空间&i class=&icon-external&&&/i&&/a&&br&A大就是一个既会编程,又会美术,又会策划,又会音乐的人。这系列视频就展示了一个全能游戏设计师需要具备的所有“硬”技能以及技能应该达到的熟练程度。(A大:Q币已到账)&br&题主你先看几期他的视频,了解一下他所具备的能力。等等,请收好这副星星眼,也许能用得着。&br&&br&这里我先罗列一下一个全能设计师所应掌握的最基本技能,然后后面再逐个给相应技能的&b&学习途径&/b&:&br&硬技能分为四个大块:&br&1、&b&程序&/b&&br&4、&b&设计&/b&(核心玩法、交互等)&br&2、&b&美术&/b&&br&3、&b&音乐&/b&&br&这里我把这四项以重要程度做了一个排序(仅对新人设计师而言)。这四项技能可以顺序专项学习,也可以交叉混合学习。优先级依次往下。我下面就来逐个分享学习方法。&br&&br&&br&&br&&br&&b&————Part1 你必须会编程—————&/b&&br&&b&程序&/b&,对目前你的情况来说,是这些技能里面&b&最重要&/b&,最&b&迫切需要&/b&,也是&b&最好学习&/b&的一项。为什么是它呢,因为你只有会编程、掌握了一款游戏引擎,你才会真正明白:游戏,作为一款软件来说它的本质是怎样的,它是如何运作的。你不知道汽车是如何工作的,你就制造不出一辆车。了解程序,就是了解一款游戏在电脑上工作的原理。并且&b&当你编程能力过关,掌握了一款游戏引擎后,即使你其他什么都不懂你也已经能够做出简单的游戏demo了&/b&。实现这些,只需要几个月的时间。但是如果你先攻学其他几项,这都不可能。&br&那么编程应该如何开始学呢?&br&有很多种打开方式,我在第一版回答中给出了一些可选项,但是我后来我考虑到纯新人不具备判断和抉择的能力,很容易到处撞墙。所以现在我只给出一条学习路线。设置这条路线的指导思想是:&br&在保证知识稳固的前提下,最快速地学以致用。&br&编程学习路线分两步:&br&1、学习C#&br&&b&2、学习Unity&/b&&br&&b&3、学习C#&/b&&br&&br&“明明是三步嘛!” &br&“额~是这样的,请听我慢慢道来。” &br&一般来说C#编程能力是学Unity的前置条件。但是,对于什么都不懂的人来说,直接学习C#会感到无聊、迷茫、没有尽头,不知道现在所学的这些东西在以后实际做游戏时会怎么用到,很可能会让理想之路产生动摇。然而直接学Unity就不会无聊了,因为所学的东西我们能很直观地了解今后会如何发挥作用。但是因为没有编程基础,所以需要写脚本的地方学起来会比较吃力。这个时间吶,我们就会想到要去学习编程。然后带着目标去学C#。我突然想起我和一个知友的聊天记录好像能解释这样安排的原因。&br&&img src=&/v2-7babdf6eaaac7c20f30ea31d_b.png& data-rawwidth=&1080& data-rawheight=&5589& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&/v2-7babdf6eaaac7c20f30ea31d_r.png&&&br&这是一个大一的学生,之前只跟学校的课程学过一点C++,我估计也就几节课的程度。加我好友之后,我给他指点了一下学编程的路径,然后一个月后他就能做点东西出来了。来看下面这张图。第一屏是他的发的说说,是刚学Unity几天时发出来装X的,被我批了一顿+鼓励了一顿。后面是一个月后他找我来汇报学习进度的记录。注意看时间,真人实践证明按我给的路线是可以做到短时间内上手游戏开发的。&br&&img src=&/v2-507aca8e305c1b5a1cee0_b.png& data-rawwidth=&1080& data-rawheight=&6060& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&/v2-507aca8e305c1b5a1cee0_r.png&&&br&OK,再文字总结一下&b&程序学习路径&/b&:&b&我们先从C#学起,初学的编程的时候可以不求甚解,先记住形式,之后会慢慢自行理解。当C#学到无聊、乏闷的时候(会发生在任何进度点)就先放下,转而去学Unity。&/b&&b&Unity中有相当一部分功能是不需要懂编程也能用的,我们可以学到不少东西。当稍微进阶的时候,我们就会接触到编程的部分,这时之前学的C#一定会让我们感到熟悉。通过Unity教程,我们也能反哺巩固C#的知识。但是更多时候,我们会发现Unity教程中关于编程的部分,我们实在跟不走了,很多代码不能理解。那么我们自然会想回去学好C#。这是一个相辅相成的过程。&/b&避免了专门学编程语言时的痛苦。下面是一些教程资源。&br&&br&&br&&br&&br&&b&—————C#教程:———————&/b&&br&C#是一个编程语言,编程语言有很多种,每一种都有自己的特色,这里不一一介绍。我们先学习C#就好了,它是Unity开发中最热门的语言。&br&先给学习资源:&br&&ul&&li&第一季:&a href=&///?target=http%3A///course/240& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/s/1hrXeOGc&i class=&icon-external&&&/i&&/a&&br&&/li&&li&第二季:&a href=&///?target=https%3A///s/1o6GLFWe& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/s/1o6GLFW&/span&&span class=&invisible&&e&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 密码:2536&/li&&li&第三季:&a href=&///?target=https%3A///s/1kVxscJl& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/s/1kVxscJ&/span&&span class=&invisible&&l&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 密码:tpol&/li&&li&第四季:&a href=&///?target=https%3A///s/17HyA6& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/s/17HyA6&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 密码:wtap&/li&&li&备用链接:&a href=&///?target=http%3A///s/1nuL9UVR& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/s/1nuL9UV&/span&&span class=&invisible&&R&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 密码:xf7r&/li&&/ul&这些是泰课在线联合创始人Siki老师的教学视频,泰课在线是我阅了无数教学视频后发现质量比较有保障的。Siki的课讲得很细致很耐心,十分适合零基础初学者。关于编程方面的技能,完全可以在泰课在线这个网站学到毕业。他还有其他课程,可以在个人微信公众号(devsiki)和官网找到,官网:(&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&泰课在线 - 国内专业的Unity在线学习平台|Unity3d培训|Unity教程|Unity教程 Unreal 虚幻 AR|移动开发&i class=&icon-external&&&/i&&/a&)。&br&听说Siki已经离开了泰课在线,那么再贴一个他的个人网站吧:&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&siki -
游戏开发视频教程&i class=&icon-external&&&/i&&/a&(Siki:Q币已到账)&br&针对C#学习再给一些免费资源:&br&&ul&&li&&a href=&///?target=http%3A//www.51zxw.net/list.aspx%3Fcid%3D548& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C#入门教程-我要自学网&i class=&icon-external&&&/i&&/a&-我曾经没钱或找不到其他教程的时候在这个网站学过很多东西。几乎全免费,收费也相当便宜,几毛钱一节课。&br&&/li&&li&&a href=&///?target=http%3A///csharp/csharp-tutorial.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C# 教程 | 菜鸟教程&i class=&icon-external&&&/i&&/a&-百度搜索“C#教程”第一个网站&br&&/li&&li&下面这个是传智播客的教学录屏。很早以前的,但是讲课质量很高。(侵权立删)&br&&/li&&/ul&
链接:&a href=&///?target=http%3A///s/1csqO0Y& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/s/1csqO0Y&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 密码:nuy4&br&
链接:&a href=&///?target=http%3A///s/1ge3vIEJ& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/s/1ge3vIE&/span&&span class=&invisible&&J&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 密码:0clu&br&&ul&&li&&a href=&///?target=https%3A///zh-cn/library/67ef8sbd.aspx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C# 编程指南&i class=&icon-external&&&/i&&/a&-这个是微软的C#官方手册,如果在学习过程中遇到任何知识点偏差,应该优先参考这份官方说明。&br&&/li&&/ul&&br&上面这些教程,加上大家自己百度或淘宝一些资源,应该足够大家把C#学毕业了。&b&不过记住!我们的目标是:全能设计师。而不是专职程序员。所以我们学习编程,最开始不需要面面俱到。只要学习一些最基础的。&/b&哪些知识是最基础的呢,我做了一个目录供以参考(见下表)。无论大家跟哪套教程,都只要先掌握这些知识点:&br&&ul&&li&&b&变量与常量&/b&&/li&&li&&b&表达式与运算符&/b&&/li&&li&&b&&b&字符类&字符串&/b&&br&&/b&&/li&&li&&b&流程控制语句&/b&&/li&&li&&b&数组和集合&/b&&br&&/li&&li&&b&类(&/b&属性和方法、面向对象特性&b&)&/b&&/li&&li& 命名空间&引用&br&&/li&&/ul&&br&按照这个顺序学习下来。其他的知识点可以在以后需要的时候现学现用。好了,现在你就可以着手开始试学了,在学习过程中如果遇到任何问题也可以加入我的兴趣交流群找我,群号:。(为避免无聊人士,设置了5元入群费)&br&&b&———————以上是C#教程—————————&/b&&br&&br&&br&&b&————————Unity教程————————&/b&&br&Unity3D是一款比较全面的游戏引擎,功能强大,使用简单,开发流程快,社区资源丰富,是世界各地的独立开发者最喜爱的游戏引擎。暴雪的《炉石传说》是用这个引擎开发的。steam上热门的《Rust》(中文名:《腐蚀》)也是用这个引擎开发的。&br&仍然是先给免费学习资源:&br&&ul&&li&&b&&a href=&///?target=http%3A///course/429& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity3D初级课程之新手入门&i class=&icon-external&&&/i&&/a&&br&&/b&&/li&&li&&a href=&///?target=http%3A///course/431& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity3D初级课程之新手进阶&i class=&icon-external&&&/i&&/a&&br&&/li&&/ul&学到这个进阶课程会做下面这个的小射击游戏demo&br&&img src=&/b92d8ca1ac93e8eabad8877adef7accb_b.png& data-rawwidth=&952& data-rawheight=&529& class=&origin_image zh-lightbox-thumb& width=&952& data-original=&/b92d8ca1ac93e8eabad8877adef7accb_r.png&&&br&&ul&&li&&a href=&///?target=http%3A///course/63& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Space Shooter 太空射击&i class=&icon-external&&&/i&&/a&&br&&/li&&/ul&学完这个会做下面这个打灰机游戏demo(我大一时自己做的第一个完整游戏就是用这个Demo改造出来的)&br&给个玩耍链接吧:&a href=&///?target=http%3A///s/1skDokYp& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/s/1skDokY&/span&&span class=&invisible&&p&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&(里面有个rar是电脑版,apk是手机版。玩法是活过120秒,并没有什么彩蛋奖励。有一个懒得修复的已知BUG,会导致飞船消失但不判定失败,我并不会告诉你们触发条件是什么hiahia。)(不要妄想一直躲在角落活过120秒,我的AI会识别你的行为的~)&br&&img src=&/v2-cf91ecdd8d4b3157cad03_b.jpg& data-rawwidth=&542& data-rawheight=&730& class=&origin_image zh-lightbox-thumb& width=&542& data-original=&/v2-cf91ecdd8d4b3157cad03_r.jpg&&&br&&b&砰砰,看黑板,回到正题!&/b&&br&&ul&&li&&b&&a href=&///?target=http%3A///course/302/lesson/list& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity入门案例-Tanks坦克大战&i class=&icon-external&&&/i&&/a&&br&&/b&&/li&&li&&a href=&///?target=http%3A///course/304/lesson/list& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity2D游戏开发2D Roguelike拾荒者&i class=&icon-external&&&/i&&/a&&br&&/li&&/ul&OK,上面这四个都是免费的新手教程,顺序学习就好了。学完这些,对Unity以及游戏开发就会有一个初步的认识了。再之后要进阶学习,开发更大型的游戏,大家可以根据个人的胃口来挑选合适的教程进修。现在百度“Unity教程”,很多内容,好好挑一挑吧。(当然,优质的教程是需要付费的)&br&比如说:&br&&ul&&li&&a href=&///?target=http%3A///course/91& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&RPG游戏黑暗之光&i class=&icon-external&&&/i&&/a&&br&&/li&&li&&a href=&///?target=http%3A///course/90& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS之战局域网射击游戏(unity就业班)&i class=&icon-external&&&/i&&/a&&br&&/li&&li&&a href=&///?target=http%3A///course/119& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&年度史诗MMO ARPG 课程《泰斗破坏神》&i class=&icon-external&&&/i&&/a&&br&&/li&&li&&a href=&///?target=http%3A///course/282& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity3d MOBA游戏泰斗英雄联盟&i class=&icon-external&&&/i&&/a&&br&&/li&&li&&a href=&///?target=http%3A///course/113& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&unity 赛车race(手游)&i class=&icon-external&&&/i&&/a&&br&&/li&&li&&a href=&///?target=http%3A///course/268& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity3D ACT动作游戏《武士2》已完结&i class=&icon-external&&&/i&&/a&&br&&/li&&/ul&上面这些教程呢,新手肯定hold不住。我是搬过来给大家看看未来的,并且证明一下&b&Unity也能做很不错的端游,能够胜任各种类型的游戏&/b&。关于Unity的学习,我这篇回答不直接教学,但是有一点一定要提一下。在学习的过程中,大家肯定会遇到各种各样的问题和疑惑,这时官方文档会帮上很多忙:&br&&a href=&///?target=https%3A///Manual/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity - Manual: Unity Manual&i class=&icon-external&&&/i&&/a&——这是&b&官方手册&/b&,就是Unity的使用说明书,追根溯源所有的教程,都是源自于这份官方手册。如果在必要的情况下要自己研究某个系统,阅读这份手册就是第一步。&br&&a href=&///?target=https%3A///ScriptReference/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity - Scripting API:&i class=&icon-external&&&/i&&/a&——如果有任何的官方编写的&b&类&/b&或&b&函数&/b&不认识,不理解,不知道如何使用,应该在这里先搜索一下。&br&&i&API(Application Programming Interface,&a href=&///?target=http%3A///view/330120.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&应用程序&i class=&icon-external&&&/i&&/a&编程接口)是一些预先定义的&a href=&///?target=http%3A///view/15061.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&函数&i class=&icon-external&&&/i&&/a&,目的是提供&a href=&///?target=http%3A///view/330120.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&应用程序&i class=&icon-external&&&/i&&/a&与开发人员基于某&a href=&///?target=http%3A///view/37.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&软件&i class=&icon-external&&&/i&&/a&或硬件得以访问一组&a href=&///?target=http%3A///view/1582587.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&例程&i class=&icon-external&&&/i&&/a&的能力,而又无需访问源码,或理解内部工作&a href=&///?target=http%3A///view/79349.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&机制&i class=&icon-external&&&/i&&/a&的细节。&/i&&br&&a href=&///?target=http%3A///Manual/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity3D Manual 中文用户手册&i class=&icon-external&&&/i&&/a&——官方手册和API的中文版,供英文能力差的同学参考。(赶紧开始学英文吧。我曾经因为考虑到韩国游戏业发达,想辅修韩语,但是我们教授告诉我:世界上高级的游戏开发人员都会英语,包括韩国,所以你学好英语就行了。)&br&&a href=&///?target=https%3A///cn/community& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity - Community&i class=&icon-external&&&/i&&/a&——&b&Unity官方论坛&社区&/b&。国外学unity的都在这里提问、解答、交流经验,所以百度和google没有答案的时候不要忘了这里哟。&br&&b&———————以上是Unity教程 & 程序部分的教程————————&/b&&br&&br&&br&&br&&br&************************************章节分割线****************************************&br&&br&&br&&b&————Part2 设计理论—————&/b&&br&最开始我们假设了,我们的目标是:成为一个&b&全能游戏设计师&/b&。那么本质还是一个游戏设计师。&b&一个游戏设计师和常人的核心区别在于哪里呢?&/b&我认为有两点:&b&1、实践性能力&/b&,他能够带领团队把一项设计转换为具体的游戏软件(和导演类似)&b&2、思考与判断力&/b&,一个合格的游戏设计师应该具备自己的设计理念,同时深谙普适法则。 这和任何领域的艺术家都一样,比如说美术,每一个美术艺术家都有自己独特的绘画风格,但他们都知道如何做视线的第一落点第二落点。一个游戏设计师应该有自己的理念更应该具备&b&基础的理论&/b&。我相信一句话:&b&每一个玩家在游戏设计上都有自己的想法&/b&。如果说这个“想法”是一个成熟的理念&设计灵感,而他想要通过开发把这款游戏做出来,那么我通常会建议他首先去研究一下最基础的游戏设计理论,&b&看看自己的设计是否有违背一些基础法则&/b&,&b&哪些部分和前人总结的道理相顺应&/b&。然后通过基础理论来完善自己的设计。&br&设计理论如何习得呢?对新手而言,两个方法:&b&1、阅读;2、思考&/b&。&br&我先说说读书。这里推荐一个顺序阅读的书单:&br&&ul&&li&第一本:&b&《快乐之道:游戏设计的黄金法则》&/b&,这是一本启蒙级的设计丛书。它不会教你如何一步一步地设计出一个游戏,但它会在思想层面上醍醐灌顶,让你重新认识你所钟爱的“游戏”,以及发现“游戏”的更多可能性。我认为&b&游戏设计师,应该为这个世界带来更美好的价值&/b&。利益攻心是无法做出游戏的。所以先阅读这本书洗礼一下内心,开始建立今后在游戏设计上的道德基础,这是一个游戏设计师的必修课。 建议配合阅读《金刚经说什么》。&br&&/li&&/ul&&img src=&/b7ddc1b3211_b.png& data-rawwidth=&638& data-rawheight=&631& class=&origin_image zh-lightbox-thumb& width=&638& data-original=&/b7ddc1b3211_r.png&&&br&&br&&ul&&li&第二本:&b&《游戏改变世界》&/b&(《Reality Is Broken》)。阅读第一本书,目的是先建立正确的设计师价值观,第二本书是真正让我们开拓视野,更进一步地&b&发现“游戏”的更多可能性&/b&。这很重要,&b&我们理想的高度,限制于我们视野之所及&/b&。如果我们生于十九世纪上叶,压根儿没有见过电子游戏,如今便不会立志做游戏。如果我们现在看不到游戏在更多领域的价值,看不到游戏的更好形式,也很难在思想/设计上超越现在市面上的游戏。《游戏改变世界》这本书的使命,就是让我们看到游戏让世界变得更好的可能性。补充:作者Jane曾经在TED有个演讲,可以说是这本书的浓缩版,时长20分钟。大家也可以在TED看看她的其他演讲。&br&&/li&&/ul&&a href=&///?target=http%3A///talks/jane_mcgonigal_the_game_that_can_give_you_10_extra_years_of_life& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jane McGonigal: The game that can give you 10 extra years of life&i class=&icon-external&&&/i&&/a&&br&&img src=&/bd51cfe218aeecfc85ea0f1_b.png& data-rawwidth=&664& data-rawheight=&614& class=&origin_image zh-lightbox-thumb& width=&664& data-original=&/bd51cfe218aeecfc85ea0f1_r.png&&&br&&br&&ul&&li&第三本:&b&《全景探秘游戏设计艺术》&/b&。在通过前两本书打了一些基础之后,应该可以开始尝试来讨论我们语境下的游戏了。这是一本从“思想”到“设计”的关键过渡书籍。书中作者谈论了游戏的四大基本元素以及元素的耦合、玩家的分类、&b&设计师所应具备的基本素质&/b&(不同于我们讨论的技能)、游戏迭代设计的过程等等内容,实在是非常充实。作为第一本了解游戏设计工艺流程的书非常合适。&br&&/li&&/ul&&img src=&/bcddc737e2581_b.png& data-rawwidth=&666& data-rawheight=&505& class=&origin_image zh-lightbox-thumb& width=&666& data-original=&/bcddc737e2581_r.png&&&br&&ul&&li&第四本:&b&《电与剑——角色扮演游戏设计艺术》&/b&。通过第四本,我希望能够更深入地讨论游戏的设计过程。推荐这一本书,是因为 一、他的语言简单幽默,充满鸡血,游戏路上坎坷难行,你需要在适当的时候来一碗;二、RPG游戏是各种游戏类型中系统较为全面的一类,无论做什么游戏,研究RPG游戏都有帮助,而且我知道过半想学做游戏的人都想过做RPG游戏,所以我也是特意挑选了这本豆瓣都没收藏的书放这里。(常年缺货,弥足珍贵)&br&&/li&&/ul&&img src=&/fdfbe0d53c6fbc_b.png& data-rawwidth=&998& data-rawheight=&356& class=&origin_image zh-lightbox-thumb& width=&998& data-original=&/fdfbe0d53c6fbc_r.png&&&br&推荐书单暂时到此结束,先小结一下书单的设置目标:&br&&ul&&li&&b&第一阶段&/b&:&b&建立正确的设计师价值观&/b&&br&&/li&&li&&b&第二阶段&/b&:&b&扩展眼界,看见游戏的更多可能&/b&&br&&/li&&li&&b&第三阶段&/b&:&b&系统地认识电子游戏,设计&开发流程,了解设计师基本素养&/b&&br&&/li&&li&&b&第四阶段&/b&:&b&深入研究自己感兴趣的游戏类别,专项问题研究&/b&&br&&/li&&/ul&我心中有一个怀疑,就是真完全的没有接触过游戏设计,而且平时也没有主动在网上搜索过相关内容的朋友,估计对于游戏的开发流程真的全无概念,那么我推荐的第三本书《全景探秘游戏设计艺术》还并不能帮你达到第三阶段的目标。针对这种情况,我想再推荐一下下面这本《游戏设计基础》,顺带它的两兄弟吧。 ╮(╯_╰)╭其实我个人是不喜欢第一本书的,因为它几乎是地毯式地普及了一遍游戏设计&开发的所有内容。我当时看的时候感受就是:你把所有东西都摆了出来,说几句大家都知道的道理,然后就切下一个话题?嗯~~不过~~但是~对于真的没有了解过游戏设计的朋友,也许书中说的东西还是对你很有帮助的,这很百科全书。《游戏开发核心技术》属于第四阶段读物,是讲故事与剧情的,建议配合阅读《故事》——罗伯特·麦基。&br&&img src=&/eb848aa064c531f780734cc_b.png& data-rawwidth=&1090& data-rawheight=&342& class=&origin_image zh-lightbox-thumb& width=&1090& data-original=&/eb848aa064c531f780734cc_r.png&&&br&第四阶读段物补充:《游戏运营管理》。我首先需要提一下游戏运营。因为我们辛辛苦苦做的游戏总是要给人玩的,也理所应当通过它来赚取我们应得的收入。&b&毕竟我们用一生来奋斗的事业,也应该能养活我们一生,不然理想就会被面包打败。&/b&游戏如何赚钱呢?在这方面国内的游戏领域真是处于宇宙领先的地位。而撑起国内游戏行业的支柱就是游戏运营。暂且不谈各种臭不要脸到没有下限到起死回生的运营手段,我觉得最需要了解游戏运营的不是专门的运营人员,而是总设计师。对一款游戏最了解的人,是总设计师。一个半途接手的运营人员,永远无法比总设计师更了解这款游戏,所以他要去做游戏调优,要去添置运营活动,要去促进消费,总是或多或少地会对游戏的生命周期造成损伤。而如果设计师在游戏设计的过程中就预设好了针对性的运营方案,那么不但不会缩短生命周期,反而会更大地促进玩家活跃度等运营指标。运营能力对于设计师的重要性不言而喻。但是考虑到一说专项问题研究,估计朋友们就会去死磕打击感、可重玩性、心流线路、玩家交互等设计问题而忽视运营问题,所以这里需要特别提一下。下面这本书建议配合阅读《营销管理》——Kotler P. / Keller K.L. &br&&img src=&/e8e8770471cbafe2a64df525f542dbb9_b.png& data-rawwidth=&635& data-rawheight=&532& class=&origin_image zh-lightbox-thumb& width=&635& data-original=&/e8e8770471cbafe2a64df525f542dbb9_r.png&&&br&继续补充:游戏领域是一个超过硬科幻小说写作领域的更庞大的领域。因此&b&需要我们设计者具备各种各样的素养和知识。&/b&光是上面这基本书是远远不够的,我们需要养成终生阅读的好习惯。下面是扩展的书单,我也不尽都读过,一起来读一读吧:&a href=&/question//answer/& class=&internal&&关于游戏策划的书有哪些推荐? - 陈灼的回答&/a&。然后除了书,我们还需要去发现国内外最新的思想成果,往往这些东西都不在书里,而是在论文与论坛里。所以我们不仅要逛论坛,还要养成&b&逛论文库&/b&的习惯。至于途径和资源,从百度和谷歌出发,去寻找自己喜欢的吧~(中文论坛我以前喜欢逛&a href=&///?target=http%3A//& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&,可是最近越来觉得深度变浅了~)&br&&b&——————————以上为阅读部分——————————&/b&&br&&br&&br&&br&&br&&br&&br&&b&&br&2、思考&/b&&br&设计师是需要有思维训练的,做思维训练的时候我们在练什么?先贴一个有意思的问答在这里,这是作家在进行思维训练时干的事情。对游戏设计师来说也是非常值得借鉴学习的。&br&&a href=&/question//answer/& class=&internal&&作家都是如何提高构思能力的? - 马伯庸的回答&/a&&br&不过需要总结一下,他的回答中说的到思维训练是对于世界背景架构、剧情设计的训练,就是那些不懂游戏的投机者们常常挂在嘴边的IP创作。&br&&br&下面我们来正式讨论关于思维的话题。&br&每一个游戏设计师应该思考的一个问题:&b&游戏设计方法论&/b&。&br&有人说“设计游戏没有一个固定的方法可循。” “如果有那么一个方法的话,那么按此方法设计出来的游戏都是一个样。” “那种方法还没有出现,也几乎不可能出现。” ……&br&以上那些话,都是废话。我们作为职业游戏设计师的,本职使命就要找到这样一个方法,然后去实践它。设计游戏的过程,就是实践自己的设计方法论的过程。许多在职的设计师会说并没有自己的方法论,也能设计。那样的设计师一般分两种。一种是心里有数但是没有主观地成文地去总结出来。另一种,压根就没有,他们设计游戏的过程,往往会前后矛盾,前期要求所有已知的功能所有在其他游戏中出现过的系统;中期陷入迷茫,不知道自己游戏的真正的乐趣该在哪里,应该往什么方向设计下去。后期发现之前做的许多功能都是白做了,整个游戏自己都不觉得好玩,面临推翻重来的窘境。&blockquote&方法:为达成某个特定目的,可以用来实践(实际操作)的模式或过程(步骤),并包括使用的工具或技巧。&br&&/blockquote&设计/开发游戏,其实和任何艺术创作、项目工作一样,就是一系列的行为实践的过程。任何一个过程都是可以总结成一套模式的(即方法论)。就像电影创作,可以形成好莱坞模式、日式、法式、冯小刚式、源氏。通过某种模式产出的电影,多多少少会带有该模式的印记,让人能够感觉出它是通过该模式制作出来的,比如好莱坞模式就是印记很强的一种。但是印记太强,并不是一件很好的事情。印记强意味着它容易趋于刻板,它的创作空间,它的变化空间受到了更多的限制。反过来说,也是这些限制、这些规则铸成了该模式。&br&&b&那么一个好的模式应该是怎样的呢?&/b&&br&&ol&&li&&b&它应该能提供模式最基本的功能,即对一系列行为过程的总结。&br&&/b&&/li&&li&&b&它应该能适用于更多的对象。越是接近真理的东西,越能在更多的地方体现。&/b&(就像相对论和进化论)&br&&/li&&li&&b&基于第二条,它指出了创作空间的范围。&/b&(这是它指导实践和自身进步的重要条件)&/li&&/ol&作为游戏设计师,或者是准游戏设计师,我们的一个本职使命就是要寻找这样一种模式(游戏设计方法论)。这不是顶尖的游戏设计师才能做的事情,而是每个敢自称游戏设计师的人都应该做的事情。也正是这个事情,自己的设计方法论的形成,让一个游戏设计师不同于其他的游戏设计师。大家耳熟能详的一些游戏设计师:&br&&ul&&li&宫本茂(超级马里奥系列)&br&&/li&&li&小岛秀夫(合金装备系列)&br&&/li&&li&陈星汉(旅、花)&br&&/li&&li&&b&Jade Raymond&/b& 女制作人(&a href=&///?target=http%3A///subview/93025.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&刺客信条&i class=&icon-external&&&/i&&/a&系列)&br&&/li&&li&Will Wright(模拟人生系列、模拟城市系列)&br&&/li&&li&Sid Meier(文明系列)&br&&/li&&/ul&试着想一想,他们哪一个的游戏不是都有着自己别致的风格?是什么导致他们所做的游戏在风格上差异那么大呢?甚至我们可以说,如果他们不是要特意尝试完全不同的风格,那么他们开发的下一款游戏(即使是非系列作品)也将带着他们个人的风格。这一点宫本茂就是个行走的例子。那么是什么让他们的游戏即成功又保持了个人风格?&br&是他们自己的设计方法论。&br&上面花了一些篇幅强调方法论的重要性,以及我们应该寻找、创立自己的方法论。那么我们应该如何做这个事情呢?我希望抱砖引玉,给出一个自己的经验和建议:&br&即回答一些问题,并且在整个职业生涯中不断地修正自己的答案。这些问题如下面这样:&br&&ul&&li&&b&游戏是什么?&/b&(我的定义能否同时用在文字冒险游戏、FPS游戏和扔沙包上)&/li&&li&&b&判断游戏好坏的标准是什么?&/b&(这个标准能否同时用在《魂斗罗》和《模拟人生》上)&/li&&li&&b&构成游戏的要素有什么?&/b&(某两种要素是不是可以归纳成一种)&/li&&li&&b&构成游戏的必须要素是什么?&/b&(《俄罗斯方块》和《Flap Bird》有这些要素吗)&/li&&li&&b&游戏的终极目标是什么?&/b&(为什么是这个,可不可以是其他的)&/li&&li&&u&《EVE(星战前夜)》&/u&&b&和&/b&&u&《Rust(腐蚀)》&/u&&b&在哪些地方是相似的?&/b&(还有哪些完全不同的游戏存在相似的体验)&/li&&li&&b&我为什么做游戏?&/b&&/li&&li&&b&……………………&/b&&/li&&/ul&希望最后一个问题没有轰击到你。通过对自己提问,和回答上面这些问题,通过看书阅读和研究别人的理论,我们会不断地修正自己的回答,不断地形成自己的思想体系。&b&千万!不要满足于自己现在给出的答案! &/b&思维训练,这些问题就能让我们在地铁上、公交车上、夜不能寐的晚上致身于游戏事业。&br&思维训练——游戏设计方法论,暂时就说到这里。刚刚提出的最后一个问题:我们为什么做游戏?是我别出心裁,想要引出下一个话题:&b&游戏设计理念&/b&。&br&&br&&b&游戏设计理念&/b&,不同于游戏设计方法论。方法论是指导我们行为和实践的一套理论。设计理念是驱动我们设计游戏的初始动力,也是我们追求的目标。每一个设计师,会有自己笼统的设计理念方向,每一个作品也会有自己的一个或多个设计理念。我们往往会批评一个游戏没有灵魂,其中这个“灵魂”就是设计理念。它是设计师在构想和整个创作过程中不断倾注的东西,也是设计师用来指导改进游戏的顶层因素。&br&那么设计理念在游戏中是如何得到体现的呢?那很微妙,就是我们在游戏中的获得的体验。游玩游戏的过程,可以说就是一个体验的过程(和游乐场一样)。我们从中获得什么样的体验,原则上取决于设计师想让我们获得怎样的体验。设计师通过在游戏项目中贯彻一种设计理念从而把&b&目标体验&/b&加入游戏。(这是如何做到的呢?回答这个问题,需要先对游戏的构成要素具备深刻的理解。这已经超出了本文的范围。)&br&我们来继续介绍设计理念,以及看一下不同的理念会对游戏设计产生什么影响。&br&&br&&br&(未完待续,以上部分更新于12月13日,下次继续)&br&&br&&br&先挖好坑,以后想分享的:&br&High Level Design&br&心流&br&&br&&br&&br&&b&&br&——————————以上为 思维训练 &设计 部分——————————&/b&&br&&br&&br&&br&&b&**********************************章节分割线***************************&/b&&br&&br&————&b&Part3 美术&/b&—————&br&如果我们有了编程能力,有了设计理论,有了一个游戏的想法……我们要把它表达出来。我不是说写案子给别人看,而是把想法可感官(受)化,可视化。那我们必然需要视觉元素的设计能力。游戏中所有对应视觉元素的工种都可以叫做美工(当然,准确的说需要除去计算机图形技术的编程人员)。美工下又有许多细分,比如:概念设定、人设、场景、建模师、贴图绘制、动作动画、特效制作、UI设计……这是一个庞大开发团队中的岗位列表。作为一个全能设计师,(坐稳扶好)我们需要掌握以上所有工种的核心技能。等等,你说你想放弃?别别别,这些事情没有想象中那么难。以我的经验,要拿下美工所有成就,是能在一年内就做到的。实在不行就两年!那么我们应该如何开始呢?&br&开头说啦,我们是高中生,除了做题什么都不会,所以也不会用PS(Photoshop)。然而PS的运用是每一个美工岗位都需要掌握的技能,甚至很多岗位完全就是在PS上工作的。所以我们先要熟悉一下PS。少年请收好这两发PS教程。&br&&b&Photoshop教程:&/b&&br&&a href=&///?target=http%3A//www.51zxw.net/list.aspx%3Fpage%3D7%26cid%3D339& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PhotoshopCS5视频教程_Page7-我要自学网&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//www.51zxw.net/list.aspx%3Fcid%3D524& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PhotoshopCC案例教程&i class=&icon-external&&&/i&&/a&&br&这两份教程并不一定要先看完,但是最后你们总会知道要回来学的。&br&&br&对PS有一定了解了之后再去学什么呢?我假设你已经花了不少时间学习了程序,学习了Unity的使用,并且在学习过程中接触了3D游戏的开发。那么,你现在肯定会想知道3D模型到底是什么鬼。所以我建议这时先去学习一下3Dmax这款软件。&br&&b&3Dsmax 教程:&/b&&br&&a href=&///?target=http%3A//www.51zxw.net/list.aspx%3Fcid%3D431& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&3Dsmax2012基础教程&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//www.51zxw.net/list.aspx%3Fcid%3D324& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&3Dmax高级建模教程&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//www.51zxw.net/list.aspx%3Fcid%3D357& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&3DS MAX三维动画教程&i class=&icon-external&&&/i&&/a&&br&大家注意啊,虽然这几个教程都是来自“我要自学网”,但是我为大家选教程不是随便找的,而是有设置目的的。PS和3Dmax的教程网上都是一抓一大把,大家找的时候也要注意甄别。像上面这三套教程,第一套普及3Dmax大部分知识点,第二套深入高模制作的技术手段(不光是软件工具的使用了,还包括了制作思路和经验),第三套了解3D动画的知识点。整体难度呈螺旋上升。边学边跟着做,学完并掌握这些大概需要全天两到三个月(已经算上了偷懒和怀疑人生的时间)。如果谁在学这些的期间,没有怀疑过理想没有怀疑过人生,那么我建议顺手把“动画原理”也学了,这会帮助理解3Dmax里面的工具的工作原理。其他人就算了,后来还有很多东西等着我们呢~&br&&br&3Dmax掌握了,现在知道unity里面那些模型、动作都是怎么一回事了,感觉我好像什么都知道了呢。这时候你已经很棒了,真的很棒了,但这还不够。因为你只是知道了一些制作原理,让你设计一些真正的东西你还是会懵逼的。不要急,我们马上就来学习设计!&br&设计怎么学呢?CG美术怎么学我们就怎么学。学习步骤:&br&&b&1、学习线稿绘画,能够用线稿表达任何实物。&/b&(就是让你画什么你就能画什么,用线画出来)&br&下面我要献丑了:这是我从零开始学习,正好学了一个月时设计的东西。用线表达清楚所有结构,外形设计,内形切割要符合形式美法则(然而我这并不美,除那坨热翔)。&br&&img src=&/v2-b332d8eed873b9369f07e_b.png& data-rawwidth=&1172& data-rawheight=&957& class=&origin_image zh-lightbox-thumb& width=&1172& data-original=&/v2-b332d8eed873b9369f07e_r.png&&&br&&img src=&/v2-7dbffa3dc_b.png& data-rawwidth=&1919& data-rawheight=&537& class=&origin_image zh-lightbox-thumb& width=&1919& data-original=&/v2-7dbffa3dc_r.png&&&br&&b&2、学习素描。&/b&(不是这样的素描:传统纸上素描)&br&&br&&br&而是这样的素描(PS里绘画)&br&这是我第三次画素描几何体。&br&&img src=&/v2-2f8cff53ed4cafd5368250_b.png& data-rawwidth=&1222& data-rawheight=&464& class=&origin_image zh-lightbox-thumb& width=&1222& data-original=&/v2-2f8cff53ed4cafd5368250_r.png&&&br&右图中电视机下面两个几何体那样的素描。(学素描第一周的练习作品)&br&&img src=&/v2-772fa6af28aa7839fcca018dd0893dec_b.png& data-rawwidth=&1401& data-rawheight=&522& class=&origin_image zh-lightbox-thumb& width=&1401& data-original=&/v2-772fa6af28aa7839fcca018dd0893dec_r.png&&&br&&br&学到后面要能够用素描画出各种实物。比如下面右边这个是我用15分钟临摹的,左边是原物。&br&&img src=&/v2-d6d53a7c54004acff8d2dbbde6e65b3b_b.png& data-rawwidth=&451& data-rawheight=&622& class=&origin_image zh-lightbox-thumb& width=&451& data-original=&/v2-d6d53a7c54004acff8d2dbbde6e65b3b_r.png&&&br&当能够用素描自己设计东西的时候就算及格了。(学习半个月时自己设计的作品)&br&&img src=&/v2-cbedeaf03cd97_b.png& data-rawwidth=&1000& data-rawheight=&963& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&/v2-cbedeaf03cd97_r.png&&&br&下面这个是我学习一个月时设计的作品,第一个是我设计的刺客套装(其他三个是队友设计的)&br&&img src=&/v2-b2012b87abbed59b432d1c_b.png& data-rawwidth=&2616& data-rawheight=&1262& class=&origin_image zh-lightbox-thumb& width=&2616& data-original=&/v2-b2012b87abbed59b432d1c_r.png&&&br&&b&3、学习色彩。&/b&&br&是不是放图太多了?这一步我还正在学习中,潦草的练习作品倒是很多,先不放了(保护大家眼睛要紧)。&br&&br&其实我很想谈一谈自学美术应该如何进行。无论以什么方法,大的过程就是上面三个步骤:线稿、素描、色彩。而关于设计的能力,从线稿开始就要一直贯穿学到最后。我最开始自学是找了一套“名动漫”的公开教程,断断续续看了两个月。&br&这是名动漫现CEO张聪讲的“自学的方法和途径”: &a href=&///?target=http%3A///s/1jItyNky& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/s/1jItyNk&/span&&span class=&invisible&&y&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&(快去看一下吧,非常专业细致)&br&看完了这个讲解相信你已经心里有谱了,就差一个手绘板了。当时我和你的想法差不多。但是后面你会发现,自学美术真的不容易。特别是对于我们这种带着不纯正的目的心(不是因为热爱而学)的人。因为你会懒于下笔,你会怀疑是否正确,你会感到无聊烦躁,你会爱上自己的画,你会少一个人来鞭笞你纠正你鼓励你。那怎么办?名动漫没有给我发Q币,我就不给它做宣传了,不过去上一个暑假班、周末班,把他们的基础课学完基本就够了。(张聪:Q币稍后到账)&br&我在这里先放一下我看过的自学资源。&br&&b&CG美术教程:&/b&&br&链接:&a href=&///?target=http%3A///s/1c1HbvZq& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/s/1c1HbvZ&/span&&span class=&invisible&&q&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 密码:a26n&br&少年收好不谢!&br&&br&(又码累了~我去泡个脚下次接着更~○( ^皿^)っHiahia…)&br&&br&(这篇回答还远远没有完成。因为近段时间在学美术,早八晚九,平时都是在坐地铁的时候写回答,所以更得慢,大家也可以养肥了再看~如果这篇回答对你有帮助的话,也点个赞鼓励一下我呗&br&关于书单,希望各位大神能够一起推荐,只要符合每一阶段的阅读目标就好)
多图预警。 长文预警。 上一次更新:日。 这次没有更新本回答的正文内容,但是我在我的专栏中,发布了。里面比较详细地展示了游戏的开发流程,以及人员分工、每个岗位的工作…
&img src=&/v2-91a103fd92b9c4ef1eb9694_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-91a103fd92b9c4ef1eb9694_r.jpg&&&p&最近在做项目的优化,经过一段时间的努力,在小米4上的从23帧左右提高到36帧左右,很大程度上解决了发热的问题,下面是优化的一些点的记录,后续有优化,会继续补充。&/p&&ul&&li&模型导入的时候如果不选择Import Materials, Unity 会为它引用一份Default Materials,这份材质会引用Unity 的Standard Shader等多个shader,如果使用bundle,最终都会打入bundle包中,造成资源冗余。所以模型导入的时候,一定要用这个Import Materials来做使用的材质。&/li&&li&第三方插件里用到的Shader,一定自己重写一份,这样可以和自己游戏里已有的Shader公用,避免Shader的冗余。&/li&&li&Image Effect在中低端机上的开销是巨大的,能不用就不用,能用UI替换的效果,就用UI实现。&/li&&li&NGUI的代码里会使用Shader.Find, 这个如果使用bundle的话,是不能找到的,必须要把相关的Shader放入Always Include里面,但是这样会造成Shader的冗余。正确的做法是,代码里不要使用Shader.Find, 所有的Shader 打成Bundle 包,通过自己的资源加载使用。&/li&&li&NGUI的裁减是通过Shader实现的,每嵌套一层裁减,就多一份Shader(shader的后缀1,2,3),可以改成一份Shader,在CPU里把嵌套的裁减计算完,结果传入Shader。这样UI每多一种材质,只需要增加一种Shader就好了,而且裁减不受嵌套层数的限制。&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&// 更新裁减区域
void UpdateClipRange()
UIPanel currentPanel =
float clip_x_min = -f;
float clip_x_max = f;
float clip_y_min = -f;
float clip_y_max = f;
bool is_clip =
for (int i = 0; currentPanel != )
if (currentPanel.hasClipping)
float angle = 0f;
Vector4 cr = currentPanel.drawCallClipR
// Clipping regions past the first one need additional math
if (currentPanel != this)
Vector3 pos = currentPanel.cachedTransform.InverseTransformPoint(this.cachedTransform.position);
cr.x -= pos.x;
cr.y -= pos.y;
Vector3 v0 = this.cachedTransform.rotation.eulerA
Vector3 v1 = currentPanel.cachedTransform.rotation.eulerA
Vector3 diff = v1 - v0;
diff.x = NGUIMath.WrapAngle(diff.x);
diff.y = NGUIMath.WrapAngle(diff.y);
diff.z = NGUIMath.WrapAngle(diff.z);
if (Mathf.Abs(diff.x) & 0.001f || Mathf.Abs(diff.y) & 0.001f)
Debug.LogWarning(&Panel can only be clipped properly if X and Y rotation is left at 0&);
angle = diff.z;
float min_x = cr.x - cr.z;
float max_x = cr.x + cr.z;
float min_y = cr.y - cr.w;
float max_y = cr.y + cr.w;
if(min_x & clip_x_min) clip_x_min = min_x;
if(max_x & clip_x_max) clip_x_max = max_x;
if(min_y & clip_y_min) clip_y_min = min_y;
if(max_y & clip_y_max) clip_y_max = max_y;
currentPanel = currentPanel.parentP
float size_x = (clip_x_max - clip_x_min) * 0.5f;
float size_y = (clip_y_max - clip_y_min) * 0.5f;
clip_range = new Vector4(clip_x_min + size_x, clip_y_min + size_y, size_x, size_y);
&/code&&/pre&&/div&&ul&&li&NGUI的UIRect里在Update的时候,会有个anchor相关的计算,这个计算本身会去判断transform的有效性,这个开销是很大的,可以修改为一个bool值,在anchor设置的时候,修改这个bool值,可以优化很多。&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&public class AnchorPoint
public bool is_target_alive_ =
public void Update ()
if (leftAnchor.is_target_alive_)
if (bottomAnchor.is_target_alive_)
if (rightAnchor.is_target_alive_)
if (topAnchor.is_target_alive_)
&/code&&/pre&&/div&&ul&&li&游戏里有很多提示信息,比如是否可以升级,是否有新活动,等等,这些状态的刷新可以做成触发式的一定做成触发式,做不成的一定要限制更新的频率,至少要1秒以上一更新。&/li&&li&一定要用对象池管理资源的加载,并加入延迟卸载的策略,对于频繁使用的资源,就会避免频繁的加载释放。&/li&&li&Resources.UnloadUnusedAssets接口会造成严重的卡顿,选择合适的时机调用。&/li&&/ul&
最近在做项目的优化,经过一段时间的努力

我要回帖

更多关于 unity3d 描边 的文章

 

随机推荐