unity3d 适配 3d需要多分辨率适配吗

【图片】[ugui]屏幕适配的一个傻瓜式解决办法。。【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:77,153贴子:
[ugui]屏幕适配的一个傻瓜式解决办法。。收藏
前段时间在学习ugui,然而感觉里面内置的一些适配方法很是鸡肋(也有可能是我技艺不精不知道正确的方法)。。图片变形什么的是常有的事儿,所以就自己写了几个脚本,弄了个傻瓜式解决方法和各位分享下~先发几张图展示下效果:可以看到不管在多么极端的分辨率下这些控件基本都能正常显示。。下面放方法:先下载我打包好的这个资源包地址:然后直接导入,导入之后,把prefab文件夹里的GUI_Canvas拖入,再加入一个Eventsystem然后基本就算是架构好了,是不是很简单。。然后现在你把他的子物体GUIroot作为屏幕就行了现在往里面加入一个图片,拖入GUI_Canvas的子物体GUIroot下(必须作为GUIroot的子物体)然后往图片身上拖入脚本GUI_self_adaption.cs下面的两个参数要看你实际情况勾选,普通的按钮之类的只勾选其中一个,当你的游戏是横屏的时候勾选y,竖屏时勾选x,同时勾选的时候程序会将其作为背景图片处理然后现在加个背景图片,同样是先导入一张图(依旧是作为GUIroot的子物体)然后将其居中(很重要。。不然会偏)最后拖入GUI_self_adaption.cs,同时勾选x和y运行下,就能看到结果了可以看到背景图片被等比例拉伸到了整个屏幕,图片也被等比例拉伸了以适配分辨率你也可以无限嵌套子物体,只要给每个object都加上GUI_self_adaption.cs就行了,比如像这样gameobject里包含四个矩形,只要给gameobject和它包含的矩形都加上那个脚本,就能整体适配了,在极限的分辨率下效果如下可以看到那四个矩形相对位置和大小都没有受到屏幕拉伸的影响,因为他们都是以他们的父对象gameobject为参照的。不过有一个问题,那个脚本不能拖放在text上,原因未知,不过也有解决办法的,在包里我放了一个自适应的textbox作为参考。感觉这应该是最简单的自适应方法了。。。最后再把流程总结下:1下载资源包:2导入,把里面的GUI_Canvas拖入,再同时加个Eventsystem3把GUIroot范围作为屏幕范围,在其中加入各种子对象,为每个对象加入GUI_self_adaption.cs,按情况勾选x和y4完成就是辣么简单哈哈50几行的一个小玩意儿,不过感觉还挺好用的哈哈~各位可以试试~
江苏盘锦天燃气模温机,一台省得让你怀疑人生的燃气锅炉
楼主求连接,打不开啊
你还是没有把UGUI的布局方法吃透,你上面提到的效果都能实现。要想图片不变形,增加一个Aspect Ratio Fitter就可以了
求链接的请看6楼,有更好的解决方法
不要重复造轮子
人生苦短啊
图片适配屏幕大小?有个东西叫锚点
登录百度帐号推荐应用扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
关注:1255
当前位置: &
查看: 3196|回复: 7
Unity3D NGUI自适应屏幕分辨率
本帖为抢楼帖,欢迎抢楼!&
89851/10000排名<font color="#FF昨日变化主题帖子积分
常驻蛮牛, 积分 9851, 距离下一级还需 149 积分
常驻蛮牛, 积分 9851, 距离下一级还需 149 积分
蛮牛币187249
在线时间432 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
  1.UIRoot:根据高度自适应屏幕分辨率。
  NGUI根目录的UIRoot组件自带了根据高度自适应分辨率的功能。
  Scaling Style属性可选择三种不同的缩放策略。
  PixelPerfect 完美像素:直接显示设定好的像素。当屏幕高度低于minimum Height时按比例缩小,当屏幕高度大于maximum Height时按比例扩大。
  FixedSize 按比例缩放:在设定好的基础上,直接按比例缩放。
  FixedSizeOnMobiles 合体版,和ios为FixedSize方式,其它按照PixelPerfect方式。
  // FixedSize时:填理想分辨率的高度
  // FixedSizeofWidth时:填理想分辨率的宽度
  Manual Height:先按照理想分辨率做。当Game视图(打包后的屏幕分辨率)不是这个理想分辨率的时候就会进行比例缩放。
  Minimum Height:Game视图低于这个数值开始按比例缩放。
  Maximum Height:Game视图高于这个数值开始按比例缩放。
  这三种缩放方式全部都是按照高度计算缩放比例,完全忽略宽度。
  在制作时UI比例按照最长的16:9(红色)来做,另外3:2(绿色)为内容区域。红色两边的位置在不同比例的手机上会有不同程度的别切割的情况,所以不要把游戏内容放在这一区域。
13718.jpeg (11.5 KB, 下载次数: 3)
15:03 上传
  2.UIRoot:根据宽度自适应屏幕分辨率。
  UIRoot已经实现了根据高度自适应的功能,但是我现的需求是要根据宽度来自适应,屏幕高度高于UI高度则留空白。
  1.首先给UIRoot增加一种状态
[AppleScript] 纯文本查看 复制代码
  public enum Scaling
  PixelPerfect,
  FixedSize,
  FixedSizeOnMobiles,
  /// &summary&
  /// 根据宽度适配
  /// &/summary&
  FixedSizeofWidth,
  2.实现还是需要FixedSize的算法,所以需要修改两个判断语句
  修改1:
[AppleScript] 纯文本查看 复制代码  public float GetPixelSizeAdjustment (int height)
  height = Mathf.Max(2, height);
  //修改1
  if (scalingStyle == Scaling.FixedSize || scalingStyle == Scaling.FixedSizeofWidth)
  return (float)manualHeight /
  #if UNITY_IPHONE || UNITY_ANDROID
  if (scalingStyle == Scaling.FixedSizeOnMobiles)
  return (float)manualHeight /
  #endif
  if (height & minimumHeight) return (float)minimumHeight /
  if (height & maximumHeight) return (float)maximumHeight /
  return 1f;
  修改2:
  public int activeHeight
  int height = Mathf.Max(2, Screen.height);
  //修改2
  if (scalingStyle == Scaling.FixedSize || scalingStyle == Scaling.FixedSizeofWidth)
  return manualH
  #if UNITY_IPHONE || UNITY_ANDROID
  if (scalingStyle == Scaling.FixedSizeOnMobiles)
  return manualH
  #endif
  if (height & minimumHeight) return minimumH
  if (height & maximumHeight) return maximumH
  3.增加按宽度自适应算法
[AppleScript] 纯文本查看 复制代码  void Update ()
  #if UNITY_EDITOR
  if (!Application.isPlaying && gameObject.layer != 0)
  UnityEditor.EditorPrefs.SetInt(“NGUI Layer”, gameObject.layer);
  #endif
  if (mTrans != null)
  float calcActiveHeight = activeH
  if (calcActiveHeight & 0f )
  float size = 2f / calcActiveH
  //看这里,看这里,看这里
  if (scalingStyle == Scaling.FixedSizeofWidth)
  float radio = (float)Screen.width / Screen.
  size = size *
  Vector3 ls = mTrans.localS
  if (!(Mathf.Abs(ls.x - size) &= float.Epsilon) ||
  !(Mathf.Abs(ls.y - size) &= float.Epsilon) ||
  !(Mathf.Abs(ls.z - size) &= float.Epsilon))
  mTrans.localScale = new Vector3(size, size, size);
  3.UIStretch:根据宽度自适应屏幕分辨率。(NGUI3.0.7版本后不再支持)
  这个是早期NGUI实现自适应分别率的一种方法,新版本中加入UIRoot自适应的方法后,这个脚本就不在被官方推荐使用了。
  这个脚本自带的Style除了按高度自适应的功能之外,按宽度自适应是要拉伸图像的,并不能满足我们的要求。
  最符合我们的要求的就是BasedOnHeight,那我们就按照这个功能修改一个BasedOnWidth出来,之前的博客中写过这个功能,现在这篇文章直接替换了之前的,所以我还是贴出修改的内容吧。
  首先在Style枚举中增加一个BasedOnWidth,类型
[AppleScript] 纯文本查看 复制代码  public enum Style
  Horizontal,
  Vertical,
  BasedOnHeight,
  BasedOnWidth,
  FillKeepingRatio,
  FitInternalKeepingRatio
  Update方法中增加一个if分支。
  if (style == Style.BasedOnHeight)
  localScale.x = relativeSize.x * rectH
  localScale.y = relativeSize.y * rectH
  }else if (style == Style.BasedOnWidth)
  localScale.x = relativeSize.x * rectW
  localScale.y = relativeSize.y * rectW
  else if (style == Style.FillKeepingRatio)
  {……}
  这个脚本是通过拉伸scale实现,所以这个脚本要放在你需要拉伸的UI上(如果你只需要一个背景图片自适应屏幕分辨率,那就把这个脚本添加到这个背景图片中,如果要一个panel内所有元素都自适应,那就放在这个panel上。如果想让所有的UI全部自适应分辨率,那就放在NGUI的cameta上。)
  ui Camera属性需要选择渲染当前UI的摄像机。
  使用步骤:
  1.把Game视图设定一个最理想的宽度(以后按照这个比例缩放。)。
  2.按需求选择一个放置UIStretch的物体,然后添加这个组件。并将ui cameta赋值。
  3.将ui cameta的Size修改为当前屏幕的宽度。(这个物体的Scale的X、Y已经被UIStrech设置为屏幕宽度,此值不能被修改。)
  4.这个时候改变窗口宽度,只有该物体Scale 的X、Y已被自动修改,UI视图已自动适应~!
当前分辨率;unity3d屏幕适配;unity3d自适应分辨率;unity3d分辨率;unity3d中分辨率;unity3d 5.0 屏幕适配
本帖被以下淘专辑推荐:
& |主题: 29, 订阅: 3
每日推荐:
我是一朵内心长满小碎花的女汉子!
61239/1500排名<font color="#FF昨日变化主题帖子积分
蛮牛粉丝, 积分 1239, 距离下一级还需 261 积分
蛮牛粉丝, 积分 1239, 距离下一级还需 261 积分
蛮牛币1175
在线时间391 小时
第二种方法好像不行?
每日推荐:
260/150排名<font color="#FF昨日变化28主题帖子积分
初来乍到, 积分 60, 距离下一级还需 90 积分
初来乍到, 积分 60, 距离下一级还需 90 积分
在线时间6 小时
谢谢分享啊& && && && && && && && && && && && && && && && && &&&
每日推荐:
61119/1500排名<font color="#FF昨日变化5主题帖子积分
蛮牛粉丝, 积分 1119, 距离下一级还需 381 积分
蛮牛粉丝, 积分 1119, 距离下一级还需 381 积分
蛮牛币1017
在线时间303 小时
这个可以说是&&不是自适应,很垃圾的做法,根本不是理想中的自适应,这样的做法只是按比例去推算出来的,如果碰见没有的尺寸的手机,这样的自适应完全报废了。这是本人最不采取的做法,而且此等做法母体缩小或者放大,子物体不会跟着放大缩小,反而会出现不等比例的放大缩小。
每日推荐:
4478/500排名<font color="#FF昨日变化2主题帖子积分
四处流浪, 积分 478, 距离下一级还需 22 积分
四处流浪, 积分 478, 距离下一级还需 22 积分
在线时间112 小时
谢谢了++++++++++++++++++++++++++++++++++++++
每日推荐:
256/150排名<font color="#FF昨日变化21主题帖子积分
初来乍到, 积分 56, 距离下一级还需 94 积分
初来乍到, 积分 56, 距离下一级还需 94 积分
在线时间23 小时
不是很理想的做法阿,手机解像尺寸百百种
每日推荐:
4354/500排名<font color="#FF昨日变化4主题帖子积分
四处流浪, 积分 354, 距离下一级还需 146 积分
四处流浪, 积分 354, 距离下一级还需 146 积分
在线时间59 小时
直接在控制面板上有一个scalewithscreen的属性不就可以了么。
每日推荐:
61295/1500排名<font color="#FF昨日变化1主题帖子积分
蛮牛粉丝, 积分 1295, 距离下一级还需 205 积分
蛮牛粉丝, 积分 1295, 距离下一级还需 205 积分
蛮牛币1193
在线时间420 小时
这个一定要收藏,我好像明白了些什么。。
[]: 墨客er 乐于助人,奖励 1
每日推荐:
社区QQ达人
使用QQ帐号登录论坛的用户
游戏蛮牛QQ群会员
加入游戏蛮牛官方QQ群
在“新人报到 ”版块发过自己的照片
经过游戏蛮牛认证的蛮牛小翻译鏌ョ湅: 6071|鍥炲?: 12
璇濊?unity鏄?湡鐨勪笉鏀?寔Retina鍚

我要回帖

更多关于 unity3d需要什么语言 的文章

 

随机推荐