Unity 编辑器开发实战【MenuItem & CONTEXT】- Image、RawImage的相互转换
2023-09-27 14:19:52 时间
1.Image转RawImage:
代码如下:
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
namespace SK.Framework
{
public class ImageTool : Editor
{
/// <summary>
/// Image转RawImage
/// </summary>
[MenuItem("CONTEXT/Image/Convert 2 RawImage")]
public static void Image2RawImage()
{
Image image = Selection.activeGameObject.GetComponent<Image>();
//Image中Sprite不为空则获取其texture
Texture2D texture2D = image.sprite ? image.sprite.texture : null;
var raycastTarget = image.raycastTarget;
//销毁Image组件
DestroyImmediate(image);
//添加RawImage组件
RawImage rawImage = Selection.activeGameObject.AddComponent<RawImage>();
rawImage.texture = texture2D;
rawImage.raycastTarget = raycastTarget;
//SetDirty以保存
EditorUtility.SetDirty(Selection.activeGameObject);
}
}
}
2.RawImage转Image:
代码如下:
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
namespace SK.Framework
{
public class ImageTool : Editor
{
/// <summary>
/// RawImage转Image
/// </summary>
[MenuItem("CONTEXT/RawImage/Convert 2 Image")]
public static void RawImage2Image()
{
RawImage rawImage = Selection.activeGameObject.GetComponent<RawImage>();
Sprite sprite = null;
//如果RawImage组件中的texture不为空
if (rawImage.texture != null)
{
//获取texture的资源路径
var path = AssetDatabase.GetAssetPath(rawImage.texture);
//根据该资源路径加载Sprite
sprite = AssetDatabase.LoadAssetAtPath<Sprite>(path);
}
var raycastTarget = rawImage.raycastTarget;
//销毁RawImage组件
DestroyImmediate(rawImage);
//添加Image组件
Image image = Selection.activeGameObject.AddComponent<Image>();
image.sprite = sprite;
image.raycastTarget = raycastTarget;
//SetDirty以保存
EditorUtility.SetDirty(Selection.activeGameObject);
}
}
}
完整脚本:
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
namespace SK.Framework
{
public class ImageTool : Editor
{
/// <summary>
/// Image转RawImage
/// </summary>
[MenuItem("CONTEXT/Image/Convert 2 RawImage")]
public static void Image2RawImage()
{
Image image = Selection.activeGameObject.GetComponent<Image>();
//Image中Sprite不为空则获取其texture
Texture2D texture2D = image.sprite ? image.sprite.texture : null;
var raycastTarget = image.raycastTarget;
//销毁Image组件
DestroyImmediate(image);
//添加RawImage组件
RawImage rawImage = Selection.activeGameObject.AddComponent<RawImage>();
rawImage.texture = texture2D;
rawImage.raycastTarget = raycastTarget;
//SetDirty以保存
EditorUtility.SetDirty(Selection.activeGameObject);
}
/// <summary>
/// RawImage转Image
/// </summary>
[MenuItem("CONTEXT/RawImage/Convert 2 Image")]
public static void RawImage2Image()
{
RawImage rawImage = Selection.activeGameObject.GetComponent<RawImage>();
Sprite sprite = null;
//如果RawImage组件中的texture不为空
if (rawImage.texture != null)
{
//获取texture的资源路径
var path = AssetDatabase.GetAssetPath(rawImage.texture);
//根据该资源路径加载Sprite
sprite = AssetDatabase.LoadAssetAtPath<Sprite>(path);
}
var raycastTarget = rawImage.raycastTarget;
//销毁RawImage组件
DestroyImmediate(rawImage);
//添加Image组件
Image image = Selection.activeGameObject.AddComponent<Image>();
image.sprite = sprite;
image.raycastTarget = raycastTarget;
//SetDirty以保存
EditorUtility.SetDirty(Selection.activeGameObject);
}
}
}
相关文章
- 回归模型的特征筛选方法---最优子集&逐步回归(Best Subset Selection,Stepwise Selection)
- [Scikit-learn] 2.1 Clustering - Gaussian mixture models & EM
- atitit.js 与c# java交互html5化的原理与总结.doc
- shell--EOF、行尾&
- byte转换为十六进制时,Integer.toHexString需要&FF的原因
- zoj 2874 & poj 3308 Paratroopers (最小割)
- 【我所认知的BIOS】—> uEFI AHCI Driver(4) — 第一个Protocol真难搞
- HDU5514——容斥原理&&gcd
- 【直播回顾&资料下载】Work Like Alibaba第三期:揭秘双11背后的技术支撑
- hive&presto日期与字符串转换
- VMWare File Format Learning && Use VHD File To Boot VMWare && CoreOS Docker Configuration And Running
- 内存泄漏&句柄增长-解决办法
- 一步一步教你从零开始写C语言链表--->构建一个链表
- 我的Android进阶之旅------>android如何将List<NameValuePair>请求参数列表转换为json格式