当前位置: 首页 > news >正文

unity 让文字变形

效果:

using TMPro;
using UnityEngine;
using NaughtyAttributes;[ExecuteInEditMode]
public class TMTextPerpective : MonoBehaviour
{[OnValueChanged("DoPerspective")][Range(-1f, 1f)]public float CenterBias = 0f;[OnValueChanged("DoPerspective")][Range(0f, 100f)]public float PValue = 0f;TMP_Text m_Text;void Awake(){m_Text = GetComponent<TMP_Text>();TMPro_EventManager.TEXT_CHANGED_EVENT.Add(OnTextMeshChanged);}void Start(){DoPerspective();}// Update is called once per framevoid Update(){}void OnTextMeshChanged(Object o){if (!Application.isPlaying)return;if (o == m_Text){ChangeText2Perspective();}}void ChangeText2Perspective(){//Debug.Log("-----------------ChangeText2Perspective--------------");TMP_TextInfo textInfo = m_Text.textInfo;int characterCount = textInfo.characterCount;if (characterCount == 0) return;float x_min = m_Text.bounds.min.x;float x_max = m_Text.bounds.max.x;float y_min = m_Text.bounds.min.y;float y_max = m_Text.bounds.max.y;float center_x = x_min + (x_max - x_min) * ((CenterBias + 1f) / 2f);//Debug.Log($"x center {center_x}");Vector3[] vertices;float aff_ratio = PValue / 100f;for (int i = 0; i < characterCount; i++){if (!textInfo.characterInfo[i].isVisible)continue;int vertexIndex = textInfo.characterInfo[i].vertexIndex;// Get the index of the mesh used by this character.int materialIndex = textInfo.characterInfo[i].materialReferenceIndex;vertices = textInfo.meshInfo[materialIndex].vertices;for (int j = 0; j < 4; j++){Vector3 p = vertices[vertexIndex + j];float iratio = (p.y - y_min) / (y_max - y_min);//Debug.Log($"{textInfo.characterInfo[i].character} v {j} move percent {iratio} aff {aff_ratio}");p.x = p.x + (center_x - p.x) * aff_ratio * iratio;vertices[vertexIndex + j] = p;}}m_Text.UpdateVertexData();}[Button("执行")]void DoPerspective(){m_Text.ForceMeshUpdate();if (!Application.isPlaying)ChangeText2Perspective();}
}

相关文章:

unity 让文字变形

效果&#xff1a; using TMPro; using UnityEngine; using NaughtyAttributes;[ExecuteInEditMode] public class TMTextPerpective : MonoBehaviour {[OnValueChanged("DoPerspective")][Range(-1f, 1f)]public float CenterBias 0f;[OnValueChanged("DoPers…...

Linux高并发服务器开发 第一天(Linux的目录结构 cd用法 终端提示符格式)

目录 1.命令解析器&#xff1a;shell 2.LINUX下的目录结构 3.cd的使用 3.1cd 绝对路径 3.2cd 相对路径 3.3cd 回车 3.4cd - 4. 终端提示符格式 1.命令解析器&#xff1a;shell 默认运行与计算机系统终端的 用来解析用户输入命令的工具 内核&#xff1a;操作系统的核…...

可造成敏感信息泄露!Spring Boot之Actuator信息泄露漏洞三种利用方式总结

1.介绍 Spring Boot是一个基于Spring的套件&#xff0c;它提供了一个即开即用的应用程序架构&#xff0c;可以简化Spring应用的创建及部署流程&#xff0c;帮助开发者更轻松快捷地构建出企业及应用。 Spring Boot项目中Actuator模块提供了众多HTTP接口端点&#xff08;Endpoi…...

支持图像和视频理解多模态开源大模型:CogVLM2 CogVLM2-Video

CogVLM2和CogVLM2-Video是新一代的开源模型&#xff0c;支持图像和视频理解&#xff0c;具有显著的性能提升。最近发布的更新包括CogVLM2论文的发表、在线演示和对视频理解的支持&#xff0c;能够处理最多1分钟的视频。新模型支持中英文&#xff0c;文本长度可达8K&#xff0c;…...

ClouderaManager 集群搭建

前提&#xff1a;服务器之前做过域名映射、免密登录 ClouderaManager 集群 1. 组件分布规划 服务器服务器h1zk、hdfs(dn)、yarn(nm)、spark、kafka、flumeh2hdfs(nn-standy)、yarn(rm-active)、sparkh3hdfs(nn-active)、yarn(rm-standy)、hive、sparkh4zk、hdfs(dn)、yarn(n…...

Docker 搭建 gitlab 服务器卡顿问题解决方法(创建:swap分区)

Docker 安装系列 服务器搭建了一个 gitlab 服务器以供自己开发使用&#xff0c;服务器搭建很简单&#xff0c;但是使用起来是相当的卡顿&#xff0c;在代码 pull&#xff0c;push 过程中都会有相应的延迟。gitlab 启动运行就占用了大量的内存&#xff0c;4G内存在启动后已经所…...

PVE修改IP地址

一、在局域网的电脑浏览器输入PVE的IP地址登录后台&#xff0c;从左边的菜单找到“PVE”—“_Shell”菜单&#xff0c;进入网页版的ssh界面下&#xff1b;或者在主机的控制台下输入root密码后登录到ssh下&#xff1b; 二、输入以下命令回车&#xff1a; vi /etc/network/inter…...

智能合约的离线签名(EIP712协议)解决方案

引言&#xff1a;本文由天玄链开源开发者提供&#xff0c;欢迎报名公益天玄链训练营 https://blockchain.163.com/trainingCamp 一、解决核心问题 项目方不支付gas费&#xff0c;由用户自己发起交易&#xff0c;用户支付gas费。用户的数据保存在链下服务器中&#xff0c;tok…...

大模型Qwen面试内容整理-应用场景与案例分析

Qwen模型凭借其强大的自然语言理解和生成能力,在多个实际应用场景中得到了广泛应用。以下是Qwen模型的主要应用场景及一些典型的案例分析,展示了它如何解决具体问题和带来实际价值。 智能对话系统 ● 应用场景 ○ 客服机器人:Qwen被用于开发智能客服机器人,能够理解客户的问…...

spring boot的统一异常处理,使用@RestControllerAdvice

RestControllerAdvice 是 Spring Boot 中用于全局异常处理的注解&#xff0c;它结合了 ControllerAdvice 和 ResponseBody 的功能。这意味着使用 RestControllerAdvice 注解的类将应用于所有 RequestMapping 方法&#xff0c;并且任何从这些方法返回的对象都会被转换为 HTTP 响…...

OFCA-OpenHarmony课后习题答案

本文是 OFCA-OpenHarmony 认证模拟考试的习题答案&#xff0c;涵盖 OpenHarmony 的多内核设计、权限申请、通知发布、系统线程、启动过程、分布式软总线、模块导入、文件管理、公共事件等多个方面。每道题目均提供了详细的选择项和正确答案&#xff0c;旨在帮助考生熟悉考试内容…...

Open AI 推出 ChatGPT Pro

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

利用PHP和GD库实现图片切割

利用PHP和GD库实现图片切割的详细步骤如下&#xff1a; 一、检查GD库是否安装 确保服务器上已经安装了PHP和GD库。可以使用phpinfo()函数来检查GD库是否已经安装和启用。 二、加载原始图片 使用PHP提供的imagecreatefromjpeg()、imagecreatefrompng()或imagecreatefromgif(…...

【css】基础(一)

本专栏内容为&#xff1a;前端专栏 记录学习前端&#xff0c;分为若干个子专栏&#xff0c;html js css vue等 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;css专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &a…...

springboot415社区网格化管理平台的构建-(论文+源码)_kaic

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本社区网格化管理平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…...

如何在 Ubuntu 上安装开源监控工具 Uptime Kuma

简介 Uptime Kuma&#xff08;或简称 Kuma&#xff09;是一个开源监控工具&#xff0c;用于监控 HTTP、HTTPS、DNS 等协议的服务。Uptime Kuma 提供多种功能&#xff0c;如多语言支持、多个状态页面、代理支持等。 接下来&#xff0c;我将一步一步教大家如何进行安装和部署&am…...

复习 part one

synchronized 和 ReentrantLock的区别 synchronized 和 ReentrantLock 都是 Java 中提供的可重入锁&#xff0c;二者的主要区别有以下 5 个&#xff1a; 用法不同&#xff1a;synchronized 可以用来修饰普通方法、静态方法和代码块&#xff0c;而 ReentrantLock 只能用于代码块…...

【工业机器视觉】基于深度学习的水表盘读数识别(3-数据标注与转换)

【工业机器视觉】基于深度学习的仪表盘识读&#xff08;2&#xff09;-CSDN博客 数据标注 标注扩展 Labelme 和 LabelImg 都是用于创建机器学习和计算机视觉项目所需标注数据的工具。它们都允许用户通过图形界面手动标注图像&#xff0c;但各自有其特点和适用场景。 Labelme…...

python数据分析之爬虫基础:selenium详细讲解

目录 1、selenium介绍 2、selenium的作用&#xff1a; 3、配置浏览器驱动环境及selenium安装 4、selenium基本语法 4.1、selenium元素的定位 4.2、selenium元素的信息 4.3、selenium元素的交互 5、Phantomjs介绍 6、chrome handless模式 1、selenium介绍 &#xff08;1…...

Tips--解决esptool经pyinstaller打包后无法使用的问题

esptool打包后失效解决方法 问题1原因解决方法问题2原因解决方法 问题1 esptool经过pyinstaller打包成exe后&#xff0c;提示错误&#xff1a;Stub flasher JSON file for esp32 not found 原因 pyinstaller在进行esptool打包的时候&#xff0c;通常不用讲Stub flaser Json文…...

华为MateBook D 2018款升级Win11遇阻?手把手教你通过修改BIOS隐藏参数开启TPM2.0

华为MateBook D 2018款解锁Win11升级全攻略&#xff1a;深入BIOS底层参数调整实战 华为MateBook D系列作为商务本中的性价比代表&#xff0c;2018款用户近期在升级Windows 11时普遍遇到TPM 2.0无法启用的困扰。这台搭载第八代Intel处理器的设备其实完全具备TPM 2.0的硬件基础&a…...

收藏!小白也能看懂大模型:从入门到实战的AI学习指南

2026年春招中&#xff0c;AI岗位激增12倍&#xff0c;平均月薪超6万元&#xff0c;成为企业争夺焦点。大模型算法、多模态技术等前沿领域人才需求暴涨&#xff0c;AI已从实验室概念进入规模化落地阶段。教育体系面临挑战&#xff0c;需提前培养AI启蒙能力&#xff0c;打破传统专…...

告别重复图片困扰:AntiDupl.NET开源工具助你3步清理数字垃圾

告别重复图片困扰&#xff1a;AntiDupl.NET开源工具助你3步清理数字垃圾 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾经花费数小时整理电脑中的照片&#x…...

Win10系统下极点五笔输入法的兼容性配置与TSF框架适配实践

1. 为什么Win10需要特殊配置才能用极点五笔&#xff1f; 很多从Win7升级到Win10的五笔用户都会发现&#xff0c;用了十几年的极点五笔突然变得不听话了。这背后其实藏着微软输入法框架的大变革——从传统的IMM&#xff08;Input Method Manager&#xff09;架构转向了TSF&#…...

别再手动导网表了!巧用OrCAD Capture与Allegro PCB Editor联动,实现原理图变更一键同步

别再手动导网表了&#xff01;巧用OrCAD Capture与Allegro PCB Editor联动&#xff0c;实现原理图变更一键同步 在PCB设计领域&#xff0c;效率与准确性往往决定着项目成败。当工程师面对频繁的原理图修改时&#xff0c;传统的手动导出-导入网表流程不仅耗时费力&#xff0c;还…...

NotebookLM API接入倒计时:GCP项目配额收紧前,必须完成的4步合规配置与审计清单

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM API开发接入 NotebookLM 是 Google 推出的面向研究与知识管理的 AI 笔记工具&#xff0c;其官方尚未开放公开 API&#xff0c;但通过逆向分析 Web 客户端通信及社区验证的认证流程&#xff…...

艾尔登法环风灵月影修改器下载(已汉化)分享2026最新版

《艾尔登法环》以交界地为舞台&#xff0c;打造了一款兼具开放世界探索与高难度挑战的角色扮演游戏。玩家将扮演褪色者&#xff0c;在破碎的土地上冒险&#xff0c;挑战强大敌人、收集装备、提升能力&#xff0c;最终成为艾尔登之王。游戏以硬核战斗与开放探索为核心&#xff0…...

基于Javaweb的医院在线挂号系统(10007)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告/任务书&#xff09;远程调试控屏包运行一键启动项目&…...

使用Node.js在虚拟机后端服务中集成Taotoken多模型调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Node.js在虚拟机后端服务中集成Taotoken多模型调用 在虚拟机环境中部署Node.js后端服务时&#xff0c;直接对接多个大模型厂商…...

玩转OurBMC第二十六期:OpenBMC固件远程更新原理与实践(下)

栏目介绍&#xff1a;“玩转OurBMC” 是OurBMC社区开创的知识分享类栏目&#xff0c;主要聚焦于社区和BMC全栈技术相关基础知识的分享&#xff0c;全方位涵盖了从理论原理到实践操作的知识传递。OurBMC社区将通过 “玩转OurBMC” 栏目&#xff0c;帮助开发者们深入了解到社区文…...