一 : Unity4.x 2D游戏开发基础教程第一章
Unity4.x 2D游戏开发基础教程(内部资料)——daxueba.net版权所有
Unity 4.x 2D
游戏开发基础教程
(内部资料)
大学霸
www.61k.com
大学霸——daxueba.net
·2· Unity 4.x 2D游戏开发基础教程(内部资料)——daxueba.net版权所有
前 言
Unity是一款综合性的游戏开发工具,也是一款全面整合的专业游戏引擎。它可以运行在Windows和Mac OS X下,并提供交互的图形化开发环境为首要操作方式。使用Unity开发的游戏,可以部署到所有的主流游戏平台,而无需任何修改。这些平台包括Windows、Linux、Mac OS X、iOS、Android、Xbox 360、PS3、WiiU和Wed等。开发者无需过多考虑平台之间的差异,只需把精力集中到制作高质量的游戏即可,真正做到“一次开发,到处部署”。
据权威机构统计,国内53.1%的人使用Unity进行游戏开发;有80%的手机游戏是使用Unity开发的;苹果应用商店中,有超过1500款游戏使用Unity开发。
网上有为数众多的2D和3D游戏。稍微关注一下,就会发现2D游戏才是主流,如植物大战僵尸、愤怒的小鸟、打飞机、2048等。而且,问问身边的人让他们印象深刻的游戏是什么,你会惊讶的发现,大部分游戏同样是2D的。
基于以上不可忽略的事实,本书决定着眼于讲解使用Unity开发2D游戏的基础知识,且书中包含了两个生动的2D游戏示例,相信读者会喜欢它们的。
1.学习所需的系统和软件
? ?安装Windows 7操作系统
? ?安装Unity 4.5.1
Unity 4.x 2D游戏开发基础教程(内部资料)——daxueba.net版权所有 ·3·
目 录
第1章 Unity及其组成的介绍 ................................................................................... 错误!未定义书签。
1.1 Unity概述 ...................................................................................................................................... 8
1.2 项目、资源和场景 ..................................................................................................................... 11
1.2.1 项目 .................................................................................................................................. 11
1.2.2 资源 .................................................................................................................................. 13
1.2.3 场景 .................................................................................................................................. 15
1.3 场景视图的操作 ......................................................................................................................... 15
1.3.1 使用快捷键操作场景视图 .............................................................................................. 16
1.3.2 使用Gizmo操作场景视图 ............................................................................................... 18
1.4 游戏对象和组件 ......................................................................................................................... 19
1.5 脚本与脚本编辑器 ..................................................................................................................... 20
1.5.1 创建脚本 .......................................................................................................................... 20
1.5.2 脚本编辑器 ...................................................................................................................... 21
1.6 脚本的调试 ................................................................................................................................. 23
1.6.1 调试方法一 ...................................................................................................................... 24
1.6.2 调试方法二 ...................................................................................................................... 26
.................................................................................................... 错误!未定义书签。 第2章 材质和纹理
2.1 材质和纹理的使用 ....................................................................................... 错误!未定义书签。
............................................................................................ 错误!未定义书签。 2.1.1 使用材质
2.1.2 不同的材料类型——着色器 ............................................................ 错误!未定义书签。
............................................................................................ 错误!未定义书签。 2.1.3 使用纹理
2.2 应用于2D游戏的材质 ................................................................................. 错误!未定义书签。
.................................................................................................... 错误!未定义书签。 2.2.1 缘由
2.2.2 技巧一:使用白色的环境光 ............................................................ 错误!未定义书签。
2.2.3 技巧二:使用光不敏感着色器 ........................................................ 错误!未定义书签。
............................................................................................... 错误!未定义书签。 2.3 纹理使用规则
2.3.1 规则1:分辨率是2的次方 ............................................................. 错误!未定义书签。
2.3.2 规则2:保证“质量” ..................................................................... 错误!未定义书签。
2.3.3 规则3:增加阿尔法通道(Alpha Channel) ................................. 错误!未定义书签。
....................................................................................................... 错误!未定义书签。 2.4 导入纹理
2.4.1 导入纹理时默认设置介绍 ................................................................ 错误!未定义书签。
2.4.2 含有透明信息的纹理 ........................................................................ 错误!未定义书签。
第3章 着手开发一个简单的2D游戏 ...................................................................... 错误!未定义书签。
3.1 开始开发2D游戏 ......................................................................................... 错误!未定义书签。
3.1.1 导入纹理资源 .................................................................................... 错误!未定义书签。
3.1.2 新建材质资源 .................................................................................... 错误!未定义书签。
3.1.3 修改场景的环境光以及游戏时的屏幕尺寸 .................................... 错误!未定义书签。
3.2 为场景添加游戏对象 ................................................................................... 错误!未定义书签。
·4· Unity 4.x 2D游戏开发基础教程(内部资料)——daxueba.net版权所有
3.2.1 调整游戏对象的角度 ........................................................................ 错误!未定义书签。
3.2.2 改变游戏对象的位置 ........................................................................ 错误!未定义书签。
3.2.3 游戏对象的“碰撞”组件 ................................................................ 错误!未定义书签。
3.3 让飞船动起来 ............................................................................................... 错误!未定义书签。
3.4 让飞船发射子弹 ........................................................................................... 错误!未定义书签。
3.4.1 在场景中添加子弹 ............................................................................ 错误!未定义书签。
3.4.2 游戏时,让子弹在场景中移动 ........................................................ 错误!未定义书签。
3.4.3 生成子弹的预设 ................................................................................ 错误!未定义书签。
3.4.4 设置子弹的发射位置 ........................................................................ 错误!未定义书签。
3.4.5 在恰当的时机发射子弹 .................................................................... 错误!未定义书签。
3.5 让外星飞船动起来 ....................................................................................... 错误!未定义书签。
............................................................................................ 错误!未定义书签。 3.5.1 编写脚本
3.5.2 设置外星飞船的触发器 .................................................................... 错误!未定义书签。
3.5.3 为子弹预设添加刚体组件 ................................................................ 错误!未定义书签。
3.6 为游戏添加背景 ........................................................................................... 错误!未定义书签。
第4章 使用编辑器类自定义编辑器 ........................................................................ 错误!未定义书签。
....................................................................................................... 错误!未定义书签。 4.1 编辑器类
4.2 开始使用编辑器类编写工具 ....................................................................... 错误!未定义书签。
4.2.1 为项目添加脚本 ................................................................................ 错误!未定义书签。
4.2.2 创建指定名称的文件夹 .................................................................... 错误!未定义书签。
4.3 把工具添加到菜单 ....................................................................................... 错误!未定义书签。
4.3.1 CreateWizard函数 .............................................................................. 错误!未定义书签。
4.3.2 测试脚本的实现效果 ........................................................................ 错误!未定义书签。
4.4 读取场景中选择的对象 ............................................................................... 错误!未定义书签。
4.4.1 在脚本中使用Selection类 ................................................................. 错误!未定义书签。
4.4.2 测试脚本的实现效果 ........................................................................ 错误!未定义书签。
4.5 为工具窗口添加用户输入框 ....................................................................... 错误!未定义书签。
4.6 完成工具的所有功能 ................................................................................... 错误!未定义书签。
第5章 图片与几何图形对象 .................................................................................... 错误!未定义书签。
5.1 2D游戏常用的图片 ...................................................................................... 错误!未定义书签。
.................................................................................................... 错误!未定义书签。 5.1.1 精灵
................................................................................................ 错误!未定义书签。 5.1.2 图块集
5.1.3 图形绘制中的问题 ............................................................................ 错误!未定义书签。
5.1.4 设想 .................................................................................................... 错误!未定义书签。
5.2 开始编写编辑器工具 ................................................................................... 错误!未定义书签。
5.3 设置四边形的轴点 ....................................................................................... 错误!未定义书签。
5.4 指定四边形资源的存放路径 ....................................................................... 错误!未定义书签。
................................................................................................... 错误!未定义书签。 5.5 生成四边形
5.5.1 阶段一:创建构成四边形的顶点、UV和三角形 .......................... 错误!未定义书签。
5.5.2 阶段二:在资源面板中生成四边形 ................................................ 错误!未定义书签。
5.5.3 阶段三:在场景中实例化一个四边形 ............................................ 错误!未定义书签。
5.6 使用四边形生成工具 ................................................................................... 错误!未定义书签。
................................................................................................ 错误!未定义书签。 第6章 生成纹理图集
6.1 为什么要使用纹理图集 ............................................................................... 错误!未定义书签。
Unity 4.x 2D游戏开发基础教程(内部资料)——daxueba.net版权所有 ·5·
6.1.1 降低绘制调用的次数 ........................................................................ 错误!未定义书签。
6.1.2 便于灵活的使用纹理 ........................................................................ 错误!未定义书签。
6.1.3 便于管理纹理 .................................................................................... 错误!未定义书签。
6.2 开始编写生成纹理图集的工具 ................................................................... 错误!未定义书签。
6.3 添加组成纹理图集的纹理 ........................................................................... 错误!未定义书签。
6.4 UV对纹理图集的重要性 ............................................................................. 错误!未定义书签。
............................................................................................... 错误!未定义书签。 6.5 生成纹理图集
6.5.1 步骤一:优化输入的纹理 ................................................................ 错误!未定义书签。
6.5.2 步骤二:构建纹理图集 .................................................................... 错误!未定义书签。
6.5.3 步骤三:保存图集的预置 ................................................................ 错误!未定义书签。
................................................................ 错误!未定义书签。 6.6 脚本文件TexturePacker代码汇总
6.7 测试工具的使用效果 ................................................................................... 错误!未定义书签。
第7章 UV和动画 ...................................................................................................... 错误!未定义书签。
7.1 生成一个可停靠的编辑器 ........................................................................... 错误!未定义书签。
7.2 编辑工具窗口的界面 ................................................................................... 错误!未定义书签。
7.2.1 添加预置资源选择区域 .................................................................... 错误!未定义书签。
7.2.2 添加纹理选择区域 ............................................................................ 错误!未定义书签。
7.2.3 添加纹理选择的两种方式 ................................................................ 错误!未定义书签。
7.2.4 编写用于修改网格对象UV坐标的函数 .......................................... 错误!未定义书签。
7.2.5 添加应用所有设置的按钮 ................................................................ 错误!未定义书签。
7.3 工具脚本代码的汇总与使用 ....................................................................... 错误!未定义书签。
7.4 一个播放动画的平面对象 ........................................................................... 错误!未定义书签。
第8章 益于2D游戏的摄像机与场景设置 .............................................................. 错误!未定义书签。
8.1 摄像机类型:透视与正交 ........................................................................... 错误!未定义书签。
8.2 世界单元与像素 ........................................................................................... 错误!未定义书签。
8.3 世界单元与像素的转换 ............................................................................... 错误!未定义书签。
8.3.1 添加纹理和四边形对象 .................................................................... 错误!未定义书签。
8.3.2 调整四边形与摄像机的位置 ............................................................ 错误!未定义书签。
................................................................... 错误!未定义书签。 8.3.3 世界单元:像素 = 1:1
8.3.4 对齐屏幕和场景坐标的原点 ............................................................ 错误!未定义书签。
8.4 纹理图片的完美显示 ................................................................................... 错误!未定义书签。
8.5 其它有用的设置技巧 ................................................................................... 错误!未定义书签。
............................................................................................ 错误!未定义书签。 8.5.1 调节深度
8.5.2 合成视图 ............................................................................................ 错误!未定义书签。
第9章 获取玩家对2D游戏的输入 .......................................................................... 错误!未定义书签。
9.1 自动检测鼠标单击事件 ............................................................................... 错误!未定义书签。
9.2 手动检测鼠标单击事件 ............................................................................... 错误!未定义书签。
9.2.1 鼠标按下的键及其位置 .................................................................... 错误!未定义书签。
9.2.2 鼠标点击的第一个对象 .................................................................... 错误!未定义书签。
9.2.3 鼠标点击的所有对象 ........................................................................ 错误!未定义书签。
9.3 修改游戏中的鼠标图标 ............................................................................... 错误!未定义书签。
9.3.1 准备所需的资源,并做适当设置 .................................................... 错误!未定义书签。
............................................................................................ 错误!未定义书签。 9.3.2 编写脚本
9.3.3 两个坐标系导致的问题 .................................................................... 错误!未定义书签。
二 : Android游戏开发基础part2--Canvas画布
游戏开发基础part2--Canvas画布
又过了一周才继续做总结,四级结束了,应该可以多点时间学习游戏编程了。(www.61k.com]
Canvas画布类是一个在游戏当中担当非常重要的角色,它可以绘制出不同的图形和图片,可以说没有了画布就不能做出画面炫丽的游戏。
下面总结一下画布类Canvas封装的常用的函数:
具体说明如下:
1.drawColor(int color)
作用:绘制颜色覆盖画布,常用于刷屏
参数:颜色值,也可用十六进制形式表示(ARGB)
2.drawText(String text,float x,float y,Paint paint)
作用:绘制文本字符
第一个参数:文本内容
第二、三个参数:文本的X,Y坐标
第四个参数:画笔实例
3.drawPoint(float x,float y,Paint paint)
作用:绘制像素点
第一、二个参数:像素的坐标
第三个参数:画笔实例
4.drawPoints(float[] pts,Paint paint)
作用:绘制多个像素点
第一个参数:Float数组,数组中放置的是多个像素点的X,Y坐标
第二个参数:画笔实例
5.drawLine(float startX,float startY,float stopX,float stopY,Paint paint)
作用:绘制一条直线
前两个参数:起点的X,Y坐标
后两个参数:终点的X,Y坐标
最后一个参数:画笔实例
6.drawLines(float[] pts,Paint paint)
作用:绘制多条直线
第一个参数:Float数组,数组中放置的是多个直线的起始点与终点X,Y坐标
第二个参数:画笔实例
7.drawRact(Rect r,Paint paint)
作用:绘制矩形
第一个参数:矩形实例
第二个参数:画笔实例
8.drawRoundRect(RectF rect,float rx,float ry,Paint paint)
作用:绘制圆角矩形
第一个参数:矩形实例
第二个参数:圆角X轴的半径
第三个参数:圆角Y轴的半径
第四个参数:画笔实例
9.drawCircle(float cx,float cy,float radius,Paint paint)
作用:绘制圆形
第一、二个参数:圆形的中心点X,Y坐标
第三个参数:圆形的半径
第四个参数:画笔实例
10.drawArc(RectF oval,float startAngle,float sweepAngle,boolean useCenter,Paint paint)
作用:绘制弧形(扇形)
第一个参数:矩形实例
第二个参数:弧形的起始角度
第三个参数:弧形的终止角度
第四个参数:是否绘制中心点;如果为真,起始点与终止点都会分别连接中心点,从而形成封闭图形;如果为假,则起始点直接连到终止点,从而形成封闭图形。
第五个参数:画笔实例
11.drawOval(RectF oval,Paint paint)
作用:绘制椭圆
第一个参数:矩形实例
第二个参数:画笔实例
12.drawPath(Path path,Paint paint)
作用:绘制指定路径图形
第一个参数:路径实例
第二个参数:画笔实例
13.drawTextOnPath(String text,Path path,float hOffset,float vOffset,Paint paint)
作用:将文本沿着指定路径进行绘制
第一个参数:文本
第二个参数:路径实例
第三个参数:文本距离绘制起点的距离
第四个参数:文本距离路径的距离
第五个参数:画笔实例
创建项目实例:CanvasProject
项目运行效果图:
项目代码:
==>MySurfaceView.java
package com.cp; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PaintFlagsDrawFilter; import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.SurfaceHolder.Callback; /** * * @author Himi * */ public class MySurfaceView extends SurfaceView implements Callback, Runnable { //用于控制SurfaceView private SurfaceHolder sfh; //声明一个画笔 private Paint paint; //声明一条线程 private Thread th; //线程消亡的标识位 private boolean flag; //声明一个画布 private Canvas canvas; //声明屏幕的宽高 private int screenW, screenH; //设置画布绘图无锯齿 private PaintFlagsDrawFilter pfd = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); /** * SurfaceView初始化函数 */ public MySurfaceView(Context context) { super(context); //实例SurfaceHolder sfh = this.getHolder(); //为SurfaceView添加状态监听 sfh.addCallback(this); //实例一个画笔 paint = new Paint(); //设置画笔颜色为白色 paint.setColor(Color.WHITE); //设置焦点 setFocusable(true); } /** * SurfaceView视图创建,响应此函数 */ @Override public void surfaceCreated(SurfaceHolder holder) { screenW = this.getWidth(); screenH = this.getHeight(); flag = true; //实例线程 th = new Thread(this); //启动线程 th.start(); } /** * 游戏绘图 */ public void myDraw() { try { canvas = sfh.lockCanvas(); if (canvas != null) { //----设置画布绘图无锯齿 canvas.setDrawFilter(pfd); //----利用填充画布,刷屏 canvas.drawColor(Color.BLACK); //----绘制文本 canvas.drawText("drawText", 10, 10, paint); //----绘制像素点 canvas.drawPoint(10, 20, paint); //----绘制多个像素点 canvas.drawPoints(new float[] { 10, 30, 30, 30 }, paint); //----绘制直线 canvas.drawLine(10, 40, 50, 40, paint); //----绘制多条直线 canvas.drawLines(new float[] { 10, 50, 50, 50, 70, 50, 110, 50 }, paint); //----绘制矩形 canvas.drawRect(10, 60, 40, 100, paint); //----绘制矩形2 Rect rect = new Rect(10, 110, 60, 130); canvas.drawRect(rect, paint); canvas.drawRect(rect, paint); //----绘制圆角矩形 RectF rectF = new RectF(10, 140, 60, 170); canvas.drawRoundRect(rectF, 20, 20, paint); //----绘制圆形 canvas.drawCircle(20, 200, 20, paint); //----绘制弧形 canvas.drawArc(new RectF(150, 20, 200, 70), 0, 230, true, paint); //----绘制椭圆 canvas.drawOval(new RectF(150, 80, 180, 100), paint); //----绘制指定路径图形 Path path = new Path(); //设置路径起点 path.moveTo(160, 150); //路线1 path.lineTo(200, 150); //路线2 path.lineTo(180, 200); //路径结束 path.close(); canvas.drawPath(path, paint); //----绘制指定路径图形 Path pathCircle = new Path(); //添加一个圆形的路径 pathCircle.addCircle(130, 260, 20, Path.Direction.CCW); //----绘制带圆形的路径文本 canvas.drawTextOnPath("PathText", pathCircle, 10, 20, paint); } } catch (Exception e) { // TODO: handle exception } finally { if (canvas != null) sfh.unlockCanvasAndPost(canvas); } } /** * 触屏事件监听 */ @Override public boolean onTouchEvent(MotionEvent event) { return true; } /** * 按键事件监听 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return super.onKeyDown(keyCode, event); } /** * 游戏逻辑 */ private void logic() { } @Override public void run() { while (flag) { long start = System.currentTimeMillis(); myDraw(); logic(); long end = System.currentTimeMillis(); try { if (end - start < 50) { Thread.sleep(50 - (end - start)); } } catch (InterruptedException e) { e.printStackTrace(); } } } /** * SurfaceView视图状态发生改变,响应此函数 */ @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } /** * SurfaceView视图消亡时,响应此函数 */ @Override public void surfaceDestroyed(SurfaceHolder holder) { flag = false; } }扩展:canvas清除画布 / canvas 清空画布 / 清除canvas画布内容
==>MainActivity.java
package com.cp; import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置全屏 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); //显示自定义的SurfaceView视图 setContentView(new MySurfaceView(this)); } }
扩展:canvas清除画布 / canvas 清空画布 / 清除canvas画布内容
三 : 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
html5 游戏 公开课-引爆好友圈-微信HTML5游戏开发基础
四 : 学习游戏软件开发需要哪些基础
[游戏开发]学习游戏软件开发需要哪些基础——简介61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1