public void CreateYunYD()
{
GameToolsManager.Instance.effectType = EFFECTTYPE.YunYD;
CreateYunOrWu("Effect/yunwu-yd", Vector3.zero);
}
public void CreateYunZY()
{
GameToolsManager.Instance.effectType = EFFECTTYPE.YunZY;
CreateYunOrWu("Effect/yunwu-zy", Vector3.zero);
}
public void CreateWU()
{
GameToolsManager.Instance.effectType = EFFECTTYPE.Wu;
CreateYunOrWu("Effect/wu",Vector3.zero);
}
public GameObject CreateYunOrWu(string path,Vector3 vec)
{
GameObject parent;
parent = GameObject.Find("Scene/Effect");
effect = GameObject.Instantiate(Resources.Load(path)) as GameObject;
effect.SetActive(true);
effect.transform.SetParent(parent.transform);
effect.transform.localPosition = vec;
effect.name = effect.name.Replace("(Clone)",string.Empty);
return effect;
}
/// <summary>
/// 保存云和雾的数据
/// </summary>
public void SaveYunOrWu()
{
Transform child;
GameObject parent;
parent = GameObject.Find("Scene/Effect");
if (IsExistTxt())
{
ClearEffectData();
}
for (int i=0; i< parent.transform.childCount; i++)
{
child = parent.transform.GetChild(i);
EffectData effectData = new EffectData();
effectData.effectName = child.name;
effectData.vectorX = child.localPosition.x;
effectData.vectorY = child.localPosition.y;
effectData.vectorZ = child.localPosition.z;
CreateTextFile("EffectData", System.Convert.ToString(effectData.effectName));
CreateTextFile("EffectData", System.Convert.ToString(effectData.vectorX));
CreateTextFile("EffectData", System.Convert.ToString(effectData.vectorY));
CreateTextFile("EffectData", System.Convert.ToString(effectData.vectorZ));
}
ReadTextData("EffectData");
}
/// <summary>
/// 清空文本中的数据
/// </summary>
public void ClearEffectData()
{
ClearData("EffectData");
}
/// <summary>
/// txt文件是否存在
/// </summary>
/// <returns></returns>
public bool IsExistTxt()
{
string path = Application.dataPath + "/Effect/EffectData.txt";
if (!File.Exists(path))
{
return false;
}
return true;
}
/// <summary>
/// 创建文本文件,并写入文本数据
/// </summary>
/// <param name="fileName"></param>
/// <param name="strFileData"></param>
public void CreateTextFile(string fileName, string strFileData)
{
string strWriteFileData;
strWriteFileData = strFileData;
string path = Application.dataPath + "/Effect/" + fileName + ".txt";
if (!File.Exists(path))
{
StartCoroutine(CreatTxt(path));
}
StreamWriter writer;
writer = File.AppendText(path);
writer.Write(strWriteFileData + "_");
writer.Close();
}
IEnumerator CreatTxt(string path)
{
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);
yield return fs;
fs.Close();
}
/// <summary>
/// 读取文本数据
/// </summary>
public string ReadTextData(string fileName)
{
string data;
string path = Application.dataPath + "/Effect/" + fileName + ".txt";
if (!File.Exists(path))
{
return null;
}
StreamReader reader;
reader = File.OpenText(path);
data = reader.ReadToEnd();
if (data != null)
{
reader.Close();
Debug.Log(data);
return data;
}
reader.Close();
return data;
}
/// <summary>
/// 清空已保存的数据文件
/// </summary>
public void ClearData(string fileName)
{
string path = Application.dataPath + "/Effect/" + fileName + ".txt";
if (File.Exists(path))
{
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Write);
fs.SetLength(0);
fs.Close();
}
return;
}
/// <summary>
/// 删除已经加载好的云和雾
/// </summary>
public void DeleteYunOrWu()
{
GameObject parent;
parent = GameObject.Find("Scene/Effect");
for (int i = 0; i < parent.transform.childCount; i++)
{
Destroy(parent.transform.GetChild(i).gameObject);
}
}
/// <summary>
/// 特效数据
/// </summary>
public struct EffectData
{
public string effectName;
public double vectorX;
public double vectorY;
public double vectorZ;
}
Dictionary<int, List<float>> effectData;
Dictionary<int, string> effectNameDic;
/// <summary>
/// 初始化特效数据
/// </summary>
public void InitEffectData()
{
Vector3 vec;
string name;
effectData = GetEffectData();
Debug.Log("进来了吗");
if (effectData == null)
{
return;
}
for(int i = 0; i < effectNameDic.Count; i++)
{
Debug.Log("进来了吗?");
name = effectNameDic[i];
List <float> vecData = effectData[i];
Debug.Log(vecData[1]);
vec = new Vector3(vecData[0],vecData[1],vecData[2]);
StartCoroutine(CreateSaveEffect(name, vec));
}
}
/// <summary>
/// 生成特效
/// </summary>
/// <returns></returns>
IEnumerator CreateSaveEffect(string name,Vector3 vec)
{
string fullPath = "Effect/" + name;
yield return CreateYunOrWu(fullPath, vec);
}
/// <summary>
/// 获得特效数据
/// </summary>
public Dictionary<int, List<float>> GetEffectData()
{
bool changeList = false;
effectData = new Dictionary<int, List<float>>();
effectNameDic = new Dictionary<int, string>();
string effectName = null;
List<float> vectorData = new List<float>();
string data = ReadTextData("EffectData");
int count = 0;
if(data == null)
{
return null;
}
char delimiter = '_';
string[] stringData = data.Split(delimiter);
for (int i = 0; i < stringData.Length - 1; i++)
{
if (changeList)
{
vectorData = new List<float>();
changeList = false;
}
if (i % 4 == 0)
{
effectName = stringData[i];
}
if (i % 4 == 1)
{
double vectorX = System.Convert.ToDouble(stringData[i]);
vectorData.Add((float)vectorX);
}
if (i % 4 == 2)
{
double vectorY = System.Convert.ToDouble(stringData[i]);
vectorData.Add((float)vectorY);
}
if (i % 4 == 3)
{
double vectorZ = System.Convert.ToDouble(stringData[i]);
vectorData.Add((float)vectorZ);
effectData.Add(count, vectorData);
effectNameDic.Add(count, effectName);
vectorData = new List<float>();
count++;
Debug.Log(count+"计数");
}
}
//Debug.Log(effectData);
//Debug.Log(effectData[2][1]+ "effectData");
return effectData;
}
RaycastHit2D hit = new RaycastHit2D();
ParticleSystem par;
Vector3 mousePos;
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
GameDataManager.Instance.IsMoveCamera = false;
mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 mousePos2D = new Vector2(mousePos.x, mousePos.y);
hit = Physics2D.Raycast(mousePos2D, Vector2.zero);
}
if (Input.GetMouseButton(0)&&hit.transform!=null&&(hit.transform.name.Equals("wu")||hit.transform.name.Equals("yunwu-yd")||hit.transform.name.Equals("yunwu-zy")))
{
mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 mousePos2D = new Vector2(mousePos.x, mousePos.y);
//if (hit.transform != null && hit.transform.name.Equals("yunwu-yd") || hit.transform.name.Equals("yunwu-zy"))
//{
// par = hit.transform.GetComponent<ParticleSystem>();
// par.Pause();
//}
if (hit.transform.name.Equals("wu")){
hit.transform.position = mousePos2D;
}
}
if (Input.GetMouseButtonUp(0) && hit.transform != null && (hit.transform.name.Equals("wu") || hit.transform.name.Equals("yunwu-yd") || hit.transform.name.Equals("yunwu-zy")))
{
par = hit.transform.GetComponent<ParticleSystem>();
//Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
//Vector3 mousePos3D = new Vector3(mousePos.x, mousePos.y, 0);
Vector3 vec = new Vector3(mousePos.x, mousePos.y, 0);
if (hit.transform.name.Equals("yunwu-yd"))
{
//Vector3 vec = hit.transform.position;
par.Stop();
Destroy(hit.transform.gameObject);
StartCoroutine(CreateSaveEffect("yunwu-yd", vec));
}
if (hit.transform.name.Equals("yunwu-zy"))
{
//Vector3 vec = new Vector3(mousePos.x, mousePos.y, 0);
Destroy(hit.transform.gameObject);
StartCoroutine(CreateSaveEffect("yunwu-zy", vec));
}
hit.transform.localScale = Vector3.one;
GameDataManager.Instance.IsMoveCamera = true;
}
}