游戏物体和游戏组件的关系:
1.、游戏物体是组件组成的,包含一个以上的游戏组件;(每个游戏物体至少有一个Transform组件)
2、游戏物体是游戏组件的盛放容器,组件不能独立存在;
3、游戏物体的各个特性是由游戏组件组合起来形成的效果;
Transform组件
1、Transform.Translate 移动增量
不写默认使用自身坐标系
2、Transform.Rotate旋转
1)按照API要求的参数进行数值传递;
2)Space.Self 和 Space.World 区别:Space.Self以自身为参考系来进行旋转;Space.World 是以世界坐标系为参考系的;
3、transform.RotateAround
transform.RotateAround(target.transform.position, Vector3.up, 10);
物体绕某一个点沿着某个轴进行旋转
4、LookAt
5、查找子物体
transform.childCount:子物体的数量;
transform.GetChild(i);根据index来查找子物体。注意:子物体的子物体是不会管的;
transform.Find("name");根据子物体名字来精确查找,也不会搜索子物体的子物体;
GameObject.Find("name");能根据游戏物体名字在所有场景内游戏物体中查找,好用但是效率很低,谨慎使用。
通过Tag来进行查找游戏物体:
Rigidbody & Collider
1、Rigidbody基础属性
Mass:质量
Drag:摩擦力
Angular Drag:转弯阻力
Use Gravity:使用重力
Is Kinematic:运动学刚体,当两个刚体发生碰撞,它不会发生位移
Interpolate:插值处理抖动:
- none:没有插值运算;Interpolate:
- 根据上一帧位置做插值运算;
- Extrapolate:根据上一帧运动预测下一帧的插值。
- 根据上一帧位置做插值运算;
Collision Detection:检测精度:
- Discrete:离散性监测;
- Continuous:连续性监测;
- Continuous Dynamic:连续动态监测。
Constraints: Freeze Position:锁轴位移;Freeze Rotation:锁轴旋转
2、碰撞检测
两个游戏物体发生碰撞,必须有一方有刚体组件,两方都必须有碰撞体组件;
当前监测代码失活,但是碰撞监测函数依然会执行;
注意:当需要监测两个游戏物体发生碰撞时,让运动的游戏物体带刚体组件,因为刚体组件所在的游戏物体长期不运动会延长检测时间,导致监测不敏感;
3、生命周期API
Camera 摄像机
Clear Flags:
- Skybox:天空盒;
- Solid Color: 填充颜色,当有空白处,填充背景颜色;
- Depth Only:仅考虑深度,只渲染需要的层,而且不受其他不渲染层遮挡影响;
- Don't Clear:不清除上一帧留下的渲染数据,类似残影效果。
CulingMask:裁剪层,控制当前摄像机会渲染哪些层的游戏物体,是通过二进制形式控制的
Projection:
Perspective:透视摄像机;一般渲染3D场景或者说是3D摄像机,能渲染出z轴值变化效果; Orthographic:正交摄像机,一般渲染2D场景或者2D游戏,游戏物体在z轴运动效果不能显示;
Size/Field of view:摄像机渲染范围大小;
Clipping Planes:Near/far 渲染最近/最远距离;超出范围的物体不会渲染。
Viewport Rect:
- xy:是以屏幕左下角为起始点,按比例来计算当前摄像机渲染画面的位置;
- WH:当前摄像机渲染的画面在整个屏幕中大小;
Depth:值越大越后渲染,后渲染的画面覆盖前面渲染的画面;所以值越大,显示越靠前;
- Target Texture:当给摄像机Target Texture赋值Rendertexture时,不会渲染到主屏幕;而是将当前摄像机拍摄到的内容显示到RenderTexture上;
LineRenderer
Materia:画线的材质;
Positions:多个点,画线的点集;
Use World Space:是否使用世界坐标系;
Loop:是否循环,是指第一个点和最后一个点是否形成闭环;
Width:画线的宽度,通过曲线来控制;
AddForce 力
力是矢量,有大小有方向,遵循物理学公式;(F = ma,Ft = mv)
1、AddForce
第一个参数是力的大小和方向,第二个参数是力的模式;
- ForceMode. Acceleration:关注是加速度,所以跟物体的质量不相关;
- ForceMode. Force:关注的是力的整体,也就是m*a的值,这时跟物体的质量相关;
- ForceMode. Impulse :关注的是冲量的整体,也就是m*v的值,这时跟物体的质量相关;
- ForceMode. VelocityChange:关注是速度,所以跟物体的质量不相关;
2、AddForceAtPosition
3、AddRelativeForce
Ray 物理射线
new Ray(cube0.transform.position, Vector3.forward);
射线,第一个参数:射线的起始点; 第二个参数:射线的方向
bool Physics.Raycast(ray)
物理射线监测;返回值是bool类型,根据返回值只能确定当前射线有没有碰撞到其他碰撞体;
可以设定可检测的层:
RaycastHit hit;
Bool Physics.Raycast(myray, out hit)
返回值只能返回是否碰撞到其他碰撞体;但是out出来一个hit值,这个hit值是我们需要的;
当我们射线碰撞到一个游戏物体的碰撞体后,返回的 hit 包含怕碰撞对象的信息:
- public Collider collider { get; } //碰撞体
- public float distance { get; set; } //碰撞体和射线起始点的距离
- public Vector3 normal { get; set; } // 碰撞点所在的平面的法向量
- public Vector3 point { get; set; } //实际碰撞到的点的世界坐标位置
- public Rigidbody rigidbody { get; }// 碰撞到的游戏物体的刚体
- public Transform transform { get; } //碰撞到的游戏物体的Transform组件
一条射线可以碰撞到多个物体:
延迟函数
Destroy(object,float time);time时间之后销毁object类型;
Invoke 延迟执行函数,通过方法名延迟调用对应函数;(注意:当此脚本或者当前脚本所在的游戏物体失活,延迟函数依然会执行;但是当前脚本或者游戏物体被销毁,延迟函数就不会执行;)
取消延迟函数:CanceInvoke();如果不传参数,那么就会取消当前代码内的所有延迟函数;如果传参数,就是取消对应函数延迟调用;
延迟重复调用 InvokeRepeating(string methodName, float time, float repeatRate),Time时间之后调用methodName方法,每隔repeatRate秒之后在调用一次methodName函数;
协程
协程不是多线程,是假的“多线程”,多用于异步加载资源、场景、网络数据;
1、协程声明函数:
2、启动协程函数
- StartCoroutine("PrintA",4);
- StartCoroutine(PrintA(4));(不建议使用)
- IEnumerator ie = PrintA(); StartCoroutine(ie);.
3. 协程的启动与关闭
4.协程是否失效:
- 当协程开启后,当前代码组件失活,不影响协程继续执行;
- 当协程开启后,当前代码组件销毁,协程就不继续执行;
- 当协程开启后,当前代码组件所在游戏物体失活,协程就不继续执行;跟延迟函数不一样;
- 所以以后有协程的代码不能挂在经常失活或者激活的游戏物体上;
- 5. yield return
6.协程异步加载Resources资源
7.协程异步加载场景:
-
IEnumerator IELoadScene(string name) { async = SceneManager.LoadSceneAsync(name); yield return async; Debug.Log("11111111"); }
Unity 的特殊文件夹
Resources:资源文件夹,可以通过路径直接用API Resources进行加载;工程文件打包时,不在特殊文件夹内时,跟其他文件都没有依赖关系时,此资源不会打进包;但是Resources文件内所有资源,无论是否跟其他资源有依赖关系,都会打进包;为了减小包体大小,Resources不能乱放资源;
Standard Assets:默认文件夹,此文件内资源会被优先编译,代码
Plugins:插件一般放这个文件夹;还有一些android和ios平台区分的文件;
Editor:存放Unity工具类,这个文件夹内所有资源都不会打进包;
Application.persistentDataPath:固定数据路径
2D图片资源
TextureType:
- Default:默认图片类型;
- Normal map:法向贴图;
- Editor GUI:编辑器使用图片;
- Sprite:精灵图片格式;
- Cursor:鼠标贴图
- Cookie:灯光Cookie贴图
- Lightmap:灯光贴图;
- Single Channel:单通道贴图;
- Lightmap:灯光贴图;
- Cookie:灯光Cookie贴图
- Cursor:鼠标贴图
- Sprite:精灵图片格式;
- Editor GUI:编辑器使用图片;
- Normal map:法向贴图;
Alpha Sources:alpha通道资源
- None:没有Alpha通道资源;
- Input Texture Alpha:自带Alpha资源;
- From Gray Scale:根据RGB均值计算得来的Alpha值
- Input Texture Alpha:自带Alpha资源;
Alpha is Transparency:alpha通道强化;
Non Power of 2:
- none :不做图片处理;
- To Nearest:处理图片大小最接近2的倍数图片尺寸;
- ToLarger:图片分辨率最大尺寸来;
- ToSmaller:图片分辨率最小储存来;
Generate Mipmaps:根据不同距离显示不同分辨率图片,耗费内存;跟3D的LOD功能类似;
Filter Mode:
- Point:模糊过度填充;
- Bilinear:双线性填充;(建议使用,3d场景贴图)
- Trilinear:三线性填充,不建议使用它,消耗太高;
- Bilinear:双线性填充;(建议使用,3d场景贴图)
Aniso Level:摄像机视野和场景角度很小时,是否增强纹理的精细度等级,等级越高,精细度就越高;一般默认,除非特别的建筑物使用高级别;
SpriteRenderer 2D图片渲染组件
Sprite:存放2D图片资源,2d图片TextureType必须是Sprite;
Color:这个值轻易不要改;
Flip:x轴反转,Y轴反转;
DrawMode: 渲染方式:
- Simple:简单模式
- Sliced:九宫格模式
- Tiled:填充模式: (TiledMode:连续填充、自适应填充)
SortingLayer 和 Order in layer:
- 先对比Sortinglayer,越往下,排序越靠前;
- 如果SortingLayer一样,那么Order in layer 越大越靠前;
Effector 效应器
效应器通常与 Collider2D 同时使用;
1、Point Effector:模仿的是磁铁功能;
需要勾选BoxCollider的istriger选项和UsedbyEffector功能;
- ForceMagnitude:正的表示斥力,负的表示引力;数值的大小也就是模长大小代表力的大小;
- ForceSource:力的来源(刚体所在的位置或者是碰撞体所在的位置)
- ForceTarget:力的作用目标(目标刚体的位置或者碰撞体的位置)
2、SufaceEffector:模仿的是地面,可以使冰面也可以是粘板
需要勾选上boxcollider的UsedbyEffector功能;
Speed:当数据为正时,会有一个x轴正方向的速度;如果为负,会给当前平面上的游戏物体一个x轴负方向的速度;
3、Area Effector 2D:模仿的是风
需要勾选BoxCollider的istriger选项和UsedbyEffector功能;
- Use Global angle:是否使用世界坐标系;
- Force angle:力的角度;x轴正方向为0度,逆时针方向为正
- Force Magnitude:力的大小;
4、Platform Effector2D:平台通过性;模仿的是平台功能
需要勾选上boxcollider的UsedbyEffector功能;
Surface arc:平台的通过性角度;
5、Buoyancy Effector2D:模仿的是浮力
需要勾选BoxCollider的istriger选项和UsedbyEffector功能;
Density:密度;
Surface Level:水平面;