unity脚本实用技巧

1.       如何在game模式下放大缩小视图:控制camerasize

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.     unity中保存数据的几种方法: 1)PlayerPrefs 2)ScriptableObjects  3)DataBases 4)custom data file

10.  Unity中所有的UI都要放在Canvas中,不然没法渲染

11.  Ui中的Grid Layout Group组件(网格布局组):可以把UI当成组在一起操作。

属性:1.padding(垫充),影响ui组在网格中的的初始位置

          2.Cell Size(单个大小)

      3.Spacecell间隔)

      4.cell组开始布局的角

      5.Start Axis(布局横纵向)

      6.Child Alignment (网格中的布局位置)

12.  CanvasCanvas Scaler组件中的 UI ScaleModeUI储尺寸模式):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加一个CanvaseGroupanimator组件,在animation中创建新动画,点选一个时间点将canvase group中的Alpha设置为01

27.  给按钮加点击动画:将Button组件中的transition选项调成Animation,然后设置四个按钮状态的动画

28.  使用协程:StartCoroutine(method());

          IEnumeratormethod(){ yield return WaitForSeconds()}   协程和线程跳转有点像,在wait阶段将程序控制权交出,执行外部代码,当wait阶段完成后拿回控制权继续执行本段后续代码

29.canvasUI的自适应:把锚点拖到对应的四个蓝色实心点上。更改canvas scaler属性为如图:  其中Match为0时表示竖屏,1时表示横屏

 

30.  场景自适应问题:改变相机视口。

实际视口 =初始视口 *初始高宽比 /实际高宽比

31.实现场景的淡入淡出效果:

   首先创建一个canvas,在其下创建一个image并自定义它的颜色。

   然后写一个脚本贴在canvas上。

   脚本中需要拿到image,并且声明一个AnimationCurve.Start中使用协程调用淡入、淡出函数。

31.  update()中调用有协程的函数注意点“:

     因为是每帧调用的所以要设置一个bool判断条件再调用有协程的函数,并且随后置反,再协程中再置回。

32.  实现血条:添加Slider,将canvas的坐标改为世界坐标,Slider中的子类物体只留下Fillbackground,并将Fill置为background子类,将FillStretch改为随父类大小:Alt + 右下角最后一个。通过修改COLOR设置前置,后置背景的颜色。

33.单机游戏储存内容小,所以可以使用assess数据库。Access是一种只适合数据量少的应用的桌面数据库,处理少量和单机访问的数据库时效率会很高。

34.  使用DontDestoryOnLoad()时,要确保依附对象为单例模式。避免重复生成对象。最直观的反例就是场景切换后背景音乐重叠

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值