1:定义委托--访问修饰符 + delegate + 返回值类型 + 委托名称(参数列表);
2:委托是为了实现方法回调;可以吧方法当做参数来传递, 委托可以通过+-来绑定和解绑委托。
3:event是委托的“属性”;如果给委托加了event 就不能给委托 直接赋值了;必须使用+= -=来绑定和解除绑定;
4:unity中使用的print和debug.log来有输出信息;
5:使用脚本挂在到了谁的身上游戏对象的名字:gameobgect.name就可以打印出我们挂载的对象了。
6:gameObject表示的是当前脚本组件挂载的游戏对象;
7:每一个游戏对象的身上至少有一个transform的组件。
8:如果给脚本中的每一个字段都加上public 的时候 在unity中我们就可以找到这个属性可以为这个字段设置一定的值或者字符串。
9:GameObject中的GetCompnent<>();这个方法可以获取这个对象身上的任何组件对象。
获取以后我们可以给它赋值一个对象来接受这个组件对象。
Test t = GetCompnent
这样对象T就可以使用Test组件中对象的字段和方法了。
10:我们将那些继承自Monobehaviour的类叫做运行时类;
列如:Test:Monobehaviour的时候,我们不能使用new 关键字为我们的类来创造一个实例对象:
Test t = new Test();这样的运行就是错误的方式;不能手动创建对象。
11:void start();和void update();并不是MonoBehaviour中的方法,而是通过反射调用的一些方法;
这些方法定义了一个脚本从创建出来到被加载最后销毁的一个过程,也就是脚本的生命周期;
12:void Awake();中只要脚本被加载就会被调用,所以我们常用这个功能做一些初始化的作用。在void Awake();方法中我们一般都是初始化一些public属性的字段和方法。
void OnEnable();是在脚本被激活的时候也就是被勾选的时候首先调用的功能,在void OnEnable();中因为每次脚本被激活的时候我们都会调用这个方法所以我们常常给它里面加载一些逻辑上需要每次脚本激活的时候需要调用的方法和属性。
void Start();这个方法只会在第一次调用Update的时候被调用所以和OnEnable的方法调用是不一样的只会调用一次。
所以我们也会在start方法中去初始化一个些操作。在void Start();中我们都是初始化一些私有的字段和方法。
void Update();这个方法就是每帧调用一次(如果我们每帧调用60次就不卡),所以一般被用于处理一些画面中的人物的位置或者UI界面的跟新等等这些操作。
void LateUpdate(); 是在void Update();这个方法被调用以后才会调用的方法,用于处理一般画面或者万家位置改变以后的一些逻辑操作。
void OnDisable();是在激活被取消的时候调用,也就是我们取消打钩的时候调用和void Awake();这个方法是相反调用的;
void OnDestroy();是脚本被销毁的时候我们调用的方法。也就是一个怪物身上挂着一个脚本当怪物被杀死的时候我们的脚本会和对象一起销毁,这个时候我们就需要将脚本销毁掉,这个方法也可以里面包含一些给玩家的奖励。这个奖励的方法就可以包含在这个方法中在最后被触发;
void OnGUI();这个是在脚本处于激活的时候一直被调用的方法,但是他相比update这些方法的话调用的频率就比较高;IMGUI方法需要写在OnGUI中。
void FixedUpdate();中就是一固定的频率调用。是不会受到图像刷新帧的影响,一般我们会把处理物理刷新代码的程序放在这里; 举例:如果我们的电脑比较老旧,我们玩射击类的游戏一旦发生卡帧的时候。我们朝目标射击后如果物理代码放在
Update中处理我们是打不到的但是放在 voidFixedUpdate();中我们就可以打死。虽然看起来很卡。
13:获取用户的输入我们需要使用Input类:
Input.GetKeyDown(KeyCode.W);获取用户输入的是哪个键,如果其中的参数是我们输入的W键那么这个函数将会返回一个bool类型的值。
每帧都在监听用户事件;Input.GetDown();表示的是用户按下键的时候触发的事件,Input.GetKeyUp();表示的是用户在按下键弹起以后的事件;Input.GetKey();表示的是持续按下一个按键的时候一直触发的事件。
14:就是获取鼠标和键盘输入的一些事件的类,用来返回我们到底按了哪个键来触发事件。
15:
if (Input.GetMouseButtonDown(0)){
print ("按下了鼠标左键");
}
if (Input.GetMouseButtonDown(1)){
print ("按下了鼠标右键");
}
Input.GetMouseButtonDown(参数int);表示监听我们按下了哪个鼠标键的值。0,1表示我们的按键值。
16:《gameObject》类的用法
游戏对象的名字:gameobject.name可以获取游戏对象名字也可以为它设置属性set和get的方法;
游戏对象的标签:gameObject.tag可以赋值也可以打印;
获取游戏对象的激活状态:gameObject.activeSelf
设置游戏对象的激活状态:gameObject.Setactive();
获取游戏对象身上的组件:gameObject.GetCompnent<组件名称>();
给游戏对象添加组件:gameObject.AddCompnent<>(Light);
通过tag值来寻找游戏对象:GameObject.FindGameObjectWithTag("Player");
通过游戏对象名字来查找游戏对象:GameObject.Find(Main Camera);
销毁某个游戏对象:GameObject.Destroy(前面的是物体对象的名称,后面的是时间);
通过tag值来查找多个游戏对象;GameObject.FindGameObjectsWithTag();
17:Vector3是一个类,这个类表示的是一个向量,这个向量表示的是一个既有大小又有方向的量。
Vector3.up; 表示的是世界坐标系中y轴真正方向上的单位向量;
Vector3.down; 表示的是世界坐标系中y轴负方向上的单位向量;
Vector3.right; 表示的是世界坐标系中x轴正方向上的单位向量;
Vector3.left;表示的是世界坐标系中x轴负方向上的单位向量;
Vector3.forward;表示的是世界坐标系中z轴的正方向上的单位向量;
Vector3.back;表示的是世界坐标系中z轴的负方向上的单位向量;
Vector3.zero;表示的是世界坐标系中原点的位置;
18:求两个向量的夹角:Vector3.Angle();
求两个点的距离:Vector3.Distance();
19:transform 控制游戏的旋转和位置还有缩放;
transform.position;表示一个此对象的位置;
增加游戏对象位置的方法:transform.Translate(new Vector3(0,1,0));
旋转一个游戏对象的方法:transform.Rotation(旋转的轴,旋转的角度);
欧拉角的旋转属性方法:transform.eulerAngles = new Vector3(0f,45f,0f);
20:控制游戏对象之间的父子关系
获取当前游戏对象父对象的transform的信息 transform.parent;返回 transform
获取当前游戏对象根对象:transform.root;
获取当前游戏对象中一个特定的对象:transform.Find(需要寻找的对象的名称);
21:time类用来进行实践控制
Time.time;从游戏启动开始到当前帧所消耗的总时间。
Time.deltaTime;表示时间增量,从上一帧开始到这一帧结束,这两帧时间之间的时间间隔;
应用:
transform.Rotate(Vector3.up,Time.deltaTime*30f);这样游戏对象会围绕y轴稳定的以每秒30度的速率旋转;
Time.timeScale;表示时间流逝的快慢;
22:Mathf
Mathf.Abs();表示求绝对值;
Mathf.Max(多个参数);表示求最大值;
Mathf.sin();正弦值;
Mathf.PI();π的求法
Mathf.Sqrt();求平方根
23:Random.Range();创建一个随机数,
24:鼠标事件:
当鼠标点击下去的时候调用
void OnMouseDown(){
Print("鼠标点击触发事件");
}
void OnMouseUp(){
print(“鼠标弹起触发事件”);
}
void OnMouseDrag(){
print("鼠标持续拖拽对象的时候触发事件");
}
void OnMouseEnter(){
print("当鼠标移动到对象内部的时候触发事件");
}
void OnMouseExit(){
print("当鼠标离开到对象内部的时候触发事件");
}
void OnMouseOver(){
print("当鼠标持续停留在对象身上的时候会触发事件");
}
void OnMOuseUpAsButton(){
print("当我们向点击按钮一样点击我们的游戏对象的时候就会触发事件");
}
24: 刚体 Rigidbody
rb.mass; 质量
rb.drag;空气阻力
rb.angularDrag;角阻力
rb.useGravity;是否当前受到重力影响;
rb.isKinematic;是否启用运动学
rb.freezeRotation;是否冻结旋转;
25:给游戏对象施加一个力:rb.AddForce(vector3);
给游戏对象添加扭矩:rb.AddTorque(vector3);
给游戏对象施加一个固定方向的力:rb.AddForceAtPosition(vector3,position);
给游戏对象增加一个固定方向的爆炸力:rb.AddExplosionForce(力的大小,力的点,爆炸范围);
26:
碰撞事件:void OnCollisionEnter(Collision other){
print("碰撞开始");
}碰撞一次就会触发一次这个事件;
碰撞结束时调用一次:void OnCollisionExit(Collision other){
print("碰撞结束");
}
碰撞持续发生的时候调用:
void OnCollisionStay(Collision other){
print("碰撞持续");
}
比较两个字符串相等的方法string Equals(A,B);
27:触发事件
刚刚进入触发范围会调用一次
void OnTriggerEnter(Collider other){
print("调用一次触发");
}
一直在触发事件
void OnTriggerStay(Collider other){
print("一直调用触发只要发生触发事件一直在持续")
}
触发离开以后调用一次
void OnTriggerExit(Collider other){
print("触发离开以后调用一次");
}