EffectOfflineData

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using UnityEngine;

public class EffectOfflineData : OfflineData
{
public ParticleSystem[] m_Particle;
public TrailRenderer[] m_TrailRenderer;

public override void ResetProp()
{
base.ResetProp();
foreach (ParticleSystem particleSystem in m_Particle)
{
particleSystem.Clear();
particleSystem.Play();
}
foreach (TrailRenderer trail in m_TrailRenderer)
{
trail.Clear();
}
}
public override void BindData()
{
base.BindData();
m_Particle = gameObject.GetComponentsInChildren<ParticleSystem>(true);
m_TrailRenderer = gameObject.GetComponentsInChildren<TrailRenderer>(true);
}
}

添加编辑器方法

OfflineDataEditor加入方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using UnityEditor;
using UnityEngine;

public class OfflineDataEditor
{
//...
[MenuItem("Assets/离线数据/生成特效离线数据")]
public static void AssetCreateEffectOfflineData()
{
GameObject[] objects = Selection.gameObjects;
for (int i = 0; i < objects.Length; i++)
{
EditorUtility.DisplayProgressBar("添加特效离线数据", "正在修改:" + objects[i] + "……", 1.0f / objects.Length * i);
CreateEffectOfflineData(objects[i]);
}
EditorUtility.ClearProgressBar();
}
[MenuItem("离线数据/生成所有特效prefab离线数据")]
public static void AllCreateEffectData()
{
string[] allStr = AssetDatabase.FindAssets("t:Prefab", new string[] { "Assets/GameData/Prefabs/Effect" });
for (int i = 0; i < allStr.Length; i++)
{
string prefabPath = AssetDatabase.GUIDToAssetPath(allStr[i]);
EditorUtility.DisplayProgressBar("添加特效离线数据", "正在扫描路径:" + prefabPath + "……", 1.0f / allStr.Length * i);
GameObject obj = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
if (obj == null)
{
continue;
}
CreateEffectOfflineData(obj);
}
Debug.Log("特效离线数据全部生成完毕!");
EditorUtility.ClearProgressBar();
}

//...

public static void CreateEffectOfflineData(GameObject obj)
{
EffectOfflineData effectData = obj.GetComponent<EffectOfflineData>();
if (effectData == null)
{
effectData = obj.AddComponent<EffectOfflineData>();
}
effectData.BindData();
EditorUtility.SetDirty(obj);
Debug.Log("修改了" + obj.name + " 特效prefab");
Resources.UnloadUnusedAssets();
AssetDatabase.Refresh();
}
}