自己用的unity学习笔记(一)——组件操作

来源:互联网 发布:淘宝关键词提取器 编辑:程序博客网 时间:2024/05/22 12:35
 

组件操作

组件中,一般组件名就是该组件的类名,如果带括号,括号内为类名。

Unity内的组件,禁止new实例化。

成员变量加上public才能在组件面板上显示,并且不需要初始化(可以初始化)

每个组件的各属性名称一般都是该组件类的变量名(一般是小写)(不一定,但大多都是)。

在代码组件中,对组件数据的修改,只能保持在运行情况下。

禁止使用已有的组件名称(即类名)

Transform组件

Vector3vector2可以互转,因为v2中重写了隐式转换。

Transform下有SetSiblingIndex()函数,设置同级子物体的顺序。SetSiblingIndex(0)就是第一个。

SetAslastSiblingIndex()设成最后一个

还可以transform.GetSiblingIndex()获取对应物体的顺序,获取后直接给另一个物体,另一个物体就会插到对应位置,原物体会被挤下去。

Transform _transform;

_transform.ratation = Quaternion(四元数).AngleAxis(float a,Vectors3 b);

移动

Translate(向量,使用坐标空间);

第二参数默认是self

如果第一个参数是vector3是开头,第二个参数为world代表世界坐标,如果self则代表自身坐标方向。

如果第一个参数是transform是开头,第二个参数为world代表自身坐标,如果是self或者不填,就会乱了。

获取组件

_transform1 = GetComponent<Transform>();//最常用的方法

_transform1 = GetComponent(typeof(Transform)).transform;

_transform1 = TransformGetComponent(typeof(Transform));

_transform1 = GetComponent(“Transform”) as Transform;

GetComponentInChild<T>()获取子类的插件,只获取匹配的第一个

GetComponentsInChild<T>()获取子类的插件的数组,获取所有

旋转

Rotate()  Rotate(Vector3.up);沿世界坐标的y周每帧旋转一度

第二参数也是worldself,默认self。如果是transform.up,就只能使用world,否则就会乱了。

RotateRound(vector3,axis,float 角度);朝着某个物体转。

Axis transform时,会沿着自己的轴的倾斜度旋转,但该轴应以向量的形式理解。

Positionlocalposition

Position一定是相对于世界坐标系的。

Localposition才是相对于父物体的位置。

Rotation 也一样,但rotation的输出是四元数

input输入操作

input输入一定要写在update中,不能写在fixedupdate

键盘操作

数字的键盘枚举值是alpha+数字

Input.GetAxis

获取水平或垂直方面的值,最大不超过正负1,按下一刻起会从0,每次增加0.05一直到1

float f = Input.GetAxis("Horizontal");//按下右键该值是负数,正数则为左键

float f = Input.GetAxis("Vertical");//按下下键该值是负数,正数则为上键

input.GetKey(),长按一直获取。

input.GetKeyDown(),只有按下那一刻获取一次,长按没作用

Gameobject操作

创建

GameObject a = new GameObject("new name");创建一个空物体,名字为new name

GameObject aa = GameObject.CreatePrimitive(PrimitiveType.Cube);创建一个cubePrimitiveType是个枚举类型,可以直接点出来需要创建的物体名

aa.AddComponent<Rotations>();添加对应名称的组件

查询

查询的效率很低,耗时非常高,所以能拖过去就拖过去,不要find查询,尤其要避免在循环和update中使用。

 

GameObject.Find(名称);  通过名字查询,返回GameObject,如果名称相同,会返回最后一个。查询子物体,可以通过层级来查,例如:GameObject.Find(Plane/Cube)

Unity中和路径相关的都是左斜杠/,只要写和路径相关的字符串,前面都加上@符号。

设置父类

transform.SetParent(物体的transform[,第二参数bool]);

第二参数可不写,默认true如果为true,则相对于父级位置、缩放和旋转修改该对象,使得该对象保持与之前世界坐标空间一样的位置,旋转和缩放

删除

Destroy(任意物体或组件);删除一切物体(包括物体的组件)或组件,如果有子物体,也会全部删除。因为该方法属于Object(GameObject的父类),参数是Object,Objectunity所有类的父类。该方法也会触发OnDestroy();

Destroy(this)不是销毁当前物体,而是销毁当前组件。

Transform组件禁止被删除。

时间类

帧是画面刷新

帧率:画面刷新的速率 帧数/时间  60/

Time.deltaTime;以秒计的每帧的时间。开始的一瞬间,会卡顿一下(因为要加载场景),那一帧的时间会远比其他帧的长。

Time.fixedDeltatime : 固定的帧率的fixedupdate每帧的时间

Time.time:是时间的累加,受时间缩放影响,是time.deltatime累加过来的,并不精准。

Time.realtimeSinceStartup: 从游戏开始到现在的真实时间。

Time.fixedTime: Time.fixedDeltatime累加的值。

TimeScale:时间速度的缩放,范围0-1000会暂停,realtimeSinceStartup不会停止,其他都会停止(fixedDeltatime其实也没停,只不过不再调用了),速度过快会掉帧的。

注意:timeScale0时,updatelateupdate不会停止,fixedupdate会停止。

GUI操作

GUI00点是game视窗的左上角。

挂血条

人物头顶加一个空物体,获取空物体的世界坐标,将世界坐标转成屏幕坐标,然后将血条放在屏幕的空物体投影上,再让血条根据屏幕深度的z值变化

BeginGroup开始组,必须配套以EndGroup结束关闭容器。

摄像机Camera

摄像机参数

Clear flags : 摄像机渲染方式。

Skybox天空盒 Windows-lighting->setting中更换天空盒。天空盒启用后,颜色调节没用。

Solid color 固定颜色。

Depth only深度渲染,只有物体会亮

Don,t clear

Culling mask 渲染层级选择,对应layers的层

Projection:投影方式

perspective透视投影,满足近大远小

Orthographic 正交投影

(透视投影才有的)

Fielf of view 视野

Clipping planes  near摄像机近裁平面 far摄像机远裁面。物体离开开近裁面和远裁面会消失。

Viewport rect :有多个屏幕时,单个屏幕在摄像机中所占的大小,可以做小地图(一般不用这个方式)。

Depth:深度,多个摄像机时,哪个深度值高,就显示哪个摄像机

Tatget texture 目标贴图,可以使用摄像机将内容投影到贴图上,但一个摄像机只能有一个功能,要么投影贴图,要么投影到屏幕。

Occlusion culling 暂时将看不到的物体隐藏掉,节省资源。

阅读全文
0 0
原创粉丝点击