1. 如何在game模式下放大缩小视图:控制camera的size
2. 如何获取图片的长宽:background isa Gameobject
height =background.GetComponent<SpriteRenderer>().sprite.bounds.size.x;
width =background.GetComponent<SpriteRenderer>().sprite.bounds.size.y;
3. 手指移动相机并限定移动范围
if (Input.touchCount > 0&&Input.GetTouch(0).phase ==TouchPhase.Moved)
{ //if in certain range then move camera
Vector2 touchDeltaPosition =Input.GetTouch(0).deltaPosition;
ransform.position = newVector3(transform.position.x-touchDeltaPosition.x* speed, transform.position.y-touchDeltaPosition.y * speed,-10);
transform.position = newVector3(Mathf.Clamp(transform.position.x,-move_rangewidth, move_rangewidth),Mathf.Clamp(transform.position.y, -move_rangeheight,move_rangeheight),-10);
}
4. 每秒调用:InvokeRepeating(string methodName, float time, float repeatRate)
methodName :要调用的方法 ; time:几秒后开始调用 ; repeatRate: 每几秒调用一次
注意:在Start()中使用
5. 如何通过标签find一个物体:GameObject.FindGameObjectWithTag()
6. Instantiate(Object original, Vector3 position, Quaternion rotation);
在position处创建一个旋转度为rotation的物体original
7. 触摸输入:
1) Input.touchCount 获取触摸点数
2) foreach( Touch touch in Input.touches) //遍历触摸点数
3) Input.GetTouch(0).phase == TouchPhase.Began //一旦第一次触摸
PS: GetTouch( int index ) //index是类似触摸数组的指针
8. Vector2.magnitude :求向量的长度
9.
10. Unity中所有的UI都要放在Canvas中,不然没法渲染
11. Ui中的Grid Layout Group组件(网格布局组):可以把UI当成组在一起操作。
属性:1.padding(垫充),影响ui组在网格中的的初始位置
2.Cell Size(单个大小)
3.Space(cell间隔)
4.cell组开始布局的角
5.Start Axis(布局横纵向)
6.Child Alignment (网格中的布局位置)
12. Canvas中Canvas Scaler组件中的 UI ScaleMode(UI储尺寸模式):1.ConstantPixelSize(尺寸恒定,使用像素大小模式)2.ScaleWithScreenSize(比例随屏幕大小改变模式)3.ConstantPhysicalSize(恒定外形尺寸,由物理单位指定大小)
13. 可以给Text添加outline/shadow组件,给字体添加效果
14. Canvas的子物体如果显示过大,可以通过调节物体scale来调小
15. 物体变大:
Another method()
{
StartCoroutine(Scale(newVector3(0.1f, 0.1f),newVector3(1, 1)));
}
publicIEnumerator Scale(Vector3 from, Vector3 to)
{
float progress = 0;
while (progress <= 1)
{
transform.localScale =Vector3.Lerp(from, to,progress); //放大
progress += Time.deltaTime;
//print(progress);
yieldreturnnull;
}
transform.localScale = to;
}
16.设置物体的可见,可以使用函数 SetActive(bool)
查看它的可见否属性使用 (bool) activeInHierarchy
17.防御范围可以用 Gizmos类中的Gizmos.DrawWireSphere()设置一个区域
18.鼠标移动屏幕:先设置一个float作为像素高,在if判断中Input.mousePosition的x,y 》= Screen.height–像素高
19. 滚轮调节视角高度:
先设置一个滚动速度scrollspeed,然后接受一个float scroll来接受Input.GetAxis(“Mouse ScrollWheel”);
然后设置一个Vector3 pos接受相机位置;然后设置它pos.y-= scroll * sccrollspeed * Time.deltatime;
注意要限制相机的上下界,用clamp()函数。
20. Physics.OverlapSphere:返回所有在区域区域中的collider[];
21. 快速调节物体到另一个物体的位置上:右击物体的Transform组件,选择copy component
22. 将实例化的对象放在一个空对象下:virus.transform.parent = Virusparent.transform;
23. 物体调成Debug模式时可以看到脚本参数的变化
24. 暂停和继续:Time.timeScale = 0f; Time.timeScale = 1f;
25. 场景的加载: 调用UnityEngin.SceneManager中的LoadScene(string)函数,通过改变string实现想不同场景的跳转。
重新开始:SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); 调用当前活跃的场景。同时要设置 Time.timeScale = 1f;
26. Panel的淡入淡出: 给panel加一个CanvaseGroup和animator组件,在animation中创建新动画,点选一个时间点将canvase group中的Alpha设置为0或1;
27. 给按钮加点击动画:将Button组件中的transition选项调成Animation,然后设置四个按钮状态的动画
28. 使用协程:StartCoroutine(method());
IEnumeratormethod(){ yield return WaitForSeconds()} 协程和线程跳转有点像,在wait阶段将程序控制权交出,执行外部代码,当wait阶段完成后拿回控制权继续执行本段后续代码
29.canvas中UI的自适应:把锚点拖到对应的四个蓝色实心点上。更改canvas scaler属性为如图:
30. 场景自适应问题:改变相机视口。
实际视口 =初始视口 *初始高宽比 /实际高宽比
31.实现场景的淡入淡出效果:
首先创建一个canvas,在其下创建一个image并自定义它的颜色。
然后写一个脚本贴在canvas上。
脚本中需要拿到image,并且声明一个AnimationCurve.在Start中使用协程调用淡入、淡出函数。
31. 再update()中调用有协程的函数注意点“:
因为是每帧调用的所以要设置一个bool判断条件再调用有协程的函数,并且随后置反,再协程中再置回。
32. 实现血条:添加Slider,将canvas的坐标改为世界坐标,Slider中的子类物体只留下Fill和background,并将Fill置为background子类,将Fill的Stretch改为随父类大小:Alt + 右下角最后一个。通过修改COLOR设置前置,后置背景的颜色。
33.单机游戏储存内容小,所以可以使用assess数据库。Access是一种只适合数据量少的应用的桌面数据库,处理少量和单机访问的数据库时效率会很高。
34. 使用DontDestoryOnLoad()时,要确保依附对象为单例模式。避免重复生成对象。最直观的反例就是场景切换后背景音乐重叠