Unity组件学习笔记1

游戏物体和游戏组件的关系:

       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:单通道贴图;

Alpha Sources:alpha通道资源

  •         None:没有Alpha通道资源;
    •         Input Texture Alpha:自带Alpha资源;
      •         From Gray Scale:根据RGB均值计算得来的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:三线性填充,不建议使用它,消耗太高;

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:水平面;

猜你喜欢

转载自blog.csdn.net/qq_63122730/article/details/131755184