Unity脚本(C#)基础笔记

Unity的C#脚本都继承MonoBehaviour

父子节点是由transform组件表示的,所以关于父子节点的操作都是transform的操作

事件回调:

Start() 开始时回调一次(执行一次)

Update() 每帧调用、更新游戏显示

Awake()组件实例化时执行(当组件被禁用也执行)

OnEnable()组件启动时(当开始后,禁用组件再使用会再次启用方法,Start()不会)

方法调用:

控制台打印:

Debug.Log(...);

显式设定帧率:

Application.targetFrameRate=50(number) //设定帧率,但实际帧率是变化的

移动:

this.transform.Translate(0,0,0);//分别向x,y,z轴移动
ps,如果写在update中,因为帧率不固定,实际移动效果的跳动的。
匀速优化:flout step=0.8f*Time.deltaTime;

获取组件(如Spirit Renderer):

SpriteRenderer renderer=this.GetComponent<SpriteRenderer>();
也可以写成:this.gameObject.getComponent<...>();(Unity内部作了封装)
总体上就是创建一个组件对应的对象,在调用获取组件的方法。

获取其他节点:

GameObject obj=GameObject.Find(路径);//路径如"/佩祺/乔治"

获取当前节点父节点:

GameObject parent = this.transform.parent.gameObject

遍历子节点(并打印名字):

foreach(Transform child in transform){
  Debug.Log(child.name);
}

设置父节点:

child.transform.SetParent(parent.transform);
SetParent(null);//挂在场景根节点下

指定节点的坐标:

transform.position = new Vector3(0,1.0f,0)

指定节点的角度(欧拉角)

transform.eulerAngles = new Vector(0,0,90f)

运动的第四个参数:

Translate(0,1.0f,0,Space.Self)//运动时以自身坐标轴运动(默认)即当节点旋转移动角度,会向此角度的上方移动
Translate(0,1.0f,0,Space.World)//运动时以绝对坐标系运动

旋转角度:

position.Rotate(0,0,0)

获取物体的屏幕坐标:

Vector3 pos=transfom.position //先获取物体的世界坐标
Vector3 screenPos = Camera.main.WorldToScreenPoint(pos);//通过世界坐标获取屏幕坐标

根据预制体创建对象:

GameObject obj=Instantiate(myPrefab)

销毁对象:

GameObject.Destory(obj);

参数调用(兼语法):

Time.deltaTime 获取帧间隔

this.gameObject 当前节点(游戏对象)

遍历:foreach(Object obj in objects){}

Vector3 对象表示三维向量

transform.position 节点的坐标

transform.eulerAngles 节点的角度(欧拉角)

transform.roation 是用Vector4表示旋转

transform.localPosition 本地坐标(以父节点坐标系为参照)

vector.magnitude 向量长度(flout)

vector.normailzed 获取某向量的单位向量

flout.toString("F3") 返回三位小数

Vector3.right 获取向右的标准向量 (1,0,0)

Vector3.up 获取向上的标准向量(0,1,0)

Vector3.forward 获取向里的标准向量(0,0,1)

Vector3.Dot(a,b) 向量点积

Vector3.Cross(a,b) 向量差积

Vector3.SignedAngle(a,b,Vector.forward) 获取a,b向量夹角(a到b z轴方向的旋转)存在正负号

Vector3.Angle(a,b) 向量夹角不带正负号

transform.right 物体本身坐标系x轴指向

transform.up 物体本身坐标系y轴指向

transform.forward 物体本身坐标系z轴指向

Screen.width 屏幕宽度

Screen.height 屏幕高度

鼠标事件

鼠标左键按下状态(bool):

Input.GetMouseButton(0)

鼠标左键点击(检测按下 bool):

Input.GetMouseButtonDown(0)

鼠标左键点击(检测松开 bool):

Input.GetMouseButtonUp(0)

鼠标位置:

Input.mousePosition //在2d中获取鼠标坐标时要把z轴调为0,不然会混乱