当前位置: 首页>数据库>正文

unity3d基础操作 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,系统会自动选中所有关联资源


https://www.xamrdz.com/database/67e1942189.html

相关文章: