光电工程东莞网站建设,asp古典网站源码,郑州网站建设 服务创业,青海公路建设服务网站我们平时是自己再创景里的Canvas上创建一个物体 物体上有Image组件 然后把美术给的Sprite拖进去
现在这个编辑器工具 直接批量选中 一键再场景生成好物体 上面挂载了相应精灵
以下脚本赋值以后 放到 Editor文件夹下 再工具栏的tools下面就有了
using UnityEditor;
using UnityE…我们平时是自己再创景里的Canvas上创建一个物体 物体上有Image组件 然后把美术给的Sprite拖进去现在这个编辑器工具 直接批量选中 一键再场景生成好物体 上面挂载了相应精灵以下脚本赋值以后 放到 Editor文件夹下 再工具栏的tools下面就有了using UnityEditor;using UnityEditor.SceneManagement;using UnityEngine;using UnityEngine.SceneManagement;using UnityEngine.UI;public class Sprite2ImageTool:Editor{// 菜单入口Assets右键 Tools顶部[MenuItem(Assets/Sprite To UI Image,false,100)][MenuItem(Tools/UI/Sprite To UI Image,false,100)]staticvoidCreateImageFromSelectedSprite(){// 关键修改兼容所有选中场景 // 1. 获取所有选中的对象不限制类型Object[]selectedObjectsSelection.objects;if(selectedObjects.Length0){EditorUtility.DisplayDialog(提示,请先选中Project面板中的Sprite资源,确定);return;}// 2. 手动筛选出Sprite类型的对象兼容图集/Texture嵌套SpriteSystem.Collections.Generic.ListSpriteselectedSpritesnew System.Collections.Generic.ListSprite();foreach(Object obj in selectedObjects){// 情况1直接选中Spriteif(obj is Sprite sprite){selectedSprites.Add(sprite);}// 情况2选中的是Texture但该Texture导入为Sprite常见于单张Sprite图elseif(obj is Texture2D tex){Sprite texSpriteAssetDatabase.LoadAssetAtPathSprite(AssetDatabase.GetAssetPath(tex));if(texSprite!null){selectedSprites.Add(texSprite);}}}// 3. 仍无Sprite则提示并打印调试信息if(selectedSprites.Count0){string tip未识别到Sprite\n选中的对象类型\n;foreach(Object obj in selectedObjects){tip$- {obj.name} : {obj.GetType().Name}\n;}Debug.LogError(tip);// 控制台打印详细信息EditorUtility.DisplayDialog(提示,tip,确定);return;}// 以下逻辑和之前一致 // 查找/创建CanvasCanvas canvasFindOrCreateCanvasInEditMode();if(canvasnull){EditorUtility.DisplayDialog(错误,创建Canvas失败,确定);return;}// 批量创建ImageintsuccessCount0;foreach(Sprite sprite in selectedSprites){if(!CheckSpriteForUI(sprite)){EditorUtility.DisplayDialog(提示,$Sprite「{sprite.name}」导入设置错误\n请将Texture Type改为Sprite (2D and UI),确定);continue;}CreateSingleImage(sprite,canvas);successCount;}EditorSceneManager.MarkSceneDirty(canvas.gameObject.scene);EditorUtility.DisplayDialog(完成,$成功创建 {successCount} 个UI Image,确定);}// 菜单显隐验证只要选中对象就显示放宽限制[MenuItem(Assets/Sprite To UI Image,true)]staticboolValidateCreateImage(){returnSelection.objects.Length0;// 只要有选中对象就显示菜单}/// summary/// 查找/自动创建Canvas/// /summarystaticCanvasFindOrCreateCanvasInEditMode(){// 查找已有Canvasfor(inti0;iSceneManager.sceneCount;i){Scene sceneSceneManager.GetSceneAt(i);if(!scene.isLoaded)continue;GameObject[]rootObjsscene.GetRootGameObjects();foreach(GameObject rootObj in rootObjs){Canvas canvassrootObj.GetComponentInChildrenCanvas(true);if(canvass!null)returncanvass;}}// 自动创建CanvasGameObject canvasGOnewGameObject(Canvas,typeof(Canvas),typeof(CanvasScaler),typeof(GraphicRaycaster));Canvas canvascanvasGO.GetComponentCanvas();canvas.renderModeRenderMode.ScreenSpaceOverlay;EditorUtility.SetDirty(canvasGO);returncanvas;}/// summary/// 校验Sprite导入设置/// /summarystaticboolCheckSpriteForUI(Sprite sprite){string spritePathAssetDatabase.GetAssetPath(sprite);TextureImporter importerAssetImporter.GetAtPath(spritePath)as TextureImporter;if(importernull)returnfalse;returnimporter.textureTypeTextureImporterType.Sprite;}/// summary/// 创建单个Image匹配Sprite尺寸/// /summarystaticvoidCreateSingleImage(Sprite sprite,Canvas parentCanvas){GameObject imageGOnewGameObject(sprite.name,typeof(RectTransform),typeof(Image));RectTransform imageRectimageGO.GetComponentRectTransform();imageGO.transform.SetParent(parentCanvas.transform,false);imageRect.sizeDeltanewVector2(sprite.rect.width,sprite.rect.height);imageRect.anchoredPositionVector2.zero;imageRect.anchorMinnewVector2(0.5f,0.5f);imageRect.anchorMaxnewVector2(0.5f,0.5f);Image imageCompimageGO.GetComponentImage();imageComp.spritesprite;imageComp.preserveAspecttrue;EditorUtility.SetDirty(imageGO);}}