Unity实现UI信息跟随场景移动缩放-海岛奇兵2
核心
本文主要说的是迷雾、海岛上的UI信息的实现
由于使用透视相机,ugui和ngui实现跟随场景缩放(视角变化)比较困难,场景和UI的层次关系也不好处理。
我的方案
1. 图片
图片使用有2种方案
- quad面片 mesh render,使用一个材质,动态设置不同的mainTexture。
下面是要注意的事项:- 材质material的使用
-
Unity3D中Material与ShareMaterial引用的区别
关键是Renderer.material:
Returns the first instantiated Material assigned to the renderer.也就是说我们每一次引用就会生成一个新的material到内存中。
但是在引用后并不会改变我们项目工程中材质球的原始属性设置。
-
- 设置material的mainTexture
注意点:图集,packing tag,散图打成图集后,load出来的Texture是大图的纹理,无法直接使用。
可行的解决方案 :
1. 不打图集,散图Load后直接使用,亲测可行
2. 使用图集之后,设置Mesh Shader UV,未尝试
- 材质material的使用
-- LUA
material.mainTexture = ResourceManager:LoadTexture(EXPLORE_AB_NAME,textureName)
-- C#
// 加载纹理
public Texture2D LoadTexture(string bundleName, string texName)
{
return AssetBundleMananger.Instance.Load<Texture2D>(bundleName, texName, false);
}
- sprite renderer (2D GameObject)
可以使用图集,直接load出sprite
quadIcon:GetComponent("SpriteRenderer").sprite = ResMgr:LoadSprite(textureName)ResMgr:LoadSprite如下:
AssetBundleMananger.Instance.Load<Sprite>(bundleName, spriteName, false);
我使用的是方案2,优点是
- 可以使用图集的性能提升+sprite renderer本身的对性能的优化
- 与UGUI使用图片方式完全一致,使用方便。
2. 文字
使用textMesh pro,这个插件在unity store免费下载。制作字体略有一点麻烦
Unity3D插件之TextMeshPro字体资源的制作
【Unity3d】Textmesh pro教程(一):介绍及制作Font Asset
3500个常用中文字符.txt 链接:http://pan.baidu.com/s/1o7WA5aM 密码:u8b8
TextMeshPro字体回调.png若把3500个常用中文字符和字母数字符号生成一个SDF字体文件,生成的文件是8.49M;
可以拆成两个字体文件常用字符.txt和次常用字符.txt,生成的SDF字体小一些。
再利用Textmesh pro的字体回调功能(当前字体文件中未查询到文字信息时会继续查询回调文件中的字体信息)添加回调字体文件
3. 其它
- 图片和文字都需要加上公告板组件billboard,设置旋转角度,面向相机
transform.rotation = Camera.main.transform.rotation * m_quaternion;
- 手势系统的实现: 使用easytouch插件,可以方便一些
遇到的问题:
-
SpriteRenderer 与 MeshRenderer的渲染排序层级解决方案
文字textMesh pro,是MeshRenderer,UI图片使用SpriteRenderer ,在3D场景中的层级显示;