动态赋值图片工具 动态获取资源路径工具
前言
我们unity 项目内会创建一些配置表,里面的数据可以让产品经理自己去修改,今天有一些配置表需要添加图片和添加视频的路径名字,产品经理需要一个图片一个片的拖,一个名字一个名字的赋值,而且图片和视频还特别多,所以我写了个工具,用不了一个小时就能搞完,
添加图片
添加图片前
点击确认添加图片按钮 添加图片后
每次添加图片差不多有四十多张,要是一个一个拖,挺累的
添加视频路径
添加视频路径前
添加后
代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(TeachTool))]
public class TeachTool : EditorWindow
{
[MenuItem("ConfigTool/添加图片或者视频")]
public static void ConfigTool()
{
EditorWindow.GetWindow(typeof(TeachTool));
}
public UnityEngine.Object setting;
[SerializeField]
public List<Sprite> spriteLiset=new List<Sprite>();
//序列化对象
protected SerializedObject _serializedObject;
protected SerializedObject _serializedObject2;
//序列化属性
protected SerializedProperty _assetLstProperty;
protected SerializedProperty _assetLstProperty2;
[SerializeField]
public List<UnityEngine.Object> MediaLiset = new List<UnityEngine.Object>();
public string tempFiled = "";
private void OnEnable()
{
}
private void OnGUI()
{
GUILayout.Label("知识点", EditorStyles.boldLabel);
setting = EditorGUILayout.ObjectField(setting, typeof(TeachPointSetting), true);
tempFiled = EditorGUILayout.TextField("知识点菜单名字:", tempFiled);
//设置间距
EditorGUILayout.Space(20);
//初始化
_serializedObject = new SerializedObject(this);
//获取当前类中可序列化的属性
_assetLstProperty = _serializedObject.FindProperty("spriteLiset");
//更新
_serializedObject.Update();
//开始检查是否有修改
EditorGUI.BeginChangeCheck();
//显示属性,第二个参数必须为true 否者无法显示子节点即List内容
EditorGUILayout.PropertyField(_assetLstProperty, true);
//结束检查是否有修改
if (EditorGUI.EndChangeCheck())
{
_serializedObject.ApplyModifiedProperties();
}
//设置间距
EditorGUILayout.Space(10);
//添加按钮
if(GUILayout.Button("确认添加图片"))
{
SetSprsite();
}
//设置间距
EditorGUILayout.Space(20);
_serializedObject2 = new SerializedObject(this);
_assetLstProperty2 = _serializedObject2.FindProperty("MediaLiset");
//更新
_serializedObject2.Update();
//开始检查是否有修改
EditorGUI.BeginChangeCheck();
//显示属性,第二个参数必须为true 否者无法显示子节点即List内容
EditorGUILayout.PropertyField(_assetLstProperty2, true);
//结束检查是否有修改
if (EditorGUI.EndChangeCheck())
{
_serializedObject2.ApplyModifiedProperties();
}
//设置间距
EditorGUILayout.Space(10);
//添加按钮
if (GUILayout.Button("确认添加视频"))
{
SetMedia();
}
}
/// <summary>
/// 修改图片
/// </summary>
public void SetSprsite()
{
if (spriteLiset.Count <= 0)
{
Debug.LogError("没有添加图片"); return;
}
TeachPointSetting teach = setting as TeachPointSetting;//配置文件
for (int i = 0; i < teach.datas.Length; i++)//遍历配置文件下内容
{
if(teach.datas[i].teachPointName== tempFiled)
{
if (spriteLiset.Count > 0)
{
teach.datas[i].contentStr = "";//知识点内容
teach.datas[i].imageDatas = new TeachPointData.ImageData[spriteLiset.Count];//初始化图片数组长度
for (int j = 0; j < spriteLiset.Count; j++)
{
teach.datas[i].contentStr += "&";
teach.datas[i].imageDatas[j].imageSprite = spriteLiset[j];//赋值图片
teach.datas[i].imageDatas[j].imageScale = 1;
}
}
}
}
}
public void SetMedia()
{
if (MediaLiset.Count <= 0)
{
Debug.LogError("没有添加视频"); return;
}
TeachPointSetting teach = setting as TeachPointSetting;
for (int i = 0; i < teach.datas.Length; i++)
{
if (teach.datas[i].teachPointName == tempFiled)
{
if (MediaLiset.Count > 0)
{
teach.datas[i].contentStr = @"<size=30><b>1. 装置简介</b></size>
*
< size = 30 >< b > 2.事故经过 </ b ></ size >
*
< size = 30 >< b > 3.直接原因 </ b ></ size >
*
< size = 30 >< b > 4.间接原因 </ b ></ size >
*";
string[] name = new string[MediaLiset.Count];
teach.datas[i].mediaName = name;
for (int j = 0; j < MediaLiset.Count; j++)
{
string path= AssetDatabase.GetAssetPath(MediaLiset[j]);//获取资源路径
//返回的字符串数组包含此字符串中的子字符串(由指定字符串数组的元素分隔)。参数指定是否返回空数组元素。 RemoveEmptyEntries表示要省略返回的数组中的空数组元素
string[] objPaht = path.Split(new string[] { "Media/"},StringSplitOptions.RemoveEmptyEntries);
teach.datas[i].mediaName[j] = objPaht[1];//把路径赋值到配置表
}
}
}
}
}
}