/// <summary>
/// 粒子发射
/// </summary>
/// <param name="prefabEffect">要发射的粒子预制物</param>
/// <param name="startPos">起始位置</param>
/// <param name="Target">发射目标</param>
/// <param name="moveSpeed">0.1至10</param>
public void FxSend(GameObject prefabEffect, Vector3 startPos, GameObject Target, float moveSpeed = 1f)
{
//Init
Camera cam = Camera.main;
if (cam.GetComponent<RFX1_DistortionAndBloom>() == null)
{
cam.gameObject.AddComponent<RFX1_DistortionAndBloom>();
}
if (cam.allowHDR == false) cam.allowHDR = true;
var currentInstance = Instantiate(prefabEffect) as GameObject;
currentInstance.transform.position = startPos;
//设置碰撞层
var rayCastCollision = currentInstance.GetComponentInChildren<RFX1_EffectSettingProjectile>(true);
if (rayCastCollision != null)
{
rayCastCollision.CollidesWith = LayerMask.GetMask(Consts.Layer.Monster);
}
var animator = currentInstance.GetComponent<RFX1_AnimatorEvents>();
if (animator != null)
{
animator.Speed = moveSpeed; //设置速度
//animator.Target = Target;
}
var targetScript2 = currentInstance.GetComponent<RFX1_Target>();
if (targetScript2 != null)
{
targetScript2.Target = Target;
}
var transformMotion = currentInstance.GetComponentInChildren<RFX1_TransformMotion>(true);
if (transformMotion != null)
{
transformMotion.Speed = moveSpeed;
transformMotion.Target = Target;
transformMotion.CollidesWith = LayerMask.GetMask(Consts.Layer.Monster);
transformMotion.CollisionEnter += (sender, info) =>
{
//碰到 碰撞器 事件
RFX1_TransformMotion.RFX1_CollisionInfo e = info;
if (IsAttackType(e.Hit.transform.gameObject.layer))
{
EventCenter.Sent_Attack_Event(this, GetEntryYhy(e.Hit.transform), null);
Debug.Log("prefabEffect CollisionEnter =" + e.Hit.transform.name);
//will print collided object name to the console.
GameObject.Destroy(currentInstance);
}
else
{
GameObject.Destroy(currentInstance);
}
};
}
}