Unity 2D学习总结
unity开发平台的使用
1、游戏对象
游戏对象的显示关系
游戏对象的轴心一般为游戏对象的几何中心,也可以进行人为更改
游戏对象的父子关系:将一个游戏对象挂载的另一个游戏对象下,子节点以父节点作为轴心参考
摄像机:游戏运行时的实际画面即为摄像机所看到的画面
2、Component 组件
Sprite Renderer组件:用于显示图片
Transform组件:用于调整游戏对象的Position(位置)、Rotation(旋转)、Scale(缩放)
AudioSource 组件:用于播放音频
3、游戏脚本Script
游戏脚本挂载在游戏对象下
类名必须与文件名相同
必须继承于 MonoBehaviour ,所有 Unity 脚本都继承于这个类
默认定义了一些事件函数,如 Start() , Update() ,会被 Unity 引擎自动调用
Start() 开始调用一次,可用于初始化;Update() 每帧调用,帧间隔不等,可用于更新游戏
显式设置帧率:Application.targetFrameRate = 50,实际上实际帧率仍有偏差
获取上一帧的间隔:Time.deltaTime
获取任意节点下的组件:
获取节点:GameObject obj = GameObject.Find("/path/of/target");
获取节点下的组件:SpriteRenderer comp = obj.GetComponent<SpriteRenderer>();
获取当前节点下的组件:
SpriteRenderer renderer = this.gameObject.GetComponent<SpriteRenderer>();
添加脚本组件的属性(参数):
public int number = 10;
public string helloMessage = "Hi";
只有 public 属性才在 Inspector 里显示
在 Inspector 里可以修改初始值
也可以添加引用类型的属性,如图片资源、游戏对象、组件
事件函数
不以 On 打头的,由系统主动调用
Awake() , Start(), Update(), FixedUpdated()
以 On 打头的,是相应事件的回调函数
OnEnable(), OnDisable (), OnGUI() …
脚本的执行顺序
Execution Order : 脚本的执行顺序,即优先级
默认的执行顺序为无序,为0
执行顺序的设定:Project Settings | Script Execution Order
顺序值越小,则越优先。
4、坐标
节点的坐标用三维向量Vector3表示
transform.position = new Vector3(0, 1.0f, 0);
指定旋转角度时,用 eulerAngles 或者 localEulerAngles
transform.eulerAngles = new Vector3(0, 0, 90f);
世界坐标
World Space Position 以世界坐标系计算
transform.position = new Vector3(0, 1.0f, 0); 指定世界坐标
本地坐标
Local Space Position 以父节点的坐标系计算
transform.localPosition = new Vector3( 0, 1.0f, 0); 指定本地坐标
世界坐标(该物体在世界空间中的坐标)
屏幕坐标(通过屏幕观察,该物体在屏幕上的位置)
Vector3 pos = transform.position;
Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos);
获取屏幕坐标(左下角为屏幕坐标系的原点)
屏幕坐标的边界:Screen.width Screen.height
5、物体的运动
坐标系
Space.Self 使用自己的坐标系 ( 默认值 )
Space.World 使用世界坐标系
transform.Translate(0, 0.02f, 0, Space.Self);
相对运动
transform.Translate( dx, dy, dz) 即在原位置上偏移 dx, dy, dz 的距离
沿自己的y轴方向进行改变
绝对运动(绝对改变)
transform.position = new Vector3(0, 1.0f, 0);
运行的方向
Vector3 face = this.transform.up;
Vector3 direction = target.transform.position - this.transform.position;
float angle = Vector3.SignedAngle(face, direction, Vector3.forward);
this.transform.Rotate(0, 0, angle); //旋转与目标的夹角,从而转向目标
改变旋转的方向
6、向量
长度
float len = v.magnitude;
标准化
Vector3 a = new Vector3(3f, 4f, 0);
Vector3 b = a.normalized;
Debug.Log("标准化为: " + b.ToString( "F3" )); F3为保留3位小数
几个常用的标准向量
向量夹角
Vector3 a = new Vector3(2, 2, 0);
Vector3 b = new Vector3(-1, 3, 0);
float angle = Vector3.SignedAngle(a, b, Vector3.forward);
将 a 向量逆时针旋转,到b向量所划过的角度
7、鼠标事件处理
鼠标事件
Input.GetMouseButtonDown(0) 检查鼠标按下事件
Input.GetMouseButtonUp(0) 检查鼠标抬起事件
Input.GetMouseButton(0) 检查鼠标状态 ( 是否是按下状态 )
获取的坐标为屏幕坐标
Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Debug.Log("世界坐标: " + pos);
pos.z = 0;
屏幕坐标转化为世界坐标
执行逻辑
鼠标事件发生了,大家都知道
每一个游戏对象,都可以根据鼠标事件来做自己的处理。
8、预制体
预制体 Prefab,一般用于游戏对象的动态创建
使用预制体,可以快速创建多个相同的实例
修改预制体时,每一个实例都会自动更新
修改预制体实例,也会影响到预制体资源和所有的实例
动态创建实例
bullet = Instantiate(myPrefab)
创建一个实例,position与rotation与当前游戏对象相当,挂载场景根节点下
bullet = Instantiate(myPrefab, Transform parent )
创建一个实例,position与rotation与当前游戏对象相当,同时指定父节点
销毁实例
9、物理系统
刚体Rigidbody
Dynamic 普通刚体,有质量、有速度
Static 静态刚体,质量无穷大、无速度
( 适用于建筑物、地面等固定不动的物体)
Kinematic 运动学刚体,无质量
( 忽略物理规律的刚体,一般用于碰撞检测 )
碰撞体组件 Collider
碰撞检测(碰撞组件的Is Trigger)
碰撞事件回调
OnTriggerEnter2D :两个碰撞体开始相遇
OnTriggerStay2D : 两个碰撞体接触中
OnTriggerExit2D: 两个碰撞体分开
collision.gameObject 对方
collision.transform 对方的Transform组件
collision.name 对方节点的名称
collision.tag 对方节点的Tag
tag的设置Edit | Project Settings | Tags and Layers …
添加一个自定义的Tag ,如 Target
选中一个物体,在 Inspector 中选择适合的Tag
在碰撞回调中,通过 collision.tag 来识别对方身份
10、音频的播放
AudioSource 组件:用于播放音频
代码实例:
AudioSource audio = GetComponent<AudioSource>();
audio.Play();
AudioSource.Play() :如果正在播放中,则停止,从头开始播放
PlayOneShot ( clip ) :则新开一个播放
11、延时调用
invoke
Invoke ("Response", 3) 内部使用了 ‘反射机制’
Invoke 相关的 API
Invoke ( name ) :添加一个延时调用
CancelInvoke( name ) :取消延时调用
IsInvoking( name ) :检查一个延时调用是否在等待中 ..
InvokeRepeating( name, delay, interval) :延时调用、并重复执行 (定时器)
消息调用
第一种:
GameObject main = GameObject.Find("游戏主控")
MyGame myGame = main.GetComponent<MyGame>();
myGame.AddScore();
第二种:
GameObject main = GameObject.Find("游戏主控");
main.SendMessage("AddScore", 1);
12、UI
添加UI
UI事件处理
第一种:
Button 组件,可以直接添加 OnClick 点击处理
第二种:
在脚本中实现 IPointerDownHandler 接口
Unity 2D学习总结相关推荐
- Unity 2D 学习笔记:游戏实例Sunnyland
Unity 2D 学习笔记:游戏实例Sunnyland 01安装软件&导入素材 02编辑素材&Tilemap 03图层layer&角色建立 04角色移动 05角色方向& ...
- Unity 2D 学习手札 (一) 基本概念
前言 刚开始学习 Unity 2D,看了几本书,或许书中重点都不在 2D 的部分,总是不得其门而入,无法快速的上手,充满挫折.后来在网络上查了一些文章,东拼西凑,才慢慢体会其要意,今将心得记载于此,以 ...
- Unity 2D 学习手札(六)Sprite 动画
简单的范例 如上图,在等待使用者作答时,播放左右晃头的等待动画,使用者作答时,判断答对或答错,分别播放不同的动画及音效.播放完毕,继续左右晃头. 图片制作 左右晃头要准备三个状态的图,分别为摆左.正中 ...
- UNITY 2D学习笔记(二):C#脚本编写
Update(更新帧): 简而言之:Update可以受到变速齿轮,机器性能影响 FixedUpdate用于刚体物理计算,不受影响 假设:处理高速物体或微观检测Edit->ProjectSetti ...
- Unity 2D 游戏开发 官方视频学习顺序
unity2D的官方tutorial上已经有了不少的教程视频,都看一遍的话最起码也知道unity能干什么了. 自学这段时间里我翻译不少,之前也发过,都放到b站了,基本都是1080p的,而且压制后文件不 ...
- Unity 2D游戏开发快速入门(内部资料)
Unity 2D游戏开发快速入门(内部资料) 试读样张:http://pan.baidu.com/s/1hqh5oqw Unity 2D游戏开发快速入门4 前 言 Unity是一款综合的游戏开发工具 ...
- unity多人游戏_如何使用Unity 2D和镜像构建多人纸牌游戏(更新)
unity多人游戏 Working with the canvas in Unity 2D can feel complicated at first, particularly if you're ...
- Unity 2D教程: 滚动,场景和音效
http://www.tairan.com/archives/7074 原文地址:http://www.raywenderlich.com/71029/unity-4-3-2d-tutorial-sc ...
- UNITY 2D入门基础教程 (一)
如果用以前版本的Unity做2D游戏,虽然能做,但是要费很多周折. 比如你可以将一张纹理赋予一个"面片"网格,然后用脚本控制它的动画调整它的位移.如果你要使用物理引擎,那么还要将这 ...
最新文章
- Git Gui for Windows的建库、克隆(clone)、上传(push)、下载(pull)、合并(转)
- Playmaker全面实践教程之Playmaker常用工具
- webstom新增vue模板
- vmware克隆虚拟机
- Netty:另一种Web(套接字)服务器
- 10本书,搞定这门全球1000万程序员在用的编程语言
- oracle:oracle基础知识(二)
- web前端基础之Bootstrap(三) - 插件
- 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性...
- 云计算项目实战——系统API模块
- alembic生成数据库升级脚本
- 分享一些经典的特效效果,希望对大家有帮助
- Stolz定理及其证明
- 二代征信在风控流程中的使用
- java线程池正确使用姿势
- 微信公众号开发系列三:响应关注和取关事件
- 如何查询电脑本机出厂序列号
- C/C++编程学习 - 第19周 ③ 不与最大数相同的数字之和
- 分析bootstrap class path not set in conjunction with -source 1.6
- 如何看待并夕夕公司离职员工在脉脉上疯狂吐槽前公司?
热门文章
- WPS excel 实现查询返回所有符合的结果,将结果拼成一个字符串
- OC/Swift 技术 股票详情
- 入职培训—中国电子信息产业发展研究院(赛迪集团)简介
- 何为TLC、MLC、SLC?【转】
- Compaq笔记本的新功能
- 目前需要开发出一个功能,对比查找并标注出两篇文章中类似的段落或者词句,有什么开源项目有这个功能吗? 其实有点像论文查重的功能,有论文查重的比较通用的开源项目推荐吗?...
- about.php啥意思,about.php
- 论文作者和论文摘要阐述
- 试写一算法,自大至小依次输出顺序读入的三个整数X,Y和Z的值
- 考试管理系统/在线考试系统