Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP)

news/2024/4/25 23:40:49/文章来源:https://blog.csdn.net/u014361280/article/details/130266669

Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP)

目录

Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP)

一、简单介绍

二、老版本 Unity Text 使用工具控件调整行间距

三、新版本 Unity Text(TMP)自带调整行间距

附录:

新版本 Unity Text(TMP) 中文字体支持(介绍生成中文字体资源的方法之一)


一、简单介绍

Unity 工具控件类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。

本节介绍,在原始的 Unity Text 中,只能调整文本的行间,字间距确实默认的值,要调整的自己额外的编写工具空间来调整;如果使用新版的 Unity Text(TMP)组件,里面就有现成的设置了,这里简单说明,如果你有更好的方法,欢迎留言交流。

(可能两种方法都存在使用局限性,可能根据需要使用)
 

二、老版本 Unity Text 使用工具控件调整行间距

1、正常的字间距效果

 

 2、可调整的字间距效果

 3、参考的代码 TextSpacing

using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
using System.Linq;[AddComponentMenu("UI/Effects/TextSpacing")]
public class TextSpacing : BaseMeshEffect
{[SerializeField]private float spacing_x;//[SerializeField]private float spacing_y=0;private const int VERTEXT_RANGE = 6;private List<UIVertex> mVertexList;public override void ModifyMesh(VertexHelper vh){if (spacing_x == 0 && spacing_y == 0) { return; }if (!IsActive()) { return; }int count = vh.currentVertCount;if (count == 0) { return; }if (mVertexList == null) { mVertexList = new List<UIVertex>(); }vh.GetUIVertexStream(mVertexList);int row = 1;int column = 2;List<UIVertex> sub_vertexs = mVertexList.GetRange(0, VERTEXT_RANGE);float min_row_left = sub_vertexs.Min(v => v.position.x);int vertex_count = mVertexList.Count;for (int i = VERTEXT_RANGE; i < vertex_count;){if (i % VERTEXT_RANGE == 0){sub_vertexs = mVertexList.GetRange(i, VERTEXT_RANGE);float tem_row_left = sub_vertexs.Min(v => v.position.x);if (min_row_left - tem_row_left >= -10){min_row_left = tem_row_left;++row;column = 1;//continue;}}for (int j = 0; j < VERTEXT_RANGE; j++){UIVertex vertex = mVertexList[i];vertex.position += Vector3.right * (column - 1) * spacing_x;vertex.position += Vector3.down * (row - 1) * spacing_y;mVertexList[i] = vertex;++i;}++column;}vh.Clear();vh.AddUIVertexTriangleStream(mVertexList);}
}

4、参考的代码 TextSpacing1


using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;[AddComponentMenu("UI/Effects/TextSpacing1")]
public class TextSpacing1 : BaseMeshEffect
{public float TextHorizontalSpacing = 1f;public override void ModifyMesh(VertexHelper vh){if (!IsActive() || vh.currentVertCount == 0){return;}Text text = GetComponent<Text>();if (text == null){Debug.LogError("Missing Text component");return;}List<UIVertex> vertexs = new List<UIVertex>();vh.GetUIVertexStream(vertexs);int indexCount = vh.currentIndexCount;string[] lineTexts = text.text.Split('\n');Line[] lines = new Line[lineTexts.Length];//根据lines数组中各个元素的长度计算每一行中第一个点的索引,每个字、字母、空母均占6个点for (int i = 0; i < lines.Length; i++){//除最后一行外,vertexs对于前面几行都有回车符占了6个点if (i == 0){lines[i] = new Line(0, lineTexts[i].Length + 1);}else if (i > 0 && i < lines.Length - 1){lines[i] = new Line(lines[i - 1].EndVertexIndex + 1, lineTexts[i].Length + 1);}else{lines[i] = new Line(lines[i - 1].EndVertexIndex + 1, lineTexts[i].Length);}}UIVertex vt;for (int i = 0; i < lines.Length; i++){Vector3 startPos = Vector3.zero;Vector3 endPos = Vector3.zero;Vector3 defaultStartPos = Vector3.zero;Vector3 defaultEndPos = Vector3.zero;for (int j = lines[i].StartVertexIndex; j <= lines[i].EndVertexIndex; j++){if (j < 0 || j >= vertexs.Count){continue;}vt = vertexs[j];if (defaultStartPos == Vector3.zero){defaultStartPos = new Vector3(vt.position.x, vt.position.y, vt.position.z);}defaultEndPos = new Vector3(vt.position.x, vt.position.y, vt.position.z);if (j != 0){vt.position += new Vector3(TextHorizontalSpacing * ((j - lines[i].StartVertexIndex) / 6), 0, 0);}if (startPos == Vector3.zero){startPos = new Vector3(vt.position.x, vt.position.y, vt.position.z);}endPos = new Vector3(vt.position.x, vt.position.y, vt.position.z);vertexs[j] = vt;//以下注意点与索引的对应关系if (j % 6 <= 2){vh.SetUIVertex(vt, (j / 6) * 4 + j % 6);}if (j % 6 == 4){vh.SetUIVertex(vt, (j / 6) * 4 + j % 6 - 1);}}if (text.alignment == TextAnchor.MiddleCenter || text.alignment == TextAnchor.UpperCenter || text.alignment == TextAnchor.LowerCenter){Vector3 defaultCenterPos = defaultStartPos + (defaultEndPos - defaultStartPos) / 2;Vector3 centerPos = startPos + (endPos - startPos) / 2;for (int j = lines[i].StartVertexIndex; j <= lines[i].EndVertexIndex; j++){if (j < 0 || j >= vertexs.Count){continue;}vt = vertexs[j];vt.position = vt.position + defaultCenterPos - centerPos;vertexs[j] = vt;//以下注意点与索引的对应关系if (j % 6 <= 2){vh.SetUIVertex(vt, (j / 6) * 4 + j % 6);}if (j % 6 == 4){vh.SetUIVertex(vt, (j / 6) * 4 + j % 6 - 1);}}}if (text.alignment == TextAnchor.MiddleRight || text.alignment == TextAnchor.UpperRight || text.alignment == TextAnchor.LowerRight){Vector3 defaultRightPos = defaultEndPos;Vector3 rightPos = endPos;for (int j = lines[i].StartVertexIndex; j <= lines[i].EndVertexIndex; j++){if (j < 0 || j >= vertexs.Count){continue;}vt = vertexs[j];vt.position = vt.position + defaultRightPos - rightPos;vertexs[j] = vt;//以下注意点与索引的对应关系if (j % 6 <= 2){vh.SetUIVertex(vt, (j / 6) * 4 + j % 6);}if (j % 6 == 4){vh.SetUIVertex(vt, (j / 6) * 4 + j % 6 - 1);}}}}}
}public class Line
{private int _startVertexIndex = 0;/// <summary>/// 起点索引/// </summary>public int StartVertexIndex{get{return _startVertexIndex;}}private int _endVertexIndex = 0;/// <summary>/// 终点索引/// </summary>public int EndVertexIndex{get{return _endVertexIndex;}}private int _vertexCount = 0;/// <summary>/// 该行占的点数目/// </summary>public int VertexCount{get{return _vertexCount;}}public Line(int startVertexIndex, int length){_startVertexIndex = startVertexIndex;_endVertexIndex = length * 6 - 1 + startVertexIndex;_vertexCount = length * 6;}
}

5、参考的代码 TextSpacing2

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;[AddComponentMenu("UI/Effects/TextSpacing2")]
public class TextSpacing2 : BaseMeshEffect
{#region Structpublic enum HorizontalAligmentType{Left,Center,Right}public class Line{// 起点索引public int StartVertexIndex { get { return _startVertexIndex; } }private int _startVertexIndex = 0;// 终点索引public int EndVertexIndex { get { return _endVertexIndex; } }private int _endVertexIndex = 0;// 该行占的点数目public int VertexCount { get { return _vertexCount; } }private int _vertexCount = 0;public Line(int startVertexIndex, int length){_startVertexIndex = startVertexIndex;_endVertexIndex = length * 6 - 1 + startVertexIndex;_vertexCount = length * 6;}}#endregionpublic float Spacing = 1f;public override void ModifyMesh(VertexHelper vh){if (!IsActive() || vh.currentVertCount == 0){return;}var text = GetComponent<Text>();if (text == null){Debug.LogError("Missing Text component");return;}// 水平对齐方式HorizontalAligmentType alignment;if (text.alignment == TextAnchor.LowerLeft || text.alignment == TextAnchor.MiddleLeft || text.alignment == TextAnchor.UpperLeft){alignment = HorizontalAligmentType.Left;}else if (text.alignment == TextAnchor.LowerCenter || text.alignment == TextAnchor.MiddleCenter || text.alignment == TextAnchor.UpperCenter){alignment = HorizontalAligmentType.Center;}else{alignment = HorizontalAligmentType.Right;}var vertexs = new List<UIVertex>();vh.GetUIVertexStream(vertexs);// var indexCount = vh.currentIndexCount;var lineTexts = text.text.Split('\n');var lines = new Line[lineTexts.Length];// 根据lines数组中各个元素的长度计算每一行中第一个点的索引,每个字、字母、空母均占6个点for (var i = 0; i < lines.Length; i++){// 除最后一行外,vertexs对于前面几行都有回车符占了6个点if (i == 0){lines[i] = new Line(0, lineTexts[i].Length + 1);}else if (i > 0 && i < lines.Length - 1){lines[i] = new Line(lines[i - 1].EndVertexIndex + 1, lineTexts[i].Length + 1);}else{lines[i] = new Line(lines[i - 1].EndVertexIndex + 1, lineTexts[i].Length);}}UIVertex vt;for (var i = 0; i < lines.Length; i++){for (var j = lines[i].StartVertexIndex; j <= lines[i].EndVertexIndex; j++){if (j < 0 || j >= vertexs.Count){continue;}vt = vertexs[j];var charCount = lines[i].EndVertexIndex - lines[i].StartVertexIndex;if (i == lines.Length - 1){charCount += 6;}if (alignment == HorizontalAligmentType.Left){vt.position += new Vector3(Spacing * ((j - lines[i].StartVertexIndex) / 6), 0, 0);}else if (alignment == HorizontalAligmentType.Right){vt.position += new Vector3(Spacing * (-(charCount - j + lines[i].StartVertexIndex) / 6 + 1), 0, 0);}else if (alignment == HorizontalAligmentType.Center){var offset = (charCount / 6) % 2 == 0 ? 0.5f : 0f;vt.position += new Vector3(Spacing * ((j - lines[i].StartVertexIndex) / 6 - charCount / 12 + offset), 0, 0);}vertexs[j] = vt;// 以下注意点与索引的对应关系if (j % 6 <= 2){vh.SetUIVertex(vt, (j / 6) * 4 + j % 6);}if (j % 6 == 4){vh.SetUIVertex(vt, (j / 6) * 4 + j % 6 - 1);}}}}
}

三、新版本 Unity Text(TMP)自带调整行间距

1、默认字间距

2、使用 Text(TMP)的 Charactor 调整字间距

附录:

新版本 Unity Text(TMP) 中文字体支持(介绍生成中文字体资源的方法之一)

1、首先 C:\Windows\Fonts 获取支持中文的字体(其他支持中文的字体也行)

2、当然,Unity 也要添加 TextMeshPro 相关工具插件(获取方式,1、添加 Text-TextMeshPro会自动添加;2、Package Manager 中下载添加)

3、打开 TextMeshPro - Font Asset Creator

 

4、添加支持中文的字体font, Atlas Resolution 根据需要设置,然后 Charactor Set 选择 Charactors from file ,然后添加常用的中文字txt

注意: Atlas Resolution 是关键,过小 可能文字显示不出来,太大生成的.asset 较大耗费空间

 

 5、生成 Atlas ,然后保存即可生成 Text(TMP)需要的字体资源

 

 6、zh-cn_Commonly_used.txt 常用中文字

的一是了我不人在他有这个上们来到时大地为子中你说生国年着就那和要她出也得里后自以会家可下而过天去能对小多然于心学么之都好看起发当没成只如事把还用第样道想作种开美总从无情己面最女但现前些所同日手又行意动方期它头经长儿回位分爱老因很给名法间斯知世什两次使身者被高已亲其进此话常与活正感见明问力理尔点文几定本公特做外孩相西果走将月十实向声车全信重三机工物气每并别真打太新比才便夫再书部水像眼等体却加电主界门利海受听表德少克代员许稜先口由死安写性马光白或住难望教命花结乐色更拉东神记处让母父应直字场平报友关放至张认接告入笑内英军候民岁往何度山觉路带万男边风解叫任金快原吃妈变通师立象数四失满战远格士音轻目条呢病始达深完今提求清王化空业思切怎非找片罗钱紶吗语元喜曾离飞科言干流欢约各即指合反题必该论交终林请医晚制球决窢传画保读运及则房早院量苦火布品近坐产答星精视五连司巴奇管类未朋且婚台夜青北队久乎越观落尽形影红爸百令周吧识步希亚术留市半热送兴造谈容极随演收首根讲整式取照办强石古华諣拿计您装似足双妻尼转诉米称丽客南领节衣站黑刻统断福城故历惊脸选包紧争另建维绝树系伤示愿持千史谁准联妇纪基买志静阿诗独复痛消社算义竟确酒需单治卡幸兰念举仅钟怕共毛句息功官待究跟穿室易游程号居考突皮哪费倒价图具刚脑永歌响商礼细专黄块脚味灵改据般破引食仍存众注笔甚某沉血备习校默务土微娘须试怀料调广蜖苏显赛查密议底列富梦错座参八除跑亮假印设线温虽掉京初养香停际致阳纸李纳验助激够严证帝饭忘趣支春集丈木研班普导顿睡展跳获艺六波察群皇段急庭创区奥器谢弟店否害草排背止组州朝封睛板角况曲馆育忙质河续哥呼若推境遇雨标姐充围案伦护冷警贝著雪索剧啊船险烟依斗值帮汉慢佛肯闻唱沙局伯族低玩资屋击速顾泪洲团圣旁堂兵七露园牛哭旅街劳型烈姑陈莫鱼异抱宝权鲁简态级票怪寻杀律胜份汽右洋范床舞秘午登楼贵吸责例追较职属渐左录丝牙党继托赶章智冲叶胡吉卖坚喝肉遗救修松临藏担戏卫药悲敢靠伊村戴词森耳差短祖云规窗散迷油旧适乡架恩投弹铁博雷府压超负勒杂醒洗采毫嘴毕九冰既状乱景席珍童顶派素脱农疑练野按犯拍征坏骨余承置臓彩灯巨琴免环姆暗换技翻束增忍餐洛塞缺忆判欧层付阵玛批岛项狗休懂武革良恶恋委拥娜妙探呀营退摇弄桌熟诺宣银势奖宫忽套康供优课鸟喊降夏困刘罪亡鞋健模败伴守挥鲜财孤枪禁恐伙杰迹妹藸遍盖副坦牌江顺秋萨菜划授归浪凡预奶雄升碃编典袋莱含盛济蒙棋端腿招释介烧误软件坛央政辞杨洁汗扎齐兹龙佩盟佐协迄届旨讨昨幕评聚焦促郑略瞻篇闭签署丰硕拓倡毅兼绕携互赢鉴努执描绘幅晰源企涵申核益贸措弘扬策沟施畅域吹宁繁荣朗威胁亿税妥善省厅县织潮摘网哈滨塌腐谓防杜侵蚀伞涉码掩漫延恣二拔率检效患积胆疯狂货媒曝鼓励舆笼潜振渔弊服监督惰租映矿审挑滋减遵循竭泽嗅寄培竞坊啃硬钢妨抓庆伟艰猛搞摆悠础蕴厚序甘肃暴洪悉损毁灾镇葬湾踪抛尸横岩崎徒刑嫌籍控泛轨测倍均镜偏港垄违芯销售补估滥阻碍罚款遭户迟订奔屈湿透桂圆莆姓尺绿乔粗壮枝薄椭披针侧梗瓣乳卵柔褐灰稍凸瘤季栽亦疏蔗蛋荔葡萄疫苗吴昊尤零输储箱诊链配疾射综障绪慌舟途径恰喻咬犬撰轮巡馈括辽川湖沈暂贿彻召忠诚净奉献秀唯贤符裙档弱涣述敷衍虚磋纷晓鸿津姜虎熙劣旗帜驳田韩隋芝凤限融冒驻壁隔阂览圈颜插哔哩渠庞占巧陆构堆灿瞩择填卷屏榜伍秒触碰掌萝莉频播淹荧棒挡妆荡勤奋迅盈爆俗尹载蹈碎访磨郭绍烹饪荐俊慧幽欲艾咨询趋捧赏睐逐狼吞咽赞夸曰趁危惜哗宠吐槽迎猎赚仿昌尝借训陌牢汇粉诈骗娱纯享宜悖络跨覆篮贾磊酝酿拢帽册姚赔移冻董芳孙晒删舒屁股溢肤皙嘟迪旦驾驭呆艳雅蜜桃胸傲纤拨魅材尖劲震厂址猜塔轴版舰捷乘辆额液虑滑扩池驱姿纺奏郊腾疲削拒罢缩墨廷缓纬启折吨柴梳涨跌搁浅累抵卓讯弈撑概呈稳固欠宇芬帷驶杆键混倾斜叠航逻辑替钥匙椅甲醛析搭跃秉旺卢兄巩柱翰堡暨谱附辱尊韦睹予彼宽贷缴埃丹劝框俄贡伏宕凭迁牵币尚邻筑巢贫惠谋浇灌谊珊抢敞拦惕末摄岔亭沿拟吊澎湃隶凉岗稽歉详汲邮阅誓仪衔晕猝汕饺闷凌晨辩捂胃讼尾履渡蔡殊摊偿隆陷幻递遥吁谭忧蒂霍羞谴避贪饮冬疗顽炎瓜汤糖豆楂烦渴痈肿毒枣茶泡添茄竹蔬紫胶癌辣甜惹瞬崩浮淡辅援搜贺滚峪截稿押朴狱叛泳赦泰愚渺茫敦唐抗歧躺迫酵购罹染琦蒸拘盘允券宏隐瑞崔偷漏沸梁攻番誉毯坎坷饰珠锁脍炙爷谣奸嫖宿幼诬逼徐楚陕栈崖绳伸卧沃躲憾玉桥骸浩距炉浙嘉私垃圾废诱洼淀暑埔译纠肢宋寂塑匈荷裁彭棉麦猪宗仓库霸摩擦耿爽抨贴剂慰弃斥拖酷砖峰衡衷畔厦颇枢纽匆偶傍缕箭寒崭仔庄挝坝兆瓦湄柬寨井刨溃峡堵旱竣蓄雾揭蓝蚁穴敬哀岸墓犹豫赴灭疆凝阔攸捍伐秩彰贯歪僵孰坡乃镑绩铝垒侠矛盾赖丢槛裸赤钩舱渲搬窃扭剩肆昔阱粤澳逆夕宵橙悬夹洞尘辐喷粒撞宙膨胀穷虫壳拜账扣圳桩桑蓬渗崇刷罕邀函煞乌嫁宪怖勇牺牲践辰苑霞樊弦冠返涛扰役侦聊捕刊挽操纵骂溪残抚恤曙浸狠夺砸颗闪握欣闹鹅肥宅痴杯赫缘叹豪吵窝撮乏勾兑艘瞠舌锐炮婪拆昙侃艇君磅惩尴尬润亏鲍掐掰滴铺挣挫拼琼曼邦逾狐骇鑫募浏搅逞燥钉苹逊奈谷挤割盎氢燃攀页孚勘薪酬恒乙丁卜刀寸巾乞勺丸弓刃叉匹屯冈仁仆仇斤爪凶氏勿匀丑孔扑扒扔丙厉轧帅叮叼叨禾丘仗仙丛甩饥汁奴孕扛寺扫芒朽臣厌匠邪迈贞吓屿帆岂朱乒乓仰伪肌旬妄闯羊污讽阶阴羽驰寿戒扶扯抄扮孝坟坑抖劫芽芹苍芦杠杏歼盯旷串吩呜吼帐秃伶佣皂肝肚肠龟亩辛冶闲灶汪尿忌妖鸡纱纲纹驴抹拣抽拐拌抬茂茎茅柜枕丧刺厕轰顷斩叔齿虏肾昆昂咐鸣咏帖岭凯贩钓垂牧乖刮秆佳侍侄侨爬舍斧肺昏兔饱饲庙盲闸炒炊炕沫泄沾泊泻泥泼怜帘郎肩衬衫诞孟驼玻挂垮挎挠赵挺拴拾垫挖挪巷茧荒枯柄栋柏柳柿栏咸厘砌砍耐耍殃鸦皆竖盼眨哄哑畏趴虹虾蚂咱咳炭贱钞卸缸矩竿俩侮俭俘泉鬼叙剑逃盆胞胖脉勉狭狮狡怨饶饼弯疮疤阀阁炼炸烂剃洒浊洽浑浓恢恼恨扁袄祝诵垦昼陡眉娃姥姨姻娇怒怠绑绒骄骆绞耕耗蚕盏匪捞盐捎捏埋捉捆捐哲逝捡壶挨耻耽恭莲晋桐株逗栗翅唇轿毙眠鸭晃晌蚊哨唤唉贼钳钻铃铅氧敌秤秧笋债倚倘俱俯倦臭躬爹颂翁脆脂胳脏狸逢皱饿桨浆衰脊症疼剖畜瓶拳烤烘烛涝涂浴烫涌悟悄悔悦宴宾窄宰诸扇袜袖袍祥冤谅剥恳屑陵陶陪绢绣掀掏掠掘萌菌菊萍菠械梢梅梯桶戚聋袭雀睁眯啦啄蛇铜铲梨犁笨笛敏盒鸽脖猫馅凑麻痒痕廊庸鹿盗旋粘剪兽淋淘婆惭悼惧惨惯寇窑谎祸谜逮屠婶颈骑绵绸斑堪堤揪煮搂揉欺葛葱辜葵椒棵棍棚棕惑厨雁殖裂辈辉晴晶喇蛙蛛蜓喂喘喉赌铸锄锅锈锋稀筐筛筒筋筝傅御禽腊脾腔猾猴馋蛮羡粪焰渣溉愤愧愉慨窜裕裤谦屡粥隙絮嫂缎魂摸搏塘蒜鹊槐榆碗碌雹龄睬鄙暖歇跪遣蛾蜂嗓罩锡锣锤锦锯矮稠愁筹舅鼠催傻愈腰腥腹酱痰廉韵粮煎慈煤煌漠滤滔溜粱滩慎谨殿辟缝缠碧璃墙撇摧摔蔽慕暮蔑榴榨酸磁裳嗽蜻蜡蝇蜘锹锻箩僚鼻魄貌膜膊膀馒裹敲膏遮瘦熄熔漆漂嫩翠熊凳骡撕撒趟撤聪蕉樱橡飘醋醉霉瞒瞎踢踏踩蝶蝴嘱稻黎稼僻膝膛糊劈燕薯颠橘蹄赠雕辨糕澡懒鞠霜瞧螺穗辫糟糠臂翼骤鞭蹦镰鹰蹲颤壤耀躁嚼嚷魔蠢囊罐汰舶匕刁丐歹戈夭仑讥冗邓夯叭叽皿凹囚艂乍冯玄迂邢芋芍吏夷吕吆屹臼舋肋旭凫艁亥汛讳讶讹诀弛驮驯纫玖韧抠扼汞扳抡坞抑抒芙芜苇芥芭杖杉巫杈甫匣轩卤肖吱吠呕呐吟呛吻吭邑囤吮岖撍佑佃伺囱肛舔甸狈鸠彤灸庇吝庐闰艖沐沛沥沦汹沪忱诅艉妓姊妒玫卦坯坪坤舦拧拂艎撌拗茉苛苫苟苞艒苔枉枚枫杭郁矾奄殴艏哎咕呵咙舗舖咆咖帕贬舮氛岳侥侣侈卑刽刹肴觅忿瓮肮肪狞疟疙疚卒氓炬沽沮泣泞泌沼怔怯宛衩祈诡舕屉弧弥陋撈撏舷叁舜驹绊绎契贰玷玲拭拷拱挟垢垛拯荆茸茬荚茵茴荞荠荤萦柑栅柠枷迊砂泵砚鸥舓韭虐昧盹咧昵昭舃勋哆咪萯钙钝钠钦钧钮毡秕俏俐侯徊胚胧胎狰饵峦奕飒闺闽籽娄烁炫柒涎恃恍恬宦诫祠诲艄陨蚤舸耘耙秦匿埂袁捌挚捣捅聂荸莽莹莺梆栖桦栓桅舾艓砰砾殉哮唠剔蚌蚜蚣蚪蚓圃鸯唁哼唆峭唧峻赂赃钾铆氨秫笆俺赁倔殷耸舀豺豹颁胯胰脐脓逛卿鸵鸳馁凄斋疹紊瓷羔烙浦涡涤涧涕涩悍悯窍诽袒艋祟恕娩骏琐麸琉琅捺捶舎迚捻掂掖掷掸掺娶菱菲萎菩萤乾萧菇辴梧梭曹酗厢硅奢盔匾颅辭眶晤晦冕啡畦趾蛆蚯蛉舭唬啰唾啤啥啸婴赊铐铛铡铣铭矫秸秽笙笤偎傀躯兜衅徘徙舵敛翎脯逸凰猖祭庶庵痊阎阐眷焊焕涯淑淌淮淆渊淫淳淤涮惦悴惋舁谍谐裆袱祷谒谚尉堕隅婉绰绷绽艊琳艑揍堰揩揽揖揣搀搓壹搔葫撔蒋棱椰焚艅棺榔粟棘酣酥硝硫颊雳翘凿棠鼎喳遏晾畴跋跛蛔蜒蛤鹃啼喧嵌赋赎赐锉锌舧氮氯黍筏牍腌腋腕猩猬惫痘痢痪翔奠遂焙臿湘迓溅愕惶窖窘雇谤犀隘媚婿缅缆缔骚瑟鹉瑰搪聘斟靴靶蓖蒿蒲蓉楔椿楷榄楞楣酪碘硼碉撘瞄嗜嗦暇畸跷跺蜈蜗蜕蛹嗡嗤蜀幌锚艆锨锭锰臻颓筷魁衙腻腮腺鹏肄猿萬雏馍馏禀痹廓靖誊漓溯溶滓溺窥窟寝褂谬媳嫉缚缤剿艈熬蔫摹蔓蔼蔚兢榛榕碟碴碱碳辕辖雌墅嘁踊蝉嘀幔镀熏箍箕箫僧孵瘩瘟粹漱漩漾慷寡寥褪隧嫡缨撵撩撬擒墩舻鞍蕊樟橄豌醇磕碾嘶嘲嘹蝠蝎蝌蝗蝙嘿幢镊镐篓辮鲤鲫褒辳瘫凛潭潦潘澈澜澄憔懊憎翩褥鹤憨嬉缭撼擂擅蕾薛薇擎噩橱瓢蟥霎辙冀踱蹂蟆螃螟噪鹦黔撚篡篷篙篱儒膳鲸瘾瘸糙燎辶懈窿缰壕藐檬檐檩檀礁磷瞭瞳瞪蹋蟋蟀嚎赡镣魏簇儡徽爵朦臊鳄糜懦豁臀藕藤嚣鳍癞瀑襟璧戳攒孽摺藻蹭蹬簸蟹靡癣羹鬓攘蠕巍鳞糯譬霹躏髓蘸镶瓤矗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102437.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

站在程序猿的角度理解:UDP 协议

哈喽&#xff0c;大家好~我是你们的老朋友&#xff1a; 保护小周ღ&#xff0c;本期为大家带来的是 网络基础原理中的 UDP 协议&#xff0c;从什么协议&#xff1f;&#xff0c;认识 UDP 协议&#xff0c;UDP 的报文格式&#xff0c;UDP 传输大文件时的策略&#xff0c;以及 UD…

VS code 插件之中英文间自动添加空格

前言 不知道大家在开发过程中是不是会遇到写代码注释或者文本内容时中英文之间没有空格的情况&#xff0c;很多时候在写代码尤其是写注释的时候容易忘记加空格&#xff0c;但回过头来看又难以忍受&#xff0c;于是我就想着自己写一个 vscode 插件来解决这个问题&#xff0c;希…

展会邀请 | 虹科诚邀您4月26-28日前来参观成都国际工业博览会

HONGKE NEWS 2023 成都国际工业博览会精准聚焦中国智能制造&#xff0c;将通过展示自动化和工业机器人技术、新一代信息技术、金属加工、节能与工业配套、新材料等全行业最新技术和解决方案&#xff0c;完美呈现智能工业产业链中的创新技术及产品的有效融合。 2023年4月26日-…

高效编程----VSCode+ChatGPT插件

VSCode中使用ChatGPT插件 首先在VSCode中打开扩展面板&#xff0c;搜索ChatGPT&#xff0c;安装蓝色圈出插件&#xff0c;如图所示&#xff1a; 安装完成后&#xff0c;需要重启VSCode 注册账号&#xff0c;如图所示&#xff1a; 然后在ChatGPT对话框中输入信息即可使用&#…

Python 实验四 常用数据结构(1)

1.从键盘输入一个正整数列表&#xff0c;以一1结束&#xff0c;分别计算列表中奇数和偶数的和。 n int(input("请输入一个正整数&#xff1a;")) list [] while n ! -1:list.append(n)n int(input("请输入一个正整数&#xff1a;")) else:print("…

【Linux网络】部署YUM仓库及NFS服务

部署YUM仓库及NSF服务 一、YUM仓库1.1、YUM仓库概述1.2准备安装来源1.3在软件仓库加载非官方RPM包组1.4yum与apt 二、配置yam源与制作索引表2.1配置FTP源2.2配置国内在线yum源2.3在线源与本地源同时使用2.4建立软件包索引关系表的三种方法 三、nfs共享存储服务3.1安装软件&…

Django框架之创建项目、应用并配置数据库

django3.0框架创建项目、应用并配置数据库 创建项目 进入命令行 新建一个全英文的目录 进入目录 输入命令 django-admin startproject project 项目目录层级 查看当前目录层级 tree /f 目录文件说明 创建数据库 做一个学生管理系统做演示&#xff0c;使用navicat创建数据…

ML之DR:sklearn.manifold(流形学习和降维的算法模块)的简介、部分源码解读、案例应用之详细攻略

ML之DR&#xff1a;sklearn.manifold(流形学习和降维的算法模块)的简介、部分源码解读、案例应用之详细攻略 目录 sklearn.manifold的简介 sklearn.manifold(流形学习和降维的算法模块)的概述 外文翻译 sklearn.manifold的部分源码解读 sklearn.manifold的简介 sklearn.ma…

Bugku——应急加固1

来打一下bugku的应急加固靶场&#xff0c;靶场链接&#xff1a;https://ctf.bugku.com/ctfplus/detail/id/2.html 启动环境 1、JS劫持域名 直接访问ip地址&#xff0c;发现是xxx学院二手交易市场&#xff0c;随后被劫持跳转到了一个博客页面。 博客地址就是第一个flag&…

Android音视频开发-OpenGL ES正交投影实现方法

本文实例为大家分享了OpenGL ES正交投影展示的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 绘制正方形 在最开始绘制的六边形里面好像看起来挺容易的&#xff0c;也没有出现什么问题&#xff0c;接下来不妨忘记前面绘制六边形的代码&#xff0c;让我们按照自己的…

Ubuntu下打开QtCreator,环境变量(PATH、LD_LIBRARY_PATH等)与预期不一致的问题

现象展示 在Ubuntu中&#xff0c;安装好Qt之后&#xff0c;可以在系统桌面的左下角找到启动图标 但是&#xff0c;这种方式启动的QtCreator所读取到的环境变量和我们从命令行读取到的不一致&#xff1a; 可以看到&#xff0c;明显少了这个&#xff1a;/opt/ros/humble/bin 因…

很合适新手入门使用的Python游戏开发包pygame实例教程-02[如何控制飞行]

前面一篇博文&#xff0c;我们让飞机动起来了&#xff0c;但不是那么完美&#xff0c;我们继续来完善我们的游戏代码&#xff0c;本篇博文主要介绍获取按键的方式已经飞行的控制。 文章目录 一、获取按键的三种方式1、通过event.get配合pygame.key枚举2、通过event.get配合ord…

微积分入门

文章目录 前言初期积分微分微积分问题 后期极限 ε \varepsilon ε- δ \delta δ极限勒贝格积分 结语 前言 微积分总共走过了两个时期。首先是牛顿和莱布尼茨利用无穷小量定义微分和积分&#xff0c;并且发现了微分和积分的关系&#xff0c;这是第一个时期&#xff0c;这时的…

设计模式——组件协作模式之模板方法模式

文章目录 前言一、“组件协作” 模式二、模板方法模式1、动机2、源码分析讲解①、结构化软件设计②、面向对象软件设计 三、模板方法模式定义四、结构要点总结 前言 一、“组件协作” 模式 现代软件专业分工之后的第一个结果是 “框架与应用程序的划分”&#xff0c;“组件协作…

Cuckoo Filter

其他判重数据结构 Bloom Filter 无法支持删除和计数的功能&#xff0c;需要更多的存储空间来存储数据 因为在CS中&#xff0c;删除和计数是常见的操作&#xff0c;但是这会对布隆过滤器的存储空间产生影响&#xff0c;同样为了实现这一操作&#xff0c;需要更多的存储空间 数…

ArcGIS Pro导航工具

主要导航工具为浏览工具 、屏幕导航器 、书签 、转到XY工具 。 其它还包括链接视图、地图比例&#xff08;2D&#xff09;、场景高度&#xff08;3D&#xff09;、暂停并刷新绘制、照相机属性、在3D模式下导航、键盘快捷键等。 1 主要导航工具 地图和场景的默认工具为浏览工具…

C++ “类与对象”

类与对象的概念 类相当于是结构体的声明&#xff0c;是结构体的设计图&#xff0c;而对象是利用设计图的创造的产物. &#xff08;1&#xff09;.类的大小计算 类的大小计算时与结构体类似&#xff0c;但函数是不计入大小的&#xff08;函数放在单独的公共空间&#xff09;. 在…

Unity API详解——Object类

Object类是Unity中所有对象的基类&#xff0c;例如GameObject、Component、Material、Shader、Texture、Mesh、Font等都是Object的子类。本博客介绍Object类的一些实例方法和静态方法。 一、Object类实例方法 在Object类中&#xff0c;涉及的实例方法主要有GetInstanceID方法…

8. 优先队列

8. 优先队列 普通的队列是一种先进先出的数据结构&#xff0c;元素在队列尾追加&#xff0c;而从队列头删除。在某些情况下&#xff0c;我们可能需要找出队列中的最大值或者最小值&#xff0c;例如使用一个队列保存计算机的任务&#xff0c;一般情况下计算机的任务都是有优先级…

ROS1学习笔记:常用可视化工具的使用(ubuntu20.04)

参考B站古月居ROS入门21讲&#xff1a;常用可视化工具的实现 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录 一、日志输出工具&#xff1a;rqt_console二、绘制数据曲线&#xff1a;rqt_plot三、 图像渲染工具&#xff1a;rqt_image_view四、图形界面总接口&#xff1a;r…