-
unity基本组成元素是sprite
添加图片的时候已经默认添加了sprite
可以直接在屏幕右侧添加组件
-
rigid body是刚体组件,可以在gravity scale里按需要调整重力大小
防止在z轴上的旋转可以在constraints里勾选freeze rotation
-
Input类的GetAxis方法可以获取当前位置,传入参数是字符串,分别有”Horizontal”和”Vertical”
调用Vector2类的第一个和第二个元素可以使用.x和.y
- 三种update方式的区别:
- MonoBehaviour.Update 更新:当MonoBehaviour启用时,其Update在每一帧被调用。
- MonoBehaviour.FixedUpdate 固定更新:当MonoBehaviour启用时,其 FixedUpdate在每一帧被调用。
- 处理Rigidbody时,需要用FixedUpdate代替Update。
- 例如:给刚体加一个作用力时,你必须把作用力应用在FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)
- MonoBehaviour.LateUpdate 晚于更新:当Behaviour启用时,其LateUpdate在每一帧被调用。
- LateUpdate是在所有Update函数调用后被调用,可用于调整脚本执行顺序。
- 例如:当物体在Update里移动时,跟随物体的相机可以在LateUpdate里实现。
-
新版unity不支持rigidbody来调用自己,必须要使用GetComponent(),并且必须写在方法内部。
-
实现附加只需要把project中的c#脚本拖动到hierarchy中的图片素材上即可,否则默认是移动主摄像机。
-
一定要两个刚体才可以讨论碰撞,不可移动的刚体可以认为质量无限大,使用polygon(多边形)碰撞比edge(边缘)碰撞要精确。
- 关于获得键盘事件可以参考:
void Speed_Control() { if (Input.GetKeyDown(check_space)) { speed = new Vector2(30, 30); } else if (Input.GetKeyUp(check_space)) { speed = new Vector2(80, 80); } }
-
勾选”IsTrigger”属性表示该碰撞体用于触发事件,并将被物理引擎所忽略。
意味着,子弹将穿过触碰到的对象,而不会阻碍对象的移动,触碰的时候将会引发”OnTriggerEnter2D”事件。
-
Edit->Project Settings->Editor,将Default Behavior Mode设置成2D模式,这样拖入工程的图片会自动变换为Sprite类型。
- bullet的trigger检测代码:
private void OnTriggerEnter2D(Collider2D collision) { enemy e = collision.gameObject.GetComponent(); if (e == null) return; if (e.get_hp() <= damage)//敌人血量不足 { Destroy(e.gameObject);//消灭敌人 } else { e.set_hp(damage); } Destroy(gameObject);//碰撞后消除子弹 }
- enemy的trigger检测代码:
private void OnTriggerEnter2D(Collider2D collision) { player p = collision.gameObject.GetComponent(); if (p == null) return; Destroy(p.gameObject);//摧毁玩家 Destroy(gameObject);//摧毁敌人 }
-
永远记得消除gameobject,否则一直消除的是脚本。
-
2D转3D有可能导致物体消失。取决于摄像机位置。
-
建立prefab只需要把hierarchy里面的物体拖动回来即可。此时prefab默认带好了图片,创建方式如下:
Instantiate(Resources.Load("Prefab/bullet"));
重载的时候可以带上初始位置和旋转角度:
Instantiate(Resources.Load("Prefab/bullet"), player_pos, rotation);
玩家位置需要实时获取,旋转角度默认无参就可以。
-
获取玩家位置需要使用transform,如下:
Vector3 player_pos = GameObject.Find("player").transform.position;
-
控制上下左右移动:
transform.localPosition = Vector3.MoveTowards(transform.localPosition, transform.localPosition + dif, 0.5f*Time.time);
最后一个参数是最大移动距离。
- 获取指定gameObject的方式
GameObject.Find("名字")
GameObject.FindGameObjectWithTag(tag)
gameObject.transform.Find("名字")
-
getkey才可以实现键盘按下后一直移动。
-
构建场景时可以使用Ctrl+Shift+B 然后add current 然后Ctrl+S。 一定要把所有场景加入工程才可以运作。
-
把脚本绑定到画布上,并且在画布的inspector中设置各个按钮变量对应的是哪个按钮。
此外还需要加入Event System!!!!!
按钮需要box collider,尺寸需要手动修改。
按钮还需要在onclick当中设置调用哪个函数,同时左下角是绑定到canva上面使用的,此时可以直接调用canvas上挂载的脚本的public函数。
-
可以改变canvas的渲染方式为摄像机渲染并选中当前场景的摄像机,这样就能在场景出现时才制作canvas。
- 可以调整canvas的scaler的UI scale Mode使得其大小由屏幕决定。
2020.7.11更新:
(Text文字模糊可以使用overflow,让文字大小不受Text大小影响)