目录为:Assets/Scripts/Effect/目录下
AbsorbEffect.cs
这个类主要是吸收特效。
using System;
using System.Collections.Generic;
using UnityEngine;
//吸收特效
public class AbsorbEffect: MonoBehaviour
{
public GameObject objStart;
public GameObject objEnd;
public Iplayer effectOwner;
private static float totalTime = 3.0f;
private float timeCounter = 0.0f;
//静态方法
//Iplayer:在GameEntity部分定义,现在先不管
public static AbsorbEffect createAbsorbEffect(Iplayer owner, GameObject start, GameObject end)
{
ResourceUnit objUnit = ResourcesManager.Instance.loadImmediate ("effect/other/soul_absorb", ResourceType.PREFAB);
GameObject obj = objUnit.Asset as GameObject;
if (obj == null)
{
Debug.LogError("Res Not Found:" + "effect/other/soul_absorb");
return null;
}
GameObject rootNode = GameObject.Instantiate (obj) as GameObject;
AbsorbEffect effect = rootNode.GetComponent<AbsorbEffect> ();
if (effect != null)
{
effect.objStart = start;
effect.objEnd = end;
if (start != null)
{
effect.transform.position = start.transform.position;
}
effect.timeCounter = totalTime;
effect.effectOwner = owner;
}
owner.AbsorbProgressEffect = rootNode;
return effect;
}
void Update()
{
if (objStart == null || objEnd == null)
{
DestroyImmediate (gameObject);
return;
}
float distance = Vector3.Distance (transform.position, objEnd.transform.position);
float speed = distance / timeCounter;
timeCounter -= Time.deltaTime;
Vector3 dir = objEnd.transform.position - transform.position;
dir.Normalize ();
transform.position += dir * speed * Time.deltaTime;
if (timeCounter <= 0)
{
DestroyImmediate (gameObject);
}
}
}