unity3d 对象显示文字_unity 3d对象触碰显示文字 - CSDN
  • 首先,在NGUI中,创建一个UIlabel或者sprite,然后在3D对象上面,需要显示文字的位置,创建一个空物体,获取该空物体的位置,将UI文字,显示在该位置 通过控制显示位置到相机的距离,对ui对象进行缩放,实现一种近...

    首先,在NGUI中,创建一个UIlabel或者sprite,然后在3D对象上面,需要显示文字的位置,创建一个空物体,获取该空物体的位置,将UI文字,显示在该位置
    通过控制显示位置到相机的距离,对ui对象进行缩放,实现一种近大远小的效果,具体实现代码如下:

    using UnityEngine;
    using System.Collections;
    //
    public class BuildHeadWord : MonoBehaviour {
    
        public GameObject Head;      //头顶的点
        public Transform UI;         //头顶的字,zD sprite
        private float baseFomat;     //默认字与摄像机的距离
        private float currentFomat;  //当前相机的距离
        private float Scale;
        void Start()
        {
            //计算以下默认的距离
            baseFomat = Vector3.Distance(Head.transform.position, Camera.main.transform.position);
            Scale = 1-UI.localScale.x;//默认缩放差值
            currentFomat = 0;
        }
    
        void Update()
        {
            if (baseFomat != currentFomat)
            {
                //保存当前相机到文字UI的距离
                 currentFomat = Vector3.Distance(Head.transform.position, Camera.main.transform.position);
                 float myscale = baseFomat / currentFomat - Scale;  //计算出缩放比例 
                UI.position = WorldToUI(Head.transform.position); //计算UI显示的位置
                UI.localScale = Vector3.one * myscale;           //缩放UI 
            }
        }
    
        /// <summary>
        /// 把3D点换算成NGUI屏幕上的2D点。
        /// </summary>
        public static Vector3 WorldToUI(Vector3 point)
        {
            Vector3 pt = Camera.main.WorldToScreenPoint(point);  //将世界坐标转换为视口坐标
            Vector3 ff = UICamera.currentCamera.ScreenToWorldPoint(pt);//将视口坐标转换为世界坐标
            ff.z = 0;
            return ff;
        }
    }
    

    效果图:
    这里写图片描述

    展开全文
  • 前言:之前有朋友发信来问如何在Neoaxis中显示中文,当时答应写篇教程放上来。后来忙于I'm Lulu King!的制作,就给搁下了。...Unity的中文显示机制和Neoaxis颇多类似,今天写这篇文章也算是向那位朋友

    前言:之前有朋友发信来问如何在Neoaxis中显示中文,当时答应写篇教程放上来。后来忙于I'm Lulu King!的制作,就给搁下了。等I'm Lulu King!提交后,却又累得连打开Neoaxis编辑器的劲都没有了。这一拖就拖到了现在。想来这位朋友应该早已解决Neoaxis的中文显示问题了吧,再写教程恐意义不大。Unity的中文显示机制和Neoaxis颇多类似,今天写这篇文章也算是向那位朋友聊表歉意了。 
    还要说明的是,笔者才刚开始学习Unity,讲解中有错误或不准确之处还望指正,在此先行谢过。 
    1)流程说明Unity的Asset自动导入机制使得在Unity中显示中文非常简单。你所要做的就是将中文字体放到Unity的Asset目录下,Unity会自动将字体中的所有文字转换成一张字体贴图,并生成一个Unity字体。之后你可以就通过GUI Skin\GUI Style引用这个字体来显示中文。 
    要在Neoaxis中显示中文的话,生成字体贴图(或称Bitmap Font)的过程不是自动的,你需要先用Bitmap font generator来生成字体贴图及字体定义,然后通过Neoaxis自带的字体转换工具将字体定义转换成Neoaxis的字体定义。对比这两个引擎的字体导入流程,不难发现两者的设计思路差异。Unity的方式简单高效但可控性差,Neoaxis的方式略显繁琐,但你可以精确控制每一个步骤。

    2)准备工作让我们先打开任意一个Unity项目,这里我们用的是Unity官方教程中的3D平台游戏项目。 
    Unity的GUI采用的是Immediate Mode GUI(IM GUI),对于更习惯Windows GUI编程的朋友来说如果第一次接触可能有点不习惯。简单说来在Unity中创建GUI不需要进行通常的Init(初始化)、CleanUp (清理)步骤,也不需要进行事件的发送、订阅、处理,相反你只需在每帧的更新周期里同时绘制GUI及处理相应事件就可以了。如果想更多了解IM GUI的话,不妨看看mollyrocket.com的这段视频。mollyrocket的论坛里也有不少IM GUI的相关讨论。

    在菜单中,选择 GameObject->Create Empty, 创建一个空的GameObject, 改个合适的名字,如"MyGUIObject"。MyGUIObject将充当GUI的容器,具体界面的创建及位置都将通过脚本来进行。所以我们可以不关心这个GameObject在场景中的位置。这时层级视图(Hierarchy)如下:

    3)创建 GUI Skin 或 GUI StyleUnity中的界面风格是通过GUI Style及GUI Skin来进行控制。GUI Skin由一组GUI Style组成。GUI Skin和GUI Style的关系类似于CSS中CSS文件和CSS Style之间的关系。本教程的重点不在于Unity GUI的讲解,相关概念大家可以多参看Unity Manual。 
    在项目视图(Project)中选择Create->GUI Skin创建一个GUI Skin,改名为"ChineseFontSkin"。这时项目视图如下:

    在属性视图(Inspector)中对ChineseFontSkin简单设置如下:

    这时我们还没有中文字体,字体一项就先用项目中带的Fluoride字体,然后将Button中Normal的Text Color改成黄色。Button是这个GUI Skin中关于按钮的默认Style。 

    然后,我们将Label中Normal的Text Color改成绿色。本教程只用到Button和Label。 
    4)通过脚本创建GUI在Unity中你可以通过GameObject菜单创建GUI Text和GUI Texture这两个基本的GUI对象。但大部分GUI都需要通过脚本创建。我们将用脚本创建一个Label和一个Button。 
    在项目视图(Project)中选择Scripts下的GUI目录,在本视图的菜单中旋转Create->C Sharp Script, 创建一个C Sharp脚本,改名为“MyGUI”。 
    双击MyGUI脚本可以在Unity自带的UniSciTE编辑器中打开脚本进行编辑。但由于UniSciTE无法正确显示中文字符,使用外部IDE来编辑带中文的脚本是个好主意。微软的Visual C# Express当然是免费编辑器中的首选, 但对于我们这个简单的脚本来说,Notepad就足够了。 
    在Unity项目视图中右键点击"MyGUI",在弹出菜单中选择“Show in Explorer”,可以看到我们的脚本文件。 

    用Notepad打开MyGUI.cs,输入以下脚本:

    这个脚本做的事很简单。先定义一个可设置的GUISkin对象mySkin。在OnGUI方法中将GUI的Skin设为mySkin, 然后创建一个Label和一个Button。Label中显示的中文拷贝自我们站点的About页(上面截图中文字未显示完整)。保存脚本,用默认的Ascii编码保存即可。 
    回到Unity,将MyGUI脚本拖放到MyGUIObject上。选择MyGUIObject,在Inspector中将My Skin 设为"ChineseFontSkin"。

    运行游戏,可以看到英文文字能显示,但中文都丢了。这是因为我们还没有导入中文字体的缘故。 

    5) 导入中文字体在Windows的Font目录下,选择你喜欢的中文字体(这里我们选择微软雅黑),拷贝至Unity项目下的Assets\GUI目录下。切换至Unity,发现Unity呈冻结状,此时Unity正在进行字体贴图及字体定义的自动生成工作。根据机器性能及字体大小,导入过程可能较长。(我的机器上需要10多分钟。) 
    等Unity完成工作后,可以看到Project视图下的GUI目录中多了个msyh的字体。(或其他你选择的字体的名称) 
    在Project视图中选择ChineseFontSkin,在Inspector视图中,将Font改为刚导入的字体msyh。再运行游戏。

    中文都可以显示了。你好,Unity! 
    6)Unity干了什么及没干什么?在Unity中显示中文是不是很简单呢? 
    再让我们看看Unity在背后干了些什么。在Project视图中选择msyh字体并展开,可以看到Unity为每个字体生成了一个字体贴图(font texture)及一个字体材质(font material)。选择font texutre, 在Inspector视图可以看到该贴图的预览:

    一张16M的4096x4096贴图! 
    Unity自动替你将微软雅黑中所有可用文字都导成了一张巨大的位图,而不管你是否真的需要这么多文字。好处在于,现在你可以在Unity里显示所有微软雅黑字体所支持的文字了。但是,为每个字体分配一张16M贴图的做法太过奢侈了,对配置较低的机器或是iPhone来说更是不可接受。可是在Unity真正支持TTF字体渲染之前,我们似乎也只好接受这种傻瓜式生成字体贴图的方式。 
    但我们对此真的无能为力了吗?当然不!既然我们无法控制Unity生成字体贴图的方式及过程(虽然通过Editor API的TrueTypeFontImporter类可以进行有限的控制),至少我们可以对字体本身做些改造,让它只包含我们所需要的文字。就我们这个简单的项目而言,我们希望看到的字体贴图更应该是下面这样的:


    64K vs 16M。除非你要开发RPG或是需要用户输入任意中文,改造字体的成效将非常可观的。 
    在下一篇教学中我们将介绍如何利用FontForge来完成中文字体的瘦身工作。 

    展开全文
  • 就比如可以在鼠标移动到UI上面的时候显示文字。 那么如何在UGUI上,鼠标移动上去显示文字说明呢。 大家都知道,当鼠标移动到button按钮上面的时候会出现变化,主要是button这个组件在控制 既然可以控制颜色,就一定...

    一、前言

    有时候图标不能很好的说明这个功能的解释,就需要一些说明性文字显示。就比如可以在鼠标移动到UI上面的时候显示文字。
    那么如何在UGUI上,鼠标移动上去显示文字说明呢。
    大家都知道,当鼠标移动到button按钮上面的时候会出现变化,主要是button这个组件在控制
    在这里插入图片描述
    既然可以控制颜色,就一定有状态捕捉的枚举
    然后就找到了这个
    在这里插入图片描述
    接下来就是重写Button类了

    二、实现效果

    在这里插入图片描述

    三、实现步骤

    1.新建一个button,然后remove掉原来的button组件
    在这里插入图片描述
    2.新建TestButton.cs脚本,编写脚本

    using UnityEngine;
    using UnityEngine.UI;
    
    public class TestButton : Button
    {
        enum Selection
        {
            Normal,
            Highlighted,
            Pressed,
            Disabled
        }
        Selection selection;
    
        protected override void DoStateTransition(SelectionState state, bool instant)
        {
            base.DoStateTransition(state, instant);
            switch (state)
            {
            	//四种状态
                case SelectionState.Normal:
                    selection = Selection.Normal;
                    break;
                case SelectionState.Highlighted:
                    selection = Selection.Highlighted;
                    break;
                case SelectionState.Pressed:
                    selection = Selection.Pressed;
                    break;
                case SelectionState.Disabled:
                    selection = Selection.Disabled;
                    break;
                default:
                    break;
            }
        }
    
        private void OnGUI()
        {
            GUI.skin.box.fontSize = 10;
            switch (selection)
            {
                case Selection.Highlighted:
                    GUI.Box(new Rect(Input.mousePosition.x, Screen.height - Input.mousePosition.y, 100, 25), "Highlighted");
                    break;
                case Selection.Pressed:
                    GUI.Box(new Rect(Input.mousePosition.x, Screen.height - Input.mousePosition.y, 100, 25), "Pressed");
                    break;
                default:
                    break;
            }
        }
    }
    

    3.挂载到button按钮上
    在这里插入图片描述

    OK了 。

    四、使用EventTriggerListener组件

    可以直接使用EventTriggerListener 组件 不过会覆盖其它事件
    也可以单独使用接口,不会对其它事件造成影响
    IPointerEnterHandler 当鼠标进入对象时
    IPointerExitHandler 当鼠标退出对象时
    IPointerDownHandler 当鼠标点下对象时
    IPointerUpHandler 当鼠标抬起时
    IPointerClickHandler 当鼠标点击时
    IBeginDragHandler 鼠标开始拖动时
    IDragHandler 鼠标拖动时
    IEndDragHandler 拖动结束时
    IScrollHandler 鼠标滚轮时

    这些等以后再详细介绍

    展开全文
  • 在一个不规则的模型上贴上文字。 我是用Render Texture。 过程复杂了些,但可以用。 http://docs.unity3d.com/Manual/class-RenderTexture.html

    在一个不规则的模型上贴上文字。
    我是用Render Texture。
    过程复杂了些,但可以用。
    http://docs.unity3d.com/Manual/class-RenderTexture.html
    如果文字显得模糊,可以把字体调大,再缩小。

    展开全文
  • 最近在学习
  • 角色撞击物体弹出提示框效果如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表...在Start()函数中设置对象的Set...
  • Unity3D中绘制一个平面图形可不容易,可别惯性思维觉得,嗯,这引擎3D的事情都能解决了,2D的不叫事情。其实除去布置UI,在Unity3D中绘制一个2D平面图形是很蛋疼的一件事情。不然的话,也不会有大量的平面图形绘制...
  • unity3d中创建一个3d text文字对象模型,但是发现默认情况下显示文字很模糊,这种情况我们可以通过放大字体尺寸的方式解决这个问题,然后通过缩放的方式改变其大小。 1、打开unity3d场景创建一个“3d text”...
  • Unity3D常见面试题

    2017-08-11 20:20:00
    Unity3D常见面试题
  • Unity3D中构建3D模拟

    2020-06-16 02:53:16
    第一部分介绍了如何设置Unity3D ,第二部分介绍了如何 使用C#控制Unity3D 。 在本系列的最后一篇文章中,我们将深入研究如何使用Unity3D将代码实际制作成一个简单的游戏。 让我们开始吧 让我们建立一些关卡,...
  • 在使用unity3d的ugui中,我们可能遇到这种情况,ui中添加了字text,但是在放大字过程中或者添加更多字的过程中,字显示不完全甚至突然消失了。 比如像下面这样,在text中输入更多字,发现显示不出来了。 没有...
  • Unity3D入门之JavaScript

    2013-10-18 14:57:54
    刚刚接触Unity3D游戏引擎,这里做点学习笔记。下面是我建立的简单场景,左侧的Hierarchy(层次)视图里显示了场景中所有游戏对象,这些基本对象可以从Create下拉菜单里创建。当你点击某个对象,比如立方体Cube时,在...
  • 在屏幕上写字很简单,但是
  • unity3d 各大插件评测

    2018-01-30 15:00:43
    原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 引言:想用Unity3D制作优秀的游戏,插件是必不可少的。工欲善其事必先利其器。本文主旨是告诉使用Unity3D引擎的同学们如何根据需求选择适当的工具...
  • Unity3d实现画笔

    2017-12-11 17:33:25
    本文介绍如何在unity3d中实现画笔的功能 首先画笔需要一个材质 Material,之前在网上找了很多画笔,但是都没说材质怎么生成,导致画不出线来。 创建材质: Material rectMat = new Material("Shader \...
  • 大家晚上好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/...所以,今天的博客的主题就是《Unity3D游戏开发之跑酷游戏项目讲解》。从博主自身来考虑这件事情,当你选择做自己热爱的事情的时
  •  Scene【场景面板】:该面板为Unity3D的编辑面板;你可以将你所有的模型、灯光、以及其他材质对象拖放到该场景中。构建游戏中所能呈现景象。  Game【游戏面板】:与场景面板不同,该面板是用来渲染场景面板中...
  • Unity3d网络总结(一) NetWork组件使用 学习Unity3d的过程中,经常上网查阅各位大牛的博客,受益匪浅,从今天开始写自己在学习过程中遇到的问题,总结归纳下来,方便日后复习 这两天在学习Unity的网络模块,今天先总结...
  • tempQie2.transform.SetParent(GameObject.Find("Canvas").transform); Text text = tempQie2.GetComponent(); text.text = contentStr; text.fontSize = fontSize;
  • 最近在研究怎么在Android 项目中添加Unity3D建模,研究了半天终于弄会了。在这里写个博客,算是总结一下。 首先在unity中把需要的模型建好,然后在unity 的 【File】 中选择【Build Setting】如图所示: 点开后会...
1 2 3 4 5 ... 20
收藏数 2,044
精华内容 817
关键字:

unity3d 对象显示文字