本文目录一览:
- 1、怎样在unity3d中加入一段文字,并控制它的隐藏!
- 2、Unity UGUI系列九 Text TextMeshPro
- 3、如何编写Unity原生插件
- 4、Unity3d文本域(textfield)的问题
- 5、Unity的代码编辑器怎么几行几行加斜杠
- 6、在unity引擎中什么文件夹是用来存放暂时不知道如何归类的资源文件
怎样在unity3d中加入一段文字,并控制它的隐藏!
比价傻瓜的方式可以在任何gameObject上加一个guiText,然后通过脚本设置gameObject.guiText.enabled或gameObject.active属性为true/false来控制显示。
如果熟悉编程,还可以通过纯脚本的方式来实时生成和控制文字显示:
GUILayout.Label("这段文字就显示在界面上了……");
要更系统的控制界面可以自己写GUI构架,或者采用第三方的资源如NGUI之类的。菜鸟在线竭诚为您服务
Unity UGUI系列九 Text TextMeshPro
参考
[专栏精选]TextMeshPro插件
TextMeshPro使用说明
TextMeshPro中文字体生成和字体材质更换
新一代Unity 文本组件 Text Mesh Pro 系列教程
【Unity学习笔记】TextMeshPro文档(一)
【Unity学习笔记】TextMeshPro文档(二)
【Unity学习笔记】TextMeshPro文档(三)
【Unity学习笔记】TextMeshPro文档(四)
【Unity学习笔记】TextMeshPro组件官方文档翻译
首次添加会弹出导入必要资源面板,点击IMPORT后,项目Assets文件夹下会生成TextMesh Pro文件夹
UGUI的Text使用了一张字体贴图,Unity把所有需要显示的字符放到了一张图集中,字符的形状是通过像素定义的。当我们放大时,像素不够用就会出现文字变模糊的情况。
TextMesh Pro的Text使用了不同的技术来渲染文字,叫做 Signed Distance Field (后面简称SDF,对该技术感兴趣的同学可以自行搜索一下)。和UGUI类似,这个技术同样需要将字符放到一个图集中,但是不使用像素来代表字符的形状,而使用SDF技术来生成字符的形状。使用这种技术字符在渲染时不会因为缩放而造成字符模糊的情况,总是能够准确的渲染字符的边缘。-unity中编辑文本文件
TextMesh Pro无法像UGUI Text那样使用动态字体,因为TextMesh Pro需要对字体进行预处理来计算SDF,这部分计算非常耗时。这对于英文字体来说影响不大,一个字体文件或一张贴图包含的信息都很少,但是对于字符非常多的语言如中文就影响很大。 所以对于中文环境建议如下: -unity中编辑文本文件
推荐
这些都设置好之后,就可以点Generate Font Atlas按钮,然后保存成.asset文件,这就是Font Asset所需要的文件了。
如果生成的字体图集缺少部分字符,每当输入这些字符时,TextMesh Pro会使字符回退到默认字形,你可以在Edit Project Settings TextMesh Pro Settings修改该字形。-unity中编辑文本文件
你也可以设置一个或多个字体资源,当字符无法在主要图集中找到时,TextMesh Pro会将字符回退为这些资源中的字符。出于优化目的,可以使用高分辨率的主要字体图集,而所有回退图集则使用较低分辨率。
可以勾选Enable RTL Editor单选框转换为从右到左的文本排列方式(相当于把字符的显示顺序颠倒,abc显示为cba),文本在显示前会将字符顺序颠倒过来。勾选后,Inspector面板上会多出一个RTL Text Input输入框,可以直接编辑已经反顺序的文字。-unity中编辑文本文件
前俩选项是粗体和斜体,它们的外观依赖字体资产(Font Asset)。
接着那俩是underlie和strikethrough表示下划线和删除线,效果就是在字体下面或者中间加一条横线。
最后三是用来设置字母大小写的,功能分别是:小写,大写,和小写字母尺寸一样大的大写
前四个可以随意选择,最后三同一时刻只能选一个。
font size决定字符的大小,你可以使用固定大小,也可以使用自适应大小。
当auto size勾选时,可以指定字符的最小和最大值。Text Mesh Pro将会自动计算,找到最适合的大小,确定的大小会显示在Font Size输入框中。
WD%
WD%包含一个百分比值,表示控制最大的字符的宽度减少百分比。这会水平的挤压字符,使它们更高,通常只适用于数字。
你还可以通过修改Line来减少行高从而适应更大的字体大小。
当勾选了auto size,会花很多时间去计算字符合适的大小。所以只在必要的时候勾选它,并且要避免对频繁改变的动态文字使用此项。如果你的文本从不改变,你可以勾选此项,记住计算出的字体大小,然后取消勾选,并手动填入刚刚计算出的值。-unity中编辑文本文件
Vertex Color用于为文本着色。除了使用统一颜色外,你也可以勾选Color Gradien从而对文本使用颜色渐变。
通过Color Mode,我们可以切换渐变颜色的个数)Four Corners Gradient表示为每个字符的四个角各选择一个颜色,然后进行渐变。可以为每个TextMesh Pro物体单独手动设置,也可以通过指定gradient preset来快速设置。-unity中编辑文本文件
这里的渐变颜色会与前面的Vertex Color相乘,所以如果想看原始渐变,就让Vertex Color颜色为白色。
如果勾选了override tags,那么rich text的颜色会被忽视。
字符之间、单词之间、行之间、段落之间的间距都可以修改。段落由换行符确定。你可以为每个TextMesh Pro单独设置,而不用调整字体资产(Font Asset)。
这些设置也可以通过富文本(rich text)修改。
文本对齐方式,分成了水平和垂直两组。
当Wrapping设为Enabled,这可以确保文字不会显示到文本显示区域的外面(就是自动换行嘛)。对于单词也会正常换行,除非一个单词的就已经比一行的宽度要长。
overflow属性决定文本比显示区域长的情况。
可以使用支持其他纹理的着色器将图像映射到文本顶部。UV映射选项控制纹理在文本上拉伸的方式。每个维度(横、竖)可以使用不同的设置。
参考
Unity - TextMeshPro图文混排
TextMesh Pro 的图文混排功能:插入自定义表情图
这个有动态表情,也有静态表情
该方案的缺点:不能使用 Unicode 去赋值 Text中的图文混排。步骤如下:
调用指定图集中的图:
sprite=9 tint=1//使用文字的叠加颜色/透明度。文字叠加的颜色同样被应用到图片上。tint=0 不叠加 tint=1 叠加
sprite=9 color=#ffffff80//使用特定的颜色/透明度 ,不随文字变化
如何编写Unity原生插件
unity可以导入其它语言编写(和编译)的代码,称为原生插件(Native Plugins)。今天为大家分享如何创建Unity原生插件。
Unity中的托管和非托管插件
连接不同的代码并非Unity首创的。若你是Windows用户,可能听说过DLL,动态链接库的缩写。与单机应用类似,它们是编译过的软件。不同的是,它们不能直接执行,因为它们是被专门设计为供其它应用使用的。-unity中编辑文本文件
Unity支持两种插件:托管(Managed)和非托管(Unmanaged)的。前者是用C#编写并编译为通用中间语言(CIL)的字节码语言。托管插件与C#脚本一样强大,且带有编译过的源码。非托管(或原生)插件,是使用其它语言编写的软件,典型是C++。它们在功能上几乎没什么限制,而且因为都被编译为机器码所以通常比传统的脚本要快。-unity中编辑文本文件
第一步:新建C++项目
本例中,我用的是Visual Studio 2015;你可以选择任意IDE编译C++代码。首先创建一个非托管C++库也就是新建项目。打开Visual Studio,依次点击File | New Project ,选择Visual C++ | Win32 Console Application。-unity中编辑文本文件
在给项目命名后(本例中为TestDLL),确保将应用类型(Application type)设为DLL,附加选项(Additional options)下选择空项目(Empty project)。
至此,Visual C++解决方案已经准备好,我们可以开始编写代码了。
第二步:编写库
C++代码通常分为两个文件。函数定义(头文件)和函数实现(实现文件)。实现文件为.cpp文件,放在ResourceFiles目录下,头文件为同名.h放在HeaderFiles目录下。本例中我们创建一个头文件和一个实现文件;实现文件将包含所有要保存到DLL的功能。可以在相应的文件夹上单击右键新建文件,然后依次选择Add(添加)NewItem(新选项)。-unity中编辑文本文件
实现部分:TestDLLSort.cpp
开始编码,实现给数组排序。
[AppleScript] 纯文本查看 复制代码?
#include "TestDLLSort.h" #include extern "C" { void TestSort(int a[], int length) { std::sort(a, a+length); } }-unity中编辑文本文件
5~7行使用了algorithm 库里的数组排序函数std:sort。如果熟悉C++11就会知道。只增加了extern "C"块,必须用它将TestSort的引用导出到DLL。
头文件:TestDLLSort.h
实现文件中的定义必须与头文件保持完全一致。它必须包含TestSort原型也就是函数签名。
[AppleScript] 纯文本查看 复制代码?
123456 #define TESTDLLSORT_API __declspec(dllexport) extern "C" { TESTDLLSORT_API void TestSort(int a[], int length); }-unity中编辑文本文件
其余部分是创建DLL必须的代码。TESTDLLSORT_API可以是任意名字,用来标记所有的导出函数。在更复杂软件中,TESTDLLSORT_API应该根据需要绑定到 __declspec(dllimport) 上。但是在本例中,没有必要。-unity中编辑文本文件
第三步:编译
最后一步是在Visual Studio中编译我们的DLL。请确保发布平台设置正确(32位或64位)。然后依次选择BuildBuild Solution。
在屏幕下方的控制台上会看到输出日志如下:
[AppleScript] 纯文本查看 复制代码?
1------ Rebuild All started: Project: TestDLL, Configuration: Release x64 ------ 1 TestDLLSort.cpp 1 Creating library C:\Users\Alan Zucconi\Documents\Visual Studio 2015\Projects\TestDLL\x64\Release\TestDLL.lib and object C:\Users\Alan Zucconi\Documents\Visual Studio 2015\Projects\TestDLL\x64\Release\TestDLL.exp 1 Generating code 1 All 30 functions were compiled because no usable IPDB/IOBJ from previous compilation was found. 1 Finished generating code 1 TestDLL.vcxproj - C:\Users\Alan Zucconi\Documents\Visual Studio 2015\Projects\TestDLL\x64\Release\TestDLL.dll ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========-unity中编辑文本文件
若发现有警告如:warning C4273: inconsistent dlllinkage,这可能表示编译器不确定使用__declspec(dllimport) 还是 __declspec(dllexport)。若想为Unity创建原生插件,就使用后者。-unity中编辑文本文件
第四步:导入Unity
根据上面的编译日志,在工程文件中找到编译好的DLL。本例中,它在文件夹x64\Release中。我们只要这个文件。在Unity中使用它的第一步是把它拷贝到Plugins文件夹下。
原生插件通常与操作系统或平台相关。可以查看右侧的检视面板确保每个DLL被包含到正确的平台。
第五步:在Unity中使用
导入后,使用DLL就相对简单了。第一步是使用DLLImport定义入口(EntryPoint)。你需要指定DLL名和函数名。会提供别名让它可以像其它函数一样被调用。
[AppleScript] 纯文本查看 复制代码?
using UnityEngine; using System.Runtime.InteropServices; public class TestDLL : MonoBehaviour { // The imported function [DllImport("TestDLL", EntryPoint = "TestSort")] public static extern void TestSort(int [] a, int length); public int[] a; void Start() { TestSort(a, a.Length); } }-unity中编辑文本文件
入口的字符串必须与C++库中的名字一样。但你可以使用如下方法调用函数;以后C#就这样调用它。
你应该注意到Unity在编辑器中不能检测非托管DLL;必须运行游戏来检测是否成功连接。对于托管的DLL,则可以静态检测。
Unity3d文本域(textfield)的问题
转化类型 int.Parse(string)
place your script in Assets/Editor inside your project folder
在你的项目目录下创建文件夹 Editor,放入你用的gui插件
Unity的代码编辑器怎么几行几行加斜杠
Ctrl+[选中行左移TABshift+TAB也行Ctrl+]选中行右移TABCtrl+选中行全部加再用一次就消除VIM环境下才行。
1、该代码只适合为确定的文本添加下划线,如果在程序运行过程中,文本内容实时变动,此代码不适用。后续我会继续研究实现动态更新下划线的方法。
2、如果要为文本组件TextA添加下划线,切记,脚本TextUnderLine一定不要添加到TextA游戏物体上,因为这样会造成逻辑上的死循环,创建出无数个下划线子物体。
在unity引擎中什么文件夹是用来存放暂时不知道如何归类的资源文件
Resources:
需要动态加载的文件放入,打包时,在这个文件夹里的文件不管有没有被使用,都会被打包出来。
Plugins:
插件目录,该目录编译时会优先编译,以便项目中调用。
Editor:
该目录下的代码可调用Unity Editor 的API,存放扩展编辑器的代码。编译时不会被打包到游戏中。
Standard Assets
该文件夹下的文件会优先被编译,以便项目调用,它与Plugins一样,打包时会被编译到同一个.sln文件里。
SteamingsAssets
该目录下的文件会在打包时打包到项目中去,与Resources一样不管有没有用到的文件,在打包时都会被打包出来。
Resurces与SteamingsAssets的区别
Resurces下 文件在打时会进行压缩与加密,但是StremingsAssets下的文件是直接被打包出来。
Resurces中的材质球、预制体等资源,会在打包时自动寻找引用资源,打包到Resurce中。
1.隐藏文件夹
以 . 开头的文件夹会被Unity忽略.在这种文件夹中的资源是不会被导入的,且脚本不会被编译.也不会出现在Project视图中.这种文件夹我们可以在资源浏览器中找到这些文件.
2.Standard Assets
在这个文件夹中的脚本最先被编译.一般是放一些Unity内置的资源.在这个文件夹中的脚本会被导出到Assembly-CSharp-firstpass/Assembly-UnityScript-firstpass/Assembly-Boo-firstpass项目中.依语言而定.在这个文件夹中的脚本比其他脚本都要先编译.将脚本放在这个文件夹里就可以用C#脚本访问其他语言的脚本-unity中编辑文本文件
3.Pro Standard Assets
和StandardAssets相同,只不过里面的文件是给Pro版本的Unity使用的,当然他的功能更为丰富,例如一些高级内置的shader文件,只有在Pro版才能起作用.
4.Editor
以Editor命名的文件夹允许其中的脚本访问UnityEditor的API,如果脚本中使用了在UnityEditor命名空间中的类或方法,他必须被放在名为Editor的文件夹中,Editor文件夹的脚本不会再build时被包含.在项目中可以有多个Editor文件夹.需要注意的是如果在普通的文件夹下,Editor文件夹可以出于目录的任何层级.如果在特殊文件夹下,那Editor文件夹必须为特殊文件夹的直接子目录.-unity中编辑文本文件
5.Editor Default Resources
你可以把编辑器用到的一些资源放在这里,比如图片,文本文件等等.他和Editor文件夹一样都不会被打到最终发布报里,仅仅用于开发时使用.你可以直接通过EditorGUIUtility.Load去读取改文件夹下的资源,例如:-unity中编辑文本文件
TextAsset text = EditorGUIUtility.Load("Guide.txt") as TextAsset;
6.Plugins
Plugins文件夹用来放native插件.他们会被自动包含进build中去,注意这个文件夹只能是Assets文件夹的直接子目录.例如:
Windows: dll文件;
Mac OS X: bundle文件
Linux下: .so文件
和StandardAssets一样,这里的脚本会更早编译,并且允许他们呗之外的脚本访问.
(1).Plugins/x86||x86_64(一般PC平台)
如果为32bit或64bit平台创建游戏,那么这个文件下的nativeplugin文件会被自动的包含在游戏build中.如果这个文件夹不存在,则Unity会查找Plugins文件夹下的nativeplugins-unity中编辑文本文件
如果要创建universalbuild,建议你同时使用这两个文件夹.然后将32bit和64bit的nativeplugins放进相应的文件夹中
(2).Plugins/Android
在这个文件夹里放入Java.jar文件,用于Java语言的plugins.
.so文件也会被包含进来
官方文档:
(3).Plugins/iOS
在这个文件夹放入 .o、.m、.mm、.c、.cpp等文件,一般在IOS平台导出对应的文件
官方文档:
7.Resources
Resources文件夹允许你在脚本中通过文件路径和名称来访问资源.放在这一文件夹的资源永远被包含今build中,即便它没有被调用.因为Unity无法判断脚本中有没有访问了其中的资源.项目中可以有多个Resources文件夹,因此不建议在多个文件夹中放同名的资源,一旦build游戏,Resources文件夹中的所有资源都被打包进游戏存放资源的archive中.这样在游戏的build中就不存在Resources文件夹啦.即便脚本中仍然使用了资源在项目中的路径-unity中编辑文本文件
官方文档:
注意:当资源作为脚本变量被访问时,这些资源在脚本被实例化后就被加载进内存.如果资源太大,你可能不希望他被这样加载.那么你可以将这些大资源放进Resources文件夹中.通过Resources.Load来加载.当不再使用这些资源啦,可以通过Destroy物体,在调用Resources.UnloadUnusedAssets来释放内存.-unity中编辑文本文件
特点:
(1).文件夹内资源打包集成.asset文件里面.例如一些shader/material/prefab等资源文件;
(2).里面的资源只能是只读,不能动态修改,一般动态的更细的资源不存放在这个文件夹内;
(3).通过主线程加载;
(4).Resources.Load();加载资源
Resources.LoadAll();加载所有资源
Resources.LoadAsync();异步加载资源
8.Gizmos
Gizmos文件夹存放用Gizmos.DrawIcon方法使用的贴图、图标资源.放在Gizmos文件夹中的贴图资源可以直接通过使用名称使用,可以被Editor作为gizmo画在屏幕上.这里还是要说说OnDrawGizmos()方法.只要脚本继承了MonoBehaviour后,并且在编辑模式下就会每一帧都执行它,发布的游戏肯定就不会执行啦,他只能用于scene视图中绘制一些小物件.比如要做摄像机轨迹.那么肯定是要在Scene视图中做一个预览的线,那么用Gizmos.DrawLine和Gizmos.DrawFrustum就再好不过啦-unity中编辑文本文件
9.WebPlayerTemplates
用来替换webbuild的默认网页.这个文件夹中的脚本都不会被编译.这个文件夹必须作为Asstes文件夹的直接子目录
10.StreamingAssets
这里的文件会被拷贝到build文件中,不会修改(移动和网页版不同,他们会被嵌入到最终的build文件中).他们的路径会因平台而有差异,但都可以通过Application.streamingAssetPath来访问.-unity中编辑文本文件
例如:有些游戏为了让所有的资源全部使用AssetBundle,会把一下初始的assetbundle放在StreamingAssets目录下,StreamingAsset目录下的资源都是不压缩的,而且他比较大,会占空间-unity中编辑文本文件