谁能给个unity3d ngui插件做GUI背包的思路

【智商捉急】NGUI切换语言的做法哪个比较好?_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:18,989贴子:
【智商捉急】NGUI切换语言的做法哪个比较好?收藏
Localization那个切换语言的方法我觉得很生冷,需要在txt中编辑文档,还需要复制粘贴各个key。因此我打算弄两套Label,中文时显示一套,英文时显示另一套。不知这样做有没有什么性能消耗?而且这样做的弊端在哪?当前比较流行,比较通用的做法是哪个啊?
我们公司是两个xml语言表,每句话有一个key,读取时存在字典里
切换语言时只要刷新所有label就可以了
你在二楼里面说的"xml语言表"是什么啊?不是应该像图中这样使用txt语言表吗?xml语言表怎么弄呢?
就是一个语言配表啊每个ID对应一段话,游戏运行时读取配表信息到字典里
每种语言都配一个表,切换时只要刷新label显示对应字典里的内容,比如10001在配表里代表&我爱你&,英文配表里10001是i love you ,
登录百度帐号我的游戏推荐游戏
后查看最近玩过的游戏
为兴趣而生,贴吧更懂你。或Unity3D ARPG游戏开发《最初的幻想》之GUI背包系统实现 - 推酷
Unity3D ARPG游戏开发《最初的幻想》之GUI背包系统实现
。现在的话,终于该继续前天被残忍打断的物品栏之类的GUI界面了!
首先还是把“属性”、“物品”、“技能”、“系统设置”几个按钮放上去罢。
我是这样设计的:
美工方面确实不是俺的长处,资源也都是用的DaikonGUI自带的。
新建一个Panel,用于盛放这几个按钮,Anchor设置为Right和Bottom即可。
然后再将这个Panel命名为“MyBottomBar”,在这个Panel中新建四个按钮,放上相应的图标即可。如果为了好看点,还可以设置Havor状态的显示,我就设置了一下Havor状态的颜色。它们的Anchor都设置为Right和Verticle。
名字根据相应的作用,分别命名位为:Bag、AttibuteWindow、Skill和System。
在这里,还可以在相应的ToolTip中输入相应的提示语句:
然后吧,就先来做物品栏吧。
再屏幕中选择一个合适的空白处,点击新建一个Panel,背景设为Fantasy Atlas中最像窗口的图片,然后再在这个Panel中添加一个Drag Handle,在Drag Handle中新建一个Label,内容就是“物品”。
因为这是个窗口,所以也可以再为其添加一个Resize Handle,使其可以拖动改变大小。
然后再为其中间添加一个ScrollPanel,作为显示物品的主窗体,最下面添加一个Buttom,选择合适的图片,并写上“关闭”两个大字:
接下来,在中间的物品窗口右边,添加一个ScrollBar,Anchor为Left和Verticle即可。在这个ScrollBar之中,分别建立两个Sliced图片,并命名为Track和Thumb,最后将这两个图片拖到ScrollBar上,即可完成ScrollBar的建立。
最后再把这个ScrollBar拖给中间的ScrollPanel的Verticle滚动条,即可。其中我还设置了一些窗口的Layout:
窗口大体创建出来了,下一步,就是为打开和关闭这个窗口添加功能以及一些动画了。
动画事件之类的都是添加在主窗口之上。首先为其添加一个Tween中的Vector2,这个用于改变其大小,只需要在EndValue点击“Assign current value”即可。
然后是改变位置的动画。添加一个Tween中的Vector3,选择“RelativePosition”,先点击一下EndValue中的“Assign current value”,然后把窗口移动到右上角,再点击StartValue中的 “Assign …..”,这样就记录这个动画了。如图: 不错的游戏编程网
里面很多好的教程可以学习。
最后的话,因为包裹按钮只有一个,为了方便,在这里还可以添加一个“Tween Group”。为Group添加两个Item。将先前添加的两个Tween动画都拖进这个组,如图:
然后,就是包裹按钮方面的了。点击先前做好的包裹按钮,添加一个EventBinding(事件绑定),数据源为自身被点击,而目标事件就是先前的TweenGroup脚本中的Play:
这下子运行游戏的话,点击包裹图标,就会看见物品窗口从屏幕外飞进来。
然后是飞出的动画,这个弄一个位置变化的动画就行了吧。再次为主窗口添加一个Tween动画中的Vector3动画,命名为FlyOut,然后在StartValue记录屏幕中的当前位置,然后把窗口远远拖动到左边看不见的位置,记录EndValue。
然后为窗口中的关闭按钮添加一个EventBinding,事件为点击按钮,目标则是窗口播放TweenVector3中的FlyOut的动画。
运行游戏,点击包裹,窗口将会从右上方飞进来,点击关闭按钮,窗口则会从左边飞出去。这个窗口的界面因素就差不多了。
然后,下面就又到了脚本时间了!
包裹GUI终于把数据同步的问题解决了!不过现在不是一丁半点地晚了,具体情况还是明天记载罢。
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见2098人阅读
接下来我们讲解下UILabel,UILabel是用来显示文本的脚本,继承自UIWidget。我们创建一个label,属性如下图:
所有的label都需要Font才可正常工作。这个字体可以使Dynamic的(引用Unity
Font),也可以是Bitmap字体——嵌入到Atlas里面的字体。动态字体更稳固因为它不需要你预先创建符号,但是Bitmap字体可以和你atlas的其他东西渲染在同一个draw call上并且这些字体可以通过photoshop美化。
修改Pivot来改变label的对齐方式。Top-left、Left和Bottom-left是左对齐。Top、Center或者Bottom是中间对齐。Top-right、Right、Bottom-right是右对齐。
使用Dynamic字体的时候,你可以设置label的Font Size和style。你也可以设置一个material用来渲染。
接下来的大框——你可能猜到了——用来输入文本。默认是多行文本输入,除非通过下面的Max Lines属性限制。
Overflow操作让你决定lable的文本超过允许的空间之后的处理方法。
Shrink Content&内容自动缩放。与Keep Crisp设置一起来控制Dynamic字体,使字体的字号变小而不是简单的缩放。这样不管label是否被缩放都能保持清晰。
Clamp Content&剔除多余的文本。
Resize Freely&根据输入的文本内容自动调整dimension。不需要手动调整。
Resize Height&保持宽度不变,必要时增加高度。
Spacing属性控制字符间距。正负皆可。像素为单位。
前面提到的Max Lines用来控制最多要多少行。用0表示不限制。
关掉Encoding表示不需要颜色和表情标签。默认启用。
可以给label提供渐变通过Gradient的bottom和top颜色。如下图:
文本可以有shadow或者outlineEffect。shadow会使用两倍的geometry,outline会使用五倍——所以要小心这个属性。Distance参数控制shadow或者outline与原文本的距离,以像素为单位。
接下来我们讲解UISprite,UISprite是NGUI里面最实用的。使用atlas纹理的一部份用来绘制sprite,继承UIWidget的所有功能,属性如下图:
sprite首先需要一个Atlas。点击Atals按钮会列出当前项目中已有的atlas。创建新的atlas要通过Atlas Maker工具(NGUI -& Open -& Atlas Maker)。
你可以点击Sprite选择按钮旁边的Edit按钮来编辑选择的sprite。这里允许给sprite增加用来调整9-sliced的边界。
默认情况下,新加的sprite会是Simple类型。意味着他们和UITextures的显示效果差不多,除了他们是来自atlas。
Sprite Type为Filled,这样可以做一个类似冷却的进度条。
Sprite Type为Tiled,这样你的sprite会重复的填充一块区域。尽量不要用太小的sprite因为这样会创建很多的三角形。给你的sprite一个1像素的border也是个好主意,这一个像素会被排除掉(所有tiled的图的边缘看起来就衔接起来一样)。
Sprite Type为Sliced就可以创建一个9-slicing的sprite。只有指定了Border后它才会真正起作用。(点击上面提到的Edit按钮)。sliced sprite的一个应用就是做按钮的背景。
使用”Make Pixel-Perfect“选项(新版本是Snap)来让UISprite 使用它的原始尺寸。就是如果你的原始texture是300*200的像素,UISprite的dimensions对应的width和height就会调整到这个数值。
注意这个对Tiled和Sliced sprite没有效果——它们有自己的规则。
接下来我们了解下UIButton,Button是一个非常简单的组件,有以下功能:接收hover、pressed、click事件,修改指定的sprite颜色。Image
Button组件可以和Button同时加到一个game object上,Image Button用来切换sprite。 我们新建一个Button,它主要包含一个background的Sprite和一个label,如下图:
属性如下图:
我们在Background这个sprite中指定一个纹理图片,然后修改Widget中Color的颜色,然后修改Label的文字内容,颜色等,如下图:
我们来看看button的监听事件,第一种方法是:我们新建一个脚本,代码如下:
void OnClick()
Debug.Log(&------test&);
然后直接绑定到button上,当我们点击的时候,会打印出log的内容
第二种方法是使用SendMessage,选择按钮后,在Unity导航菜单栏中选择Component-&Interaction-&Button
Message 组件
Target:接收按钮消息的游戏对象
Function Name:接收按钮消息的方法,拥有这个方法的脚本必须绑定在上面Target对象身上
Trigger:触发的事件,OnClick显然是一次点击
Include Children :是否让该对象的所有子对象也发送这个点击事件
设置一个空对象,将所有的消息写在一个脚本中,赋值给空对象,给控件添加UIButton Message组件,将空对象拉入组件的Target,选择相应的Function Name(比如OnClick函数)即可。对于多个按钮来说,只需添加UIButton Message组件,选择相应的函数即可实现,如下图:
第三种方法是使用UIListener,这个也是推荐大家使用的一种方法,选择按钮后在Unity导航菜单栏中选择Component-&NGUI-&Internal -&Event Listener 。 挂在按钮上就可以,它没有任何参数,如下图:
我们修改Test脚本代码,如下:
void Awake ()
Debug.Log(&----111&);
//获取需要监听的按钮对象
GameObject button=GameObject.Find(&UI Root (2D)/Camera/Anchor/Panel/Button&);
//设置这个按钮的监听,指向本类的ButtonClick方法中
UIEventListener.Get(button).onClick=buttonC
// Use this for initialization
void Start ()
// Update is called once per frame
void Update () {
void buttonClick(GameObject button)
Debug.Log(&GameObject:&+button.name);
然后直接绑定到button上,当我们点击的时候,会打印出log的内容
接下来我们了解下UIInput,一个输入框,就像textfield一样,它的结构也像button一样,一个backgroud和一个label,如下图:
我们看下它的属性,如下图:
Label:文本显示在哪个UILabel里
Starting Value:输入框开始显示的字
Saved As:保存输入内容到prefabs中
Active TextColor:激活文本框后显示颜色
Inactive Color:默认状态颜色
Caret Color:插入字符状态颜色
Selection Color:选择状态中字符的颜色
Input Type:输入类型(standard)标准的,(AutoCorrect)自动修正,(Password)密码
Validation:输入类型限制
Character Limit:输入字符数限制
On Submit:输入完后进行事件分发
我们新建一个input,如下图:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:163878次
积分:2243
积分:2243
排名:第6547名
原创:59篇
评论:154条
(2)(3)(20)(4)(2)(7)(2)(6)(16)推荐这篇日记的豆列
······苹果的mac机上预览图片,有一个所谓的cover flow的效果,这里是2个相关的实现。...
很多时候,应用程序或者是游戏需要用上暂停功能,unity提供了不少便捷的方式,列在下面:
1、在editor中,按下pause按钮即可暂停
2、如果在代码中控制,可以通过设置Time.timeScale = 0来实现暂停。
3、如果你通过Time.timeScale = 0设置了暂停,但是你在某些地方还需要有动画之类的,那么可以在实现动画的地方用上Time.realtimeSince...
对于Coroutine,编译器需要产生一些代码,在每次的大循环中,Unity的Update()返回后,保证是yield后的代码被正确调用,这样就形成了我们看到的一个function能分段执行的机制。...
Unity提供了很方便的工具来保存mesh之类的,下面的代码挂在GameObject上后,按下F键能把mesh(该GameObject必须有mesh组件)保存到磁盘的Assets目录下。在磁盘上是.asset的文件,在project中看到的是一个mesh符号的文件。代码完全是示意作用,没有做严格测试。...
一个游戏,还有物理引擎、AI引擎等很重要的几个引擎。而所谓的引擎,很大的程度上,是一个”专注于某个功能的模块“。软件中有很多的模块,为什么只有渲染、物理等才被成为引擎,跟汽车的引擎一样,因为这个模块可能比较核心,在所有的组件中功能更有决定性,所以才被叫做引擎。有人可能会说,现在的游戏,决定性的是游戏的内容、逻辑,那为什么没有逻辑引擎这个说法。这个的关键之处在于,逻辑不能成为一个很通用的模块。所以,才没有逻辑引擎这个说法。...
两个相机,都用正交,第一个depth比第二个小,第一个负责非水印图的渲染,第二个负责渲染水印。两个相机都渲染到同一个RenderTarget上。这样渲染出来的RenderTarget就是带水印的图。...
项目中,因分工关系,美术的场景和程序的场景分开。美术的场景中主要负责整体的场景的布置,程序的场景注重交互、UI等。因为存在多个美术场景之间的跳转,而且在不同的美术场景里用了不同的天空盒,发现unity内部管理不是很清楚,所以采用了自己的方式。...
在unity3d中,splash screen的显示时间是由加载第一个场景(Build Setting中的0号)里面的资源的速度决定的,因此,如果要缩短splash screen的时间,我们能做的就是在0号场景中尽可能的少用资源。可以借鉴的方式如下
1、在0号场景中放置一个empty game object;
2、在该game object上挂一个脚本,这个脚本里有代码做 applicat...
因为webplayer的限制,在webplayer上运行unity程序的时候,截屏并不像本地运行程序那样。基本思路是:
1、通过相应的接口把屏幕像素读取到内存,并且encode成png格式;
2、通过wwwform类把png格式的流由服务器接收,并且存在服务器上,做成链接,然用户下载;
unity官方相关的代码例子:
// Grab a screen shot ...
今天一朋友用unity,有功能需要写ios插件,遇上了不少问题,记录于此,希望能帮到同样问题的人。
问题一:XCode编译出.a后,使用Unity编译出XCode工程,工程里没有.a文件
解决方案:Unity对.a的放置目录有限制,需要把.a放置在Plugins/ios目录下(该目录自己新建)
问题二:XCode模拟器出现EntryPointNotFoundException...
3D引擎内部为什么对资源使用共享指针的一个说明:资源是共享的,每个资源都有一个引用值,当有一个指针引用到它,这个指针就加一。反之,减去一。当引用值是0的时候,引擎就可以释放这个资源占用的内存。对于Unity来说,资源的引用值归0后,需要用Resources.UnloadUnusedAssets()来促使引擎释放所有引用值为0的资源。...
Unity 多个点光源时,前面的点光源失效...
好久没有用win7,因此原来的一台电脑上还是4.0的版本,今天升级到4.1.4f1,unity进入正常,但是monodevelop却打不开。在开启的时候,一个空白的mono窗口上叠加了两个空白的小窗口,其他一点提示都没有。想当然的认为是本机的.net framework有问题,重装后问题依旧。最后还是上官网查了一下,原来这个版本配置是有bug,更行一个文件就可以。
更新的文件链接:
最近为了让NGUI支持这个功能,对NGUI内部做了一番加强,在不改变其设计思路的情况下,利用其原有的基础,加入了超链接功能,涉及的改动地方较多,无法一一叙述。文后会放出下载地址,有改动的代码,需要的可以用到自己的项目中。
改动后的功能
1、支持自定义消息。这个信息会在用户点击超链接后通过消息发送出来,用于应用代码判断超链接的性质、功能等。
2、沿用Label本身的颜色代码,也...
NGUI中有代码UITooltip是用来做tooltip用的。这里不展示怎么样用这个东西,因为NGUI的Example中有例子,我们来看一下其中的原理,同时也说一下几个在使用中容易发生问题的地方。
内部原理:
1,UICamera的FixedUpdate()每帧运行的最后,会查看在当前鼠标下是否有带collider的控件,有的话就会给该控件发OnTooltip(...
Unity4.0开始支持hardware鼠标,只要在setting中配置一下相关选项就可以。同时,官方文档上也说明了,hardware鼠标跟software鼠标的某个差别在于,hardware每个不同的平台会用不同的格式,大小也是限死的。所以,software鼠标就还具备很大的价值。
1、在某个UIRoot(2D)的panel下面,利用NGUI的菜单创建出一个sprite,把...
出于各种原因,我们有可能会遇上需要卸载unity3d,重新安装一个不同版本的licence。这个时候,新unity3d会在重新安装后出现无法激活的现象。下面是相关的步骤,能解决这个问题:
1,卸载unity
2,删除这个文件夹
WinXP/Vista: C:/Documents and Settings/All Users/Application Data/Pace Anti...
Unity有个很好的功能,大致是很多专注于PC的engine没有提供的(因为没有必要),就是能加载主包外的资源,这个主包外的资源,unity把它叫做bundle。这个功能的提供,主要是在web上或者是ios、android等设备上,主包太大的话,会遇上下载主包时间太长,体验不佳;或者是有些市场直接就限制了主包的大小。
制作的bundle的方式,这里只讲bundle中连scene都带入的:...
Unity对烘焙是支持的,烘焙入口:
Windows | Lightmapping
在弹出的对话框中,可以选择需要烘焙的物体,以及设置各种可以配置的参数,用于烘焙的效果配置。
按Unity的官方文档解释,烘焙是基于Global Illumination,也就是全局光照的。...
在Android上发布应用需要签名,由于Android应用架在java之上,所以用java的一些列工具来签名
1、keytool
该工具用于根据你的输入信息来生成相应的keystore文件,用于后面的签名步骤。
$ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -...
访问:120302次
积分:2272
积分:2272
排名:第6442名
原创:97篇
评论:21条
(4)(7)(2)(1)(3)(2)(3)(3)(3)(1)(4)(5)(8)(10)(12)(1)(5)(6)(3)(5)(12)(10)

我要回帖

更多关于 unity3d 的文章

 

随机推荐