Unity 编辑器开发实战【MenuItem & CONTEXT】- Image、RawImage的相互转换
2023-06-13 09:11:38 时间
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);
}
}
}
相关文章
- 2022 SmartNIC & DPU Awards年度评选结果发布
- jQuery中的筛选&文档处理——案例
- Linux中&&、&、|、||等特殊符号的作用
- ES6模块导出&导入
- R语言线性混合效应模型(固定效应&随机效应)和交互可视化3案例|附代码数据
- 非约束委派&&约束委派
- Easyensemble&LightGBM-应对气象样本不平衡问题的有效算法(支持各类基模型接入与新增优化参数)
- 力扣7-整数反转&力扣8-字符串转换整数 (atoi)
- 医学图像重建2 | CT&PET,比尔定律,衰减矫正
- redis&nginx运行参数采集脚本
- 【C++修炼之路】12. stack && queue类
- C语言*运算符和&运算符
- php&java(一)
- PHP中::、->、self、$this几种操作符的区别介绍