自己用的unity学习笔记(一)——unity3d基础操作
Unity3D
Unity基本操作
Unity基本单位为米,ue4是厘米
Rotation 为度,监事面板是角度,代码里计算的结果是弧度
Scale的单位是倍数。负数为左右镜像
创建工程
必要文件夹:
Sences
Scripts
Prefabs
工程结构
Assets所有素材都在里面,迁移必须
Library临时文件库,迁移工程时不拷贝,临时生成
ProjectSettings 项目设置-》projecversion 项目版本号,迁移必须
Temp缓存文件,可以不拷贝。
Meta文件都是unity生成的导入配置信息,例如图片的分辨率,压缩方式,版本控制时,例如svn一般不上传。
X轴旋转到正负90度,会发生万向死锁
组成
Scene(场景)
编辑游戏中所有的内容
右键控制视角,右键+w/s/a/d,对应视角移动操作。
按住鼠标中间切换移动,松开切换回来
Game(游戏窗口)
游戏中真正显示的内容
Project(资源窗口)
包含项目中所有的资源,对应工程下Asset目录
右键-》show in exploder 打开对应文件夹
Hierachy(对象实例化的窗口)
游戏世界中所包含的内容。
Inspector(信息面板、检视面板)
Console(控制台)
Debug.Log();
Unity中视觉窗口所有内容都称为Gameobject
坐标
Unity2d的(0,0)点是game窗口左下角。3d使用左手坐标系。
相对坐标和绝对坐标
库函数
UnityEngine->unity库。
class只有继承了MonoBehaviour才能挂到gameobject身上
DeBug类
日志输出
Log 输出,黑色
LogError 打印红色日志,错误
LogWarning 打印黄色警告日志
属性
name属性是当前脚本所在游戏物体的名字
警告处理
1、如果出现了the referenced(引用) script on this Behaviour is missing ,选中后下发有描述,一般此错误有两种可能,一是脚本被删除,二是脚本名或类名被改变了。
2、如果脚本丢失,建议先删除再重新添加。
3、脚本名必须和类名一致
错误处理
error CS0103: The name `XXX' does not exist in the current context xxx类不存在
error CS1501: No overload for method `xxxx' takes `n' arguments xxxx方法参数数量有误
unity对大小写敏感。
NullReferenceException(异常): Object reference not set to an instance of an object空引用异常
error CS0266: Cannot implicitly convert type `UnityEngine.Component' to `UnityEngine.Transform'. An explicit conversion exists (are you missing a cast?) 不能转换类型
消息函数
不是主动调用,通过消息机制调用的函数。例如start(),update()
SendMessage()发送消息的方法,所有的gameobject对象都可以调用。但不要使用sendmessage,因为效率很低。
生命周期
Awake() 脚本实例化时调用,一般用于初始化,脚本开始只执行一次,Awake在初始化之前调用,在Awake中调用不到其他函数,因为可能还没有初始化。
Start() 脚本第一次启用update前调用(Awake之后执行),也用于初始化,但不同与Awake,后于Awake调用。
Onenble当组件被激活的时候执行(脚本激活时)。
Ondisable当组件被失活的时候执行。
Update() 运行时,每帧调用。屏幕刷新一遍为一帧,人眼为24帧
FixedUpdate() 和update()的帧长不同,FixedUpdate先执行,它的每帧时间完全固定0.02,每帧时间可以在unity中设置,edit中,倒数第三个选项,主要应用于物理受力处理
OnDestroy() 该脚本被移除时调用,同时对应物体被删除时也会调用。(其实还是脚本被删除时调用,删除物体同时也删除了脚本,先删除组件后,再删除物体就不会触发。)
OnGUI(),每一帧调用,和update相同,负责绘制屏幕(game窗口),使用的API是GUI 的类。
物理生命周期
OnCollisionEnter(Collision); 当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionEnter将被调用
OnCollisionExit(Collision)当此collider/rigidbody停止触发另一个rigidbody/collider时,OnCollisionExit将被调用。
OnCollisionStay(Collision)当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。
OnTriggerEnter |
当Collider(碰撞体)进入trigger(触发器)时调用OnTriggerEnter。 |
OnTriggerEnter2D |
当另一个对象进入到这个对象附加的触发碰撞器时发送消息(仅2D物理)。 |
OnTriggerExit |
当Collider(碰撞体)停止触发trigger(触发器)时调用OnTriggerExit。 |
OnTriggerExit2D |
当另一个对象离开附加在这个对象的触发碰撞器时发送消息(仅2D物理)。 |
OnTriggerStay |
当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用。 |
OnTriggerStay2D |
当另一个对象停留在这个对象附加的触发碰撞器内时,每帧发送消息(仅2D物理)。 |
预制体prefab
场景内容是临时存在的,预制体是永久存在的,所以,场景内的物体拖不到预制体的代码中。
创建预制体
将物体直接拖到资源窗口,就能自动创建预制体
游戏中使用预制体的物体,最上方或多出三个属性:select(选中当前使用预制体的文件),apply(应用修改的数据到预制体,所有使用此预制体的物体都会改变),revert点击会恢复默认的预制体数据。
加载预制体
加载预制体,就必须把预制体放在Resources目录下,通过Resources.Load(路径)获取预制体,然后通过Instantiate()实例化。
禁忌:禁止直接使用预制体,因为这样会在运行期间直接修改预制体的数据,停止运行后预制体数据不会还原
Resources目录
该目录属于unity官方指定目录,必须使用此名字,存放资源使用。
一般存放预制体,贴图,音效等内容。
加载通过Resources.Load(“路径及文件名”),或者Resources.Load<T>(路径及文件名);
路径根起点默认为Resources,因此不用写Resources。
例如:Resources.Load<GameObject>(“A”);
加载后需要通过实例方法(Instantiate())添加到世界中。
Instantiate(original: Object, 【position: Vector3, rotation: Quaternion】) 克隆原始物体并返回克隆物体。
Resurces.load是堵塞性加载,加载内容时程序会一直停在这里,加载完成时才会继续往下执行。
Resurces.load加载后,不使用了需要释放掉,否则会一直在内存中加载,使用Resources.UnloadAsset(变量名); 随后变量名一定要置空,否则该变量会变成一个未知指向的野指针。
不要在update中使用Resurces.load
动态资源加载(异步资源加载)
Resources.LoadAsync();异步加载。异步加载不会堵塞主线程
返回ResourceRequest类型的对象,该对象继承于AsynOperation。
AsynOperation中有一个progress进度函数,该值为0-1,常用于场景切换的进度条。
AsynOperation中有属性isDone,是否加载完成
加载完成的资源在ResourceRequest的对象.asset字段中
异步加载常常配合协程使用。
遇到函数Async结尾一定都是异步,sync肯定是同步的。
场景切换
场景类Application类(早期版本使用)
Application.Quit();退出场景,结束游戏
Application.Load ();已弃用。
SceneManager类
使用要先using unityEngine.SceneManager
SceneManager.loadScene(场景索引);
加载场景的异步加载
SceneManager.LoadSceneAsync(场景索引);返回值是asyncOperation类型,也有progress。
异步加载完后会自动跳转场景,不会等待指令。
asyncOperation的allowSceneActiveation属性改为false后,就不会加载完成后自动跳跃了,但此时进度也会永远变不了100%,最大停留在0.9的位置,isDone永远为false,发送跳跃指令后才会完成。
工程与工程之间的资源迁移
导出,再导入
Export package,系统会自动选中所有关联资源
自己用的unity学习笔记(一)——unity3d基础操作相关推荐
- class unity 定义类_【Unity学习笔记】C#基础-类(Classes)
1. 行为类 类(class)是物体导向程序(objected oriented programming,OOP)的关键组成部分. functionality>classes>fields ...
- UE5学习笔记01(基础操作二)
1.Outliner被翻译成"大纲". 2.当按住Shift键移动一个物体时,摄像机会追随被移动的物体,形成一种第三人称视角的感觉. 3.在Outliner中选择一个或者多个物体之 ...
- UE5学习笔记01(基础操作一)
1.Editor播放状态下,Shift + F1可以显示鼠标. 2.Viewport内,鼠标左键上下拖拽是基于自身坐标前后移动视角,左右移动是左右环视:鼠标中键上下左右拖拽是基于自身坐标上下左右移动视 ...
- 【Unity学习笔记】b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别)
[Unity学习笔记]b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别) 自己跟着学完了,写了不少代码,会放在CSDN代码库,因为老师并没有提供源码,录屏也不是完全连续,所以难 ...
- Unity学习笔记1 简易2D横版RPG游戏制作(一)
这个教程是参考一个YouTube上面的教程做的,原作者的教程做得比较简单,我先参考着做一遍,毕竟我也只是个初学者,还没办法完全自制哈哈.不过我之前也看过一个2D平台游戏的系列教程了,以后会整合起来,做 ...
- Unity学习笔记:个人学习项目《疯狂天才埃德加》纠错文档
Unity学习笔记:个人学习项目<疯狂天才埃德加>纠错文档 本文档是完成学校Unity课程作业时建立的纠错文档.用于记录自己开发过程中遇到的各种问题,以便下次遇到相同的问题时及时找到解决方 ...
- Unity学习笔记(4)-----粒子效果的实现
Unity学习笔记(4)-–粒子效果的实现 一.效果展示 下面用若干张张动图展示效果: 大概就是这样,并不是很难. 实际效果要比图中的好一点(顺畅得多). 实现步骤 大致可以分为如下几个步骤,然后逐个 ...
- 【Unity学习笔记】[Unity中文课堂教程] C#中级编程代码
[Unity学习笔记][Unity中文课堂教程] C#中级编程代码 最近想补一补C#基础,Unity官方的C#中级编程教程质量很高,于是开个帖子把跟着敲+记录了部分价讲解和我自己的理解的代码存在这 原 ...
- Unity学习笔记:Unity 3D 飞机大战
Unity学习笔记:Unity 3D 飞机大战 1.打开unity软件后,首先新建Quad作为背景,导入飞机模型,并为其添加刚体 然后创建C#脚本,挂载到飞机上. 2.给飞机创建子弹,让子弹成为预制体 ...
- 【Unity学习笔记】UnrealToUnity教程:(网上购买的素材导入Unreal+插件转Unity)
[Unity学习笔记]UnrealToUnity教程: 最近想从Unreal那边化点缘借借素材,没想到踩到一个大坑 一,素材导入Unreal 这个教程比较多,根据素材的来源,传送门是以下这几个: 1. ...
最新文章
- 【k8s最容易理解的科普】到底是什么 用处是什么
- 《自然》评价“天问一号”成功发射—— 全球深空探索走进新时代
- 你想学习Java ?资源都在这里了
- 深度理解do{} while(0)语句的作用
- sap开发-采购订单更改历史table
- concurrent(四)Condition
- 光立方体c语言程序,学C语言两个月做的一个旋转立方体!
- Java中的JPA是什么意思?
- 数据库编程之嵌入式SQL
- 转:解决浏览器Adobe Flash Player不是最新版本问题
- 各层电子数排布规则_电子数的排布规律
- Python数据分析!NBA的球星们喜欢在哪个位置出手!
- ZooKeeper源码分析之完整网络通信流程(一)
- C# 获取可执行文件EXE(文件夹)路径大全
- 网络变压器作用(续):带中间抽头的两个线圈组成的网络变压器及其作用
- “新产业50人论坛”之陈柳平:量子通信与量子计算的商业实践
- CSDN2018博客之星评选——期待各位大佬的投票!哈哈
- 5-14 电话聊天狂人 (25分)
- 【点宽专栏】国信证券——关于量化选股之聚类分析的探讨
- Thingworx平台:通过kepware将底层PLC变量写入指定数据库的方法
热门文章
- 初中信息技术面试计算机网络,2019下半年中学信息技术教师资格面试真题完整版...
- CAD梦想画图中“轻松手绘”功能使用方法
- 让玩家提升游戏耐玩度的8个小技巧
- Steam Deck——硬盘,网络,模拟器一命通关教程
- 华宇(大连)一面-20190620
- 从单机到多机:多机一定比单机快吗?秒杀系统到底有没有必要用分布式锁?
- 微信小程序:中老年用户群体的流量生意如何做?
- 更改netbios计算机名,修改你计算机的Netbios名
- java poi操作word模版 导出word文档(附工具类)
- 帆软BI中界面上如果要替换原有的组件,两种替换方式