[Unity] Unity5.6 2D中导入图片顶点数目过多修改为四个顶点

2023-10-06 22:38

本文主要是介绍[Unity] Unity5.6 2D中导入图片顶点数目过多修改为四个顶点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Unity5.6增强了2D功能,为制作2D游戏提供了很大的便利,让我们可以很方便地根据图片生成多边形碰撞体。在Sprite Editor中增加了Edit Outline的功能,让我们可以编辑图片的outline,而且unity也会在我们导入图片的时候自动地给我们调整图片的outline。

如下图所示,这么一个简单的图片有三十多个顶点,这还是在Outline Tolerance设置为0的情况下。
这里写图片描述

让我们看一下游戏场景中的情况:
这里写图片描述

上图可见,这么一个sprite需要30个顶点,28个三角面片,而其实4个顶点,两个三角面片足以胜任此工作。如果一个2D游戏的场景中有大量这种图片的话,很容易就会产生几千个顶点,无缘无故消耗游戏性能。

为了解决这个问题,需要对图片进行处理。我从图片的TextureImporter中获取outline信息,根据texture的宽高进行修改。下面是代码,有对单个Texture进行修改的,也有在导入资源的时候自动处理的:
这里写图片描述

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;// Author: 邵志恒 Rick
// E-mail: zhiheng.rick@gmail.compublic class AjustTexutureOutline2FourVertex : AssetPostprocessor
{// 导入图片的时候调用public void OnPostprocessTexture(Texture2D tx){TextureImporter textureImporter = this.assetImporter as TextureImporter;SerializedObject textureImporterSO = new SerializedObject(textureImporter);SerializedProperty outlineSP = textureImporterSO.FindProperty("m_SpriteSheet.m_Outline");ModifyOutline(outlineSP, tx.width, tx.height);textureImporterSO.ApplyModifiedProperties();}[MenuItem("Assets/AdjustOutline")]private static void AdjustOutline(){Object targetObj = Selection.activeObject;if (targetObj && targetObj is Texture2D){string path = AssetDatabase.GetAssetPath(targetObj);TextureImporter textureImporter = AssetImporter.GetAtPath(path) as TextureImporter;Texture tx = AssetDatabase.LoadAssetAtPath<Texture>(path);SerializedObject textureImporterSO = new SerializedObject(textureImporter);SerializedProperty outlineSP = textureImporterSO.FindProperty("m_SpriteSheet.m_Outline");ModifyOutline(outlineSP, tx.width, tx.height);textureImporterSO.ApplyModifiedProperties();AssetDatabase.ImportAsset(path);}}[MenuItem("Assets/ProcessTexture", true)]private static bool Texture2DValidation(){return Selection.activeObject.GetType() == typeof(Texture2D);}private static void ModifyOutline(SerializedProperty outlineSP, float width, float height){if (outlineSP.arraySize == 0){outlineSP.InsertArrayElementAtIndex(0);SerializedProperty arrayElementAtIndex = outlineSP.GetArrayElementAtIndex(0);for (int i = 0; i < 4; i++){arrayElementAtIndex.InsertArrayElementAtIndex(i);arrayElementAtIndex.GetArrayElementAtIndex(i).floatValue = 0.0f;}}for (int i = 0; i < outlineSP.arraySize; i++){SerializedProperty arrayElementAtIndex = outlineSP.GetArrayElementAtIndex(i);for (int j = 0; j < arrayElementAtIndex.arraySize; j++){float x, y;if (j == 0 || j == 1){x = -width / 2;}else{x = width / 2;}if (j == 1 || j == 2){y = -height / 2;}else{y = height / 2;}arrayElementAtIndex.GetArrayElementAtIndex(j).vector2Value = new Vector2(x, y);}}}
}

这篇关于[Unity] Unity5.6 2D中导入图片顶点数目过多修改为四个顶点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/154329

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1