[UGUI]图文混排(三):资源管理

1.图文混排中的资源,主要是图片。

2.所谓的资源管理,可以分为资源对象池和资源加载这两部分。这里是为图文混排单独做一套资源管理,当然也可以改为调用项目中的资源管理。

RichTextResourceManager.cs

 1 using UnityEngine;
 2 using System.Collections.Generic;
 3 using UnityEngine.UI;
 4 using System;
 5 #if UNITY_EDITOR
 6 using UnityEditor;
 7 #endif
 8
 9 public enum RichTextResourceType
10 {
11     Image,
12 }
13
14 public class RichTextResourceManager : CSharpSingletion<RichTextResourceManager> {
15
16     private Dictionary<RichTextResourceType, List<GameObject>> typeGoDic = new Dictionary<RichTextResourceType, List<GameObject>>();
17     private DefaultControls.Resources resources = new DefaultControls.Resources();
18
19     public void SetPoolObject(RichTextResourceType type, GameObject go)
20     {
21         if (!typeGoDic.ContainsKey(type))
22         {
23             List<GameObject> goList = new List<GameObject>();
24             goList.Add(go);
25             typeGoDic.Add(type, goList);
26         }
27         else
28         {
29             typeGoDic[type].Add(go);
30         }
31         go.SetActive(false);
32     }
33
34     public GameObject GetPoolObject(RichTextResourceType type)
35     {
36         GameObject go = null;
37         if (typeGoDic.ContainsKey(type))
38         {
39             if (typeGoDic[type].Count > 0)
40             {
41                 go = typeGoDic[type][0];
42                 if (go)
43                 {
44                     go.SetActive(true);
45                     typeGoDic[type].Remove(go);
46                     return go;
47                 }
48             }
49         }
50         go = CreatePoolObject(type);
51         return go;
52     }
53
54     private GameObject CreatePoolObject(RichTextResourceType type)
55     {
56         GameObject go = null;
57         if (type == RichTextResourceType.Image)
58         {
59             go = CreateImage();
60         }
61         return go;
62     }
63
64     public void LoadSprite(string path, Action<Sprite> callback)
65     {
66 #if UNITY_EDITOR
67         Sprite sprite = AssetDatabase.LoadAssetAtPath<Sprite>("Assets/" + path + ".png");
68         if ((sprite != null) && (callback != null))
69         {
70             callback(sprite);
71         }
72 #endif
73     }
74
75     public void LoadSprite(string path, Action<Sprite[]> callback)
76     {
77 #if UNITY_EDITOR
78         Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath("Assets/" + path + ".png") as Sprite[];
79         if ((sprites != null) && (callback != null))
80         {
81             callback(sprites);
82         }
83 #endif
84     }
85
86     public void SetSprite(string path, Image image)
87     {
88         LoadSprite(path, (Sprite sprite) => { image.sprite = sprite; });
89     }
90
91     private GameObject CreateImage()
92     {
93         GameObject go = DefaultControls.CreateImage(resources);
94         go.layer = LayerMask.NameToLayer("UI");
95         Image image = go.GetComponent<Image>();
96         image.raycastTarget = false;
97         return go;
98     }
99 }

原文地址:https://www.cnblogs.com/lyh916/p/9281816.html

时间: 2024-10-08 13:27:10

[UGUI]图文混排(三):资源管理的相关文章

Office操作:图文混排三步曲

我们在编辑Word文档的时候,图片和文字的混排编辑可能是我们遇到的最为主要的情况,恰到好处的图文混排不仅可以起到美化文档的效果,对于阅读者阅读并理解文档内容也是大有裨益.因此,熟练掌握Word的图文混排是我们制作比如海报.杂志.刊物.贺卡等这类非纯文本文档的第一步,今天,我在这给大家介绍图文混排的基本知识及技巧,先给大家展示一个效果图. Office操作:图文混排三步曲效果展示准备工作:1.准备好文字材料:2.准备好图片素材:3.构思好排版效果. 图文混排第一步:在文档中插入图片.方法:通过[插

[UGUI]图文混排(二):下划线

UGUI源码: https://bitbucket.org/Unity-Technologies/ui/downloads/?tab=tags 首先下载一份UGUI源码,这里我下载的版本是5.3.2f1.然后找到Text.cs,里面有方法OnPopulateMesh,这个方法会修改文字的顶点.而图文混排,涉及到顶点数据的修改.因此,我们的重点就是对这个方法进行修改,这里给出一个最简单的重写版本,它和普通的text是一样的. 1 using System.Collections.Generic;

[UGUI]图文混排(一):标签制定和解析

参考链接: https://github.com/SylarLi/RichText/tree/master/Assets/Scripts 正则表达式: https://blog.csdn.net/lyh916/article/details/49201195 图文混排主要用于聊天,其实就是传输某种格式的字符串,然后解析这个字符串,生成表情文字等.图文混排的第一步,就是确定好格式,这里使用html的标签格式,对于代码中出现的start和end字段可以先忽略.标签格式如下: <material=un

[UGUI]图文混排(五):添加下划线

0.下划线标签 标签格式:<material=underline c=#ffffff h=1 n=*** p=***>blablabla...</material> material标签会在最后的渲染过程中被自动去除. 1. 经过CalculateLayoutWithImage这个方法后,可以得到一个去掉了图片标签的字符串,以及对应的顶点列表. 原文地址:https://www.cnblogs.com/lyh916/p/9307984.html

iOS阅读器实践系列(三)图文混排

本篇介绍coretext中的图文混排,这里暂用静态的内容,即在文本中某一固定位置插入图片,而不是插入位置是根据文本内容动态插入的(要实现这一效果需要写一个文本解析器,将原信息内容解析为某些特定格式的结构来标示出特定的类型(比如文字.图片.链接等),然后按照其结构中的属性配置,生成属性字符串,之后渲染到视图中). 这部分的思路参考唐巧大神的blog. 在第一篇介绍过coretext是离屏渲染的,即在将内容渲染到屏幕上之前,coretext已完成排版工作.coretext排版的第一步是组织数据,即由

CoreText实现图文混排之点击事件-b

CoreText实现图文混排之点击事件 主要思路 我们知道,CoreText是基于UIView去绘制的,那么既然有UIView,就有 -(void)touchesBegan:(NSSet<UITouch *> )touches withEvent:(UIEvent )event方法,我们呢,就是基于这个方法去做点击事件的. 通过touchBegan方法拿到当前点击到的点,然后通过坐标判断这个点是否在某段文字上,如果在则触发对应事件. 上面呢就是主要思路.接下来呢,我们来详细讲解一下.还是老规矩

关于仿网易新闻中详细页图文混排功能的实现

最近在了解关于新闻内容的图文混排的效果,网上有人开源一个仿网易新闻的代码,本文就是简单记录学习其详细页面显示的效果实现: 下载地址:https://github.com/dsxNiubility/SXNews 效果图: 其原理:通过网络请求获得相关的信息,再通过手机端进行拼HTML,然后在WebView进行展示,此处还对文章中的图片增加点击效果,可以保存到相册中:文章的样式已经存在项目中,直接去调用: 1:首先了解两个相关的实体对象,一个是新闻的主体内容,另外一个就是图片的相关信息实体: 1:主

Android图文混排(一)-实现EditText图文混合插入上传

前段时间做了一个Android会议管理系统,项目需求涉及到EditText的图文混排,如图: 在上图的"会议详情"中,需要支持文本和图片的混合插入,下图演示输入的示例: 当会议创建完成以后,保存数据到服务器,然后查看刚刚创建好的会议,如图: 一.明确需求 首先,点击"会议详情"文本框中,正常输入文本,然后点击左下角的图片图标,进入系统的相册用来选择一张图片并插入到文本框中,你还可以将光标停留在任意的文字中间,完成图片的插入,回退建即可以逐个删除文字,也可以删除图片.

Android 自绘TextView解决提前换行问题,支持图文混排

先看下效果图: 上面是MTextView,下面是默认的TextView. 一.原因 用最简单的全英文句子为例,如果有一个很长的单词,这一行剩余的空间显示不下了,那么规则就是不打断单词,而是把整个单词丢到下一行开始显示.这样本来没有错.一是咱们中国人都是方块字,怎么都放得下,不存在英文的这个问题.所以不习惯那个排版.二是如果TextView里面有图片,如图,不知道判断单词的代码是怎么弄得,总之它觉得最后一个啦字和后面的一串表情应该是一个整体,不能分开,就一起丢到第二行了,也就造成了这种难看的排版.