区块链技术博客
www.b2bchain.cn

82.GUIManager 屏幕适配支持求职学习资料

D0b2wT.gif

本文介绍了82.GUIManager 屏幕适配支持求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

在上一篇,我们完成了 GUIManager 的两个功能,并且对其进行了一些完善。

我们在这篇文章中完成屏幕适配的支持。

屏幕适配中,最关键的脚本是 Canvas Scaler,一般情况下它是挂在 Canvas GameObject 上,如下图所示:
82.GUIManager 屏幕适配支持

006tNc79gy1fzgezmkexcj30bz0a3q42.jpg

其中的 UI Scale Mode 则是最重要的 API。
82.GUIManager 屏幕适配支持

006tNc79gy1fzgezpg9arj30aj02nmxu.jpg

笔者的所有项目,是选择的是第二种,这里也推荐大家使用这种。因为这种更容易对多个分辨率进行适配。我们的分辨率会根据屏幕的尺寸进行一些缩放。这部分的知识点呢算是项目开发的知识点,具体细节,大家请自行搜索,可以搜索 UGUI 屏幕设配。

选择第二种之后,组件的内容会有所改变,如下图所示。
82.GUIManager 屏幕适配支持

006tNc79gy1fzgezrqv81j30b2047weu.jpg

这里比较关键点的是 Reference Resolution 和 Match ,笔者的项目一般是操作这两个 API 就可以满足所有的项目了。我们把 UIRoot 的 prefab,设置成如上图所示的状态。

对应的代码如下:

public static void SetResolution(float width,float height,float matchWidthOrHeight) {     var canvasScaler = UIRoot.GetComponent<CanvasScaler>();     canvasScaler.referenceResolution = new Vector2(width, height);     canvasScaler.matchWidthOrHeight = matchWidthOrHeight; }

有了这个方法,我们就可以直接通过代码对适配策略进行设置了。为什么要用代码呢? 是因为,我们的 UIRoot 是一个 prefab,而它目前是属于框架的部分,框架部分的内容,当然是要通用的,如果 UIRoot 的分辨率设置成了一个特定的分辨率,那么它就不是通用的。所以作为 GUIManager 的作者,我们要考虑到这一点。

到此呢,我们的 GUIManager 应该有的功能就全部完成了。也就是说我们的第十二个示例就算完成了。

全部代码如下:
Assets/QFramework/Framework/Manager/GUIManager.cs
“`cs
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

namespace QFramework
{
public enum UILayer
{
Bg,
Common,
Top
}

public class GUIManager : MonoBehaviour {      private static GameObject mPrivateUIRoot;      public static GameObject UIRoot     {         get         {             if (mPrivateUIRoot == null)             {                 var uirootPrefab = Resources.Load<GameObject>("UIRoot");                 mPrivateUIRoot = GameObject.Instantiate(uirootPrefab);                 mPrivateUIRoot.name = "UIRoot";             }              return mPrivateUIRoot;         }     }       public static void SetResolution(float width,float height,float matchWidthOrHeight)     {         var canvasScaler = UIRoot.GetComponent<CanvasScaler>();         canvasScaler.referenceResolution = new Vector2(width, height);         canvasScaler.matchWidthOrHeight = matchWidthOrHeight;     }      private static Dictionary<string, GameObject> mPanelsDict = new Dictionary<string, GameObject>();      public static void UnLoadPanel(string panelName)     {         if (mPanelsDict.ContainsKey(panelName))         {             Destroy(mPanelsDict[panelName]);         }     }      public static GameObject LoadPanel(string panelName, UILayer layer)

在上一篇,我们完成了 GUIManager 的两个功能,并且对其进行了一些完善。

我们在这篇文章中完成屏幕适配的支持。

屏幕适配中,最关键的脚本是 Canvas Scaler,一般情况下它是挂在 Canvas GameObject 上,如下图所示:
82.GUIManager 屏幕适配支持

006tNc79gy1fzgezmkexcj30bz0a3q42.jpg

其中的 UI Scale Mode 则是最重要的 API。
82.GUIManager 屏幕适配支持

006tNc79gy1fzgezpg9arj30aj02nmxu.jpg

笔者的所有项目,是选择的是第二种,这里也推荐大家使用这种。因为这种更容易对多个分辨率进行适配。我们的分辨率会根据屏幕的尺寸进行一些缩放。这部分的知识点呢算是项目开发的知识点,具体细节,大家请自行搜索,可以搜索 UGUI 屏幕设配。

选择第二种之后,组件的内容会有所改变,如下图所示。
82.GUIManager 屏幕适配支持

006tNc79gy1fzgezrqv81j30b2047weu.jpg

这里比较关键点的是 Reference Resolution 和 Match ,笔者的项目一般是操作这两个 API 就可以满足所有的项目了。我们把 UIRoot 的 prefab,设置成如上图所示的状态。

对应的代码如下:

public static void SetResolution(float width,float height,float matchWidthOrHeight) {     var canvasScaler = UIRoot.GetComponent<CanvasScaler>();     canvasScaler.referenceResolution = new Vector2(width, height);     canvasScaler.matchWidthOrHeight = matchWidthOrHeight; }

有了这个方法,我们就可以直接通过代码对适配策略进行设置了。为什么要用代码呢? 是因为,我们的 UIRoot 是一个 prefab,而它目前是属于框架的部分,框架部分的内容,当然是要通用的,如果 UIRoot 的分辨率设置成了一个特定的分辨率,那么它就不是通用的。所以作为 GUIManager 的作者,我们要考虑到这一点。

到此呢,我们的 GUIManager 应该有的功能就全部完成了。也就是说我们的第十二个示例就算完成了。

全部代码如下:
Assets/QFramework/Framework/Manager/GUIManager.cs
“`cs
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

namespace QFramework
{
public enum UILayer
{
Bg,
Common,
Top
}

public class GUIManager : MonoBehaviour {      private static GameObject mPrivateUIRoot;      public static GameObject UIRoot     {         get         {             if (mPrivateUIRoot == null)             {                 var uirootPrefab = Resources.Load<GameObject>("UIRoot");                 mPrivateUIRoot = GameObject.Instantiate(uirootPrefab);                 mPrivateUIRoot.name = "UIRoot";             }              return mPrivateUIRoot;         }     }       public static void SetResolution(float width,float height,float matchWidthOrHeight)     {         var canvasScaler = UIRoot.GetComponent<CanvasScaler>();         canvasScaler.referenceResolution = new Vector2(width, height);         canvasScaler.matchWidthOrHeight = matchWidthOrHeight;     }      private static Dictionary<string, GameObject> mPanelsDict = new Dictionary<string, GameObject>();      public static void UnLoadPanel(string panelName)     {         if (mPanelsDict.ContainsKey(panelName))         {             Destroy(mPanelsDict[panelName]);         }     }      public static GameObject LoadPanel(string panelName, UILayer layer)

在上一篇,我们完成了 GUIManager 的两个功能,并且对其进行了一些完善。

我们在这篇文章中完成屏幕适配的支持。

屏幕适配中,最关键的脚本是 Canvas Scaler,一般情况下它是挂在 Canvas GameObject 上,如下图所示:
82.GUIManager 屏幕适配支持

006tNc79gy1fzgezmkexcj30bz0a3q42.jpg

其中的 UI Scale Mode 则是最重要的 API。
82.GUIManager 屏幕适配支持

006tNc79gy1fzgezpg9arj30aj02nmxu.jpg

笔者的所有项目,是选择的是第二种,这里也推荐大家使用这种。因为这种更容易对多个分辨率进行适配。我们的分辨率会根据屏幕的尺寸进行一些缩放。这部分的知识点呢算是项目开发的知识点,具体细节,大家请自行搜索,可以搜索 UGUI 屏幕设配。

选择第二种之后,组件的内容会有所改变,如下图所示。
82.GUIManager 屏幕适配支持

006tNc79gy1fzgezrqv81j30b2047weu.jpg

这里比较关键点的是 Reference Resolution 和 Match ,笔者的项目一般是操作这两个 API 就可以满足所有的项目了。我们把 UIRoot 的 prefab,设置成如上图所示的状态。

对应的代码如下:

public static void SetResolution(float width,float height,float matchWidthOrHeight) {     var canvasScaler = UIRoot.GetComponent<CanvasScaler>();     canvasScaler.referenceResolution = new Vector2(width, height);     canvasScaler.matchWidthOrHeight = matchWidthOrHeight; }

有了这个方法,我们就可以直接通过代码对适配策略进行设置了。为什么要用代码呢? 是因为,我们的 UIRoot 是一个 prefab,而它目前是属于框架的部分,框架部分的内容,当然是要通用的,如果 UIRoot 的分辨率设置成了一个特定的分辨率,那么它就不是通用的。所以作为 GUIManager 的作者,我们要考虑到这一点。

到此呢,我们的 GUIManager 应该有的功能就全部完成了。也就是说我们的第十二个示例就算完成了。

全部代码如下:
Assets/QFramework/Framework/Manager/GUIManager.cs
“`cs
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

namespace QFramework
{
public enum UILayer
{
Bg,
Common,
Top
}

public class GUIManager : MonoBehaviour {      private static GameObject mPrivateUIRoot;      public static GameObject UIRoot     {         get         {             if (mPrivateUIRoot == null)             {                 var uirootPrefab = Resources.Load<GameObject>("UIRoot");                 mPrivateUIRoot = GameObject.Instantiate(uirootPrefab);                 mPrivateUIRoot.name = "UIRoot";             }              return mPrivateUIRoot;         }     }       public static void SetResolution(float width,float height,float matchWidthOrHeight)     {         var canvasScaler = UIRoot.GetComponent<CanvasScaler>();         canvasScaler.referenceResolution = new Vector2(width, height);         canvasScaler.matchWidthOrHeight = matchWidthOrHeight;     }      private static Dictionary<string, GameObject> mPanelsDict = new Dictionary<string, GameObject>();      public static void UnLoadPanel(string panelName)     {         if (mPanelsDict.ContainsKey(panelName))         {             Destroy(mPanelsDict[panelName]);         }     }      public static GameObject LoadPanel(string panelName, UILayer layer)

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 82.GUIManager 屏幕适配支持求职学习资料
分享到: 更多 (0)
D0b2wT.gif

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们