UGUI中所有元素都点击不到,重启unity3d 四元素第一次运行可以用,停止后再次运行就不好

使用UGUI无法在oculus中显示【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:74,857贴子:
使用UGUI无法在oculus中显示收藏
虽然我现在已经解决了这个问题,但是毕竟煞费周折。为了方便其他的有兴趣进行VR项目开发的朋友,现在送上此贴。
达内unity3d培训全程&实战教学&,unity3d金牌讲师授课.免费unity3d课程试听中!到达内unity3d学院学习unity3d,只需4个月速成unity3d游戏工程师.
我在开发这次VR项目的过程中,遇到了很多麻烦,一开始oculus总是不会显示unity的项目,查阅了很多资料也没什么解决办法。后来决心重新来过,把unity4.6换成了5.2的版本。同时也找了新的相应的SDK。终于在新的unity5.2的项目里可以使用oculus观看了。
好吧,上面有点多余了,现在讲正事。把UGUI中的canvas的render mode 设置成screen space-camera。可以看到检视面板下有一个render camera的选项,我们需要建一个专门的UICamera来让这个camera显示UGUI。这个UICamera的属性需要设置为Clear Flags:Don’t Clear。CullingMask:UI。这样设置过后,UGUI就可以在运行时显示了。
这种设置方式是参照此文的设置。
如果uicamera选择don't clear没有效果的话,试一试把这个选项改成depth only,这样ugui就会显示了。
登录百度帐号推荐应用1858人阅读
Unity3D开发(60)
1、通过RectTransform中的Anchors和Pivot来进行控件和窗体的布局适配
Anchors控制当前Panel相对于父窗体的布局位置,可以设置为居中或者左上角,当父窗体拉伸的时候当前Panel可以自动布局到正确位置。同时这里可以设置拉伸,比如主界面一般是全屏拉伸的,这种情况可以在这里处理。
Pivot是当前控件坐标系的锚点位置,通过代码调整坐标位置的时候需要注意这个的设置。
2、通过CanvasScaler的设置来进行多分辨率适配
UiScaleMode一般选择Scale With Screen Size,并设置好设计分辨率。其他两个选项都是固定像素大小。
Screen Match Mode中一般选择Expand,它可以保证ui中的所有元素都在屏幕内部。 相对比的一个选项是Shrink,它可以保证不留空白边。&
3、多分辨率的思路是Scaler中选择Expand保证所有ui元素在屏幕内部。少部分界面,如主界面、战斗界面等根据需要设置Anchors中的全屏拉伸。注意,这里的拉伸的含义仅仅是设置Panel的宽、高,并不影响子控件的缩放,但是会影响其布局。
4、注意,如果是Prefab加载ui的时候,设置父节点使用transform.SetParent(root, false) 这个函数调用,而不要直接设置parent属性,否则会存在RectTransform大小或坐标错误的问题。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1043256次
积分:12582
积分:12582
排名:第1097名
原创:196篇
转载:72篇
评论:510条
(1)(1)(5)(1)(2)(1)(2)(3)(2)(1)(1)(2)(4)(2)(2)(1)(9)(2)(3)(7)(8)(6)(10)(5)(8)(3)(7)(5)(3)(2)(1)(3)(7)(3)(7)(10)(1)(1)(11)(26)(25)(14)(2)(2)(1)(10)(4)(1)(1)(1)(2)(1)(11)(3)(2)(1)(2)(3)(2)(2)(1)【图文】Unity3d5的UGUI简单介绍_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Unity3d5的UGUI简单介绍
&&ppt简单介绍了Unity3d软件自带的UGUI的一些组件
大小:1.70MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢2148人阅读
Editor私人定制(152)
孙广东 转载请注明出处:我们 游戏完全使用UGUI来工作,所以游戏中的很多元素都是UGUI的 Game Canvas画布设置为;World Space , 主要也是为了以后一下牛叉的效果还有一个UI Canvas画布设置为;Screen Space - Overlay 就是这些元素会在最前方,在屏幕上的。还有一组是:Spines Layer, 主要是放着spine制作的角色2种解决方案:第一种是 为角色创建子对象了类型是Canvas画布,Unity的官方事例是这么做的,可以自己去看看。这样在Hierarchy上是有上下级的层级关系的。这种的话,Canvas的类型最简单是设置为:Screen Space - Overlay第二种呢,其实也很简单,就是我得到角色的位置position, 然后转换为屏幕坐标系,然后在转换为UGUI所在画布和相机的坐标系即可,得到了这个就赋值给UI即可了。但是这样在Hierarchy上是没有上下级的层级关系的。一个属于Game Canvas画布,一个在Spines Layer中,但是角色会有UI的引用。
Vector3 first = ExploreBattleManager.Instance.MainCamera.GetComponent&Camera&().WorldToScreenPoint(transform.position); //把角色在主摄像机的世界坐标转化为屏幕坐标[注:first的结果的z值是原来世界坐标的z]
first = new Vector3(first.x, first.y, 100); // 设置这个z的意思是想让角色的位置映射到UICamera的多远距离的平面上。 这里我们希望映射到Game Canvas画布相对于相机的距离,怎么看?如果是Screen Space - Camera的话就是如下图的Plane Distance值了。
如果是World Space :值就是两个z值的差了:
skillList.transform.position = ExploreBattleManager.Instance.UICamera.GetComponent&Camera&().ScreenToWorldPoint(first);&&&&&&&&&&&&&&3、还有就是 如果 UI Canvas 设置为 Screen Space - ovelad , 那就简单了,就是转换为屏幕坐标系啊。&&&&&&&&&&& Vector3 first =&&&&&&&&&&&&&&& CameraManager.Instance.mainCamera.GetComponent&Camera&().WorldToScreenPoint(character.transform.position);&&&&&&&&&&& skillList.transform.position =
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:954158次
积分:12661
积分:12661
排名:第1084名
原创:268篇
转载:15篇
译文:18篇
评论:216条
阅读:14125
文章:13篇
阅读:91143
阅读:50203
文章:25篇
阅读:129017
爱科技、爱游戏、有梦想、一起!
(3)(1)(3)(3)(2)(4)(3)(2)(4)(5)(6)(2)(10)(7)(5)(5)(3)(7)(2)(5)(3)(4)(7)(16)(26)(12)(10)(22)(28)(4)(9)(2)(6)(10)(16)(13)(2)(8)(3)(2)(5)(2)(9)64079人阅读
游戏开发及技术(65)
最近开始研究unity,准备将之前自己业余时间做的一款游戏(金庸群侠传X)发行移动端版本(我不是游戏公司从业人员,业余时间自己做着玩,大神轻喷)。由于之前使用silverlight(C#)做的,所以移植unity有天然的语言优势。
看了一下unity的更新公告,4.6出的UGUI我比较喜欢,因为之前也用过NGUI,总感觉不是很顺畅。那么,即使有坑,我们也来趟趟吧。
到现在陆陆续续大概已经趟了一个月的坑了,总的感觉是,对于unity还是比较满意的:非常简单容易上手,功能还算齐全——现在DEMO版本已经能够在android、ios上较好的运行。上两张截图吧
现在总结一下我在开发中碰到的几个“坑”——当然,话说在前头,因为我也是刚开始学习unity,目前我自己认为的坑也可能是我自己的理解不够,如果大家有更好的解决方法,欢迎指正!楼主写这篇博客的时候是日,使用的是当前最新的unity 4.6f1版本。
1、scroll rect的各种问题
(日:这个是我自己搞错了,unity有提供方法,只是我之前用错了,请移步,这一条下面写的大家就当看个笑话吧 :D)
很多界面需要用到滚屏,unity提供scroll rect控件。具体的组织方式为:
每个ScrollRect对应一个scrollcontent,ScrollContent定义内容的排版组织方式,如Grid Layout Group或者Vertical Layout Group。(这里比较像silverlight中的StackPanel和GridPanel)
我使用以后发现一个最大的问题是,scroll content无法根据其包含的内容自动伸缩。也就是说,scroll content的宽和高需要手动指定,如果其中内容超出了它的范围,那么超出的内容将无法滚屏过去。
这一点实在是把我恶心到爆了,于是出现了诸如以下的代码
if (Mode == SelectMenuMode.Vertical)
selectContent.GetComponent&VerticalLayoutGroup&().enabled =
selectContent.GetComponent&GridLayoutGroup&().enabled =
float spacing = selectContent.GetComponent&VerticalLayoutGroup&().
//unity每次需要手动设置scroll content的大小
float height =
foreach (Transform s in selectContent)
height += s.GetComponent&RectTransform&().rect.height -
float width = selectContent.GetComponent&RectTransform&().rect.
selectContent.GetComponent&RectTransform&().sizeDelta = new Vector2(width, height);
else if (Mode == SelectMenuMode.Grid)
selectContent.GetComponent&VerticalLayoutGroup&().enabled =
selectContent.GetComponent&GridLayoutGroup&().enabled =
float cellX = selectContent.GetComponent&GridLayoutGroup&().cellSize.x;
float cellY = selectContent.GetComponent&GridLayoutGroup&().cellSize.y;
float spacingX = selectContent.GetComponent&GridLayoutGroup&().spacing.x;
float spacingY = selectContent.GetComponent&GridLayoutGroup&().spacing.y;
float width = selectContent.GetComponent&RectTransform&().rect.
float height = Mathf.CeilToInt(selectContent.childCount / (width / (cellX + spacingX))) * (cellY + spacingY);
selectContent.GetComponent&RectTransform&().sizeDelta = new Vector2(width, height);
每次需要手动去设置scroll Content的RectTranform的sizeDelta属性。这样代码很丑陋且极其不灵活。如果对于内容的宽高和排列可以预期,那还好。假如内容是一个文本,那岂不是还要算字体所占宽高、行间距等等……&
其次的一个问题是:scroll content的position设置貌似是有BUG。
为了实现大地图滑动滚屏的效果,我将大地图放到一个scroll content中,然后可以由玩家手指滑动来进行拖拽,这个unity实现都没有问题。问题是,我需要由代码实现“滚屏”到某个点,则问题来了——
我手动在unity editor的运行时态设置的scoll content的x,y都是OK的,放到代码里去设置transform.localPosition,就完全错位了。
最后经过反复尝试,代码写成了这样……
&span style=&white-space:pre&& &/span&//大地图卷屏
if(location.name.Equals(RuntimeData.Instance.GetLocation(RuntimeData.Instance.CurrentBigMap)))
float x = -location.X + 640; //减去半个屏幕宽度,居中
float y = -location.Y - 320; //减去半个屏幕高度,居中
if (x & -1140) x = -1140; //边界限制
if (y & 640) y = 640;
if (x & 0) x = 0;
if (y & 0) y = 0;
//by cg: 这里对齐的逻辑有点奇怪,应该是unity的BUG,没处理好对齐锚点。先手动修正。
BigMap.transform.localPosition = new Vector3(-570f + x, 320f + y, 0);
原因应该是我将scroll content的Anchor Pivot设置成了(0,1),但unity设置localPosition却没有写参考这个锚点的逻辑,需要手动修正。
还有比较大的一个问题,ScrollRect所在的GameObject的Image组件,alpha设置有个BUG
按道理来说,这个Image只是scrollRect的一个背景,不影响其内容。但在把alpha设置到特别小的时候,不管是在editor上还是在运行环境中,scroll content都将显示不出来。我试了大概是设到4-8以下就会完蛋。。所以我们需要获得一个背景透明的scroll content,还不能把背景设置得太过于透明了……
2、LINQ不能在IOS上使用
在PC、EDITOR、MAC、ANDROID都没有问题的代码,放到IOS真机(IPHONE、IPAD)上出问题。原因搜了一下大概意思应该是苹果不允许出现动态代码。
这个是unity一直的问题了,貌似有办法通过第三方的LINQ实现来保证。总之我是放弃使用LINQ了。
3、unity新版动画系统Mecanim使用中碰到的问题
我的游戏中人物分几种动画,如 站立、移动、攻击。我使用Mecanim的状态机来实现,动画之间使用SetTrigger来实现切换。
我发现一个动画在切换后如果没有播放完毕,再调用SetTrigger的话,有时就会出现动画状态错乱。我的状态机是这样的:
所以我代码里现在是每次需要等待一段时间后,再进行切换。。
4、sprite editor中的BUG
在sprite editor中通过鼠标调整锚点为custom,第一次保存(这时候unity已经自动将类型切换为custom了)会失败!需要保存两次——但是第二次必须又和第一次不是同一个锚点,否则保存按钮点不下去!
或者先手动将锚点类型改为custom,然后再保存才可以。
好了,吐槽了这么多问题,总之unity新版本我还是很支持的。毕竟原生态的GUI系统还是比NGUI等硬往上“套”的UI系统要好很多。对于unity3d使用C#编程语言也是更加好顶赞。我不是一个喜欢讨论哪个编程语言好的人,就我来说,我至少使用过10多种语言编写过代码,目前来说感觉比较酸爽的还是C#。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:791972次
积分:9607
积分:9607
排名:第1841名
原创:244篇
评论:367条
(1)(1)(1)(1)(3)(1)(2)(2)(2)(3)(2)(2)(3)(2)(1)(2)(2)(1)(2)(4)(5)(2)(1)(1)(1)(1)(3)(1)(1)(1)(1)(1)(3)(1)(1)(2)(2)(2)(3)(3)(3)(3)(4)(1)(8)(8)(5)(5)(9)(8)(5)(6)(5)(10)(7)(17)(25)(16)(11)(8)(2)(7)}

我要回帖

更多关于 unity3d 重启游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信