public class Bullet : SwarmItem
{
//可以自己实现一个属性方便调用 ,而不是用transforms
private Vector3 _velocity;
private Vector3 _originalScale;
//必须实现的初始化函数
public override void Initialize(SwarmItemManager swarmItemManager, int prefabIndex, bool debugEvents)
{
base.Initialize(swarmItemManager, prefabIndex, debugEvents);//这里可以写一些自己的初始化信息,注意这个初始化是随着swarmItemManager启动时启动的 只启动一次
_originalScale = _thisTransform.localScale;
}
/// 改变活动/不活动状态的 父对象时调用,用来初始化信息
///重要
{
//重新设置scale
_thisTransform.localScale = _originalScale;
}
//提供给ship调用的函数
public void Fire(Vector3 velocity)
{
_velocity = velocity;
}
public override void FrameUpdate()
{
Position += (_velocity * Time.deltaTime);
if (Position.sqrMagnitude >= Main.Instance.asteroidManager.FieldRadiusSquared)
{
// kill bullet if out of bounds
Kill();
}
//上面写完自己的调用后 调用检查是不是life time 结束的标志
base.FrameUpdate();
}
//检测碰撞 自己的函数
void OnTriggerEnter(Collider otherCollider)
{
Asteroid asteroid = (Asteroid)otherCollider.gameObject.GetComponent(typeof(Asteroid));
if (asteroid != null)
asteroid.Kill();
// kill the bullet
Kill();
}
}
、、、、、、粒子系统的设置 和上面的bullet很类似
public class Explosion : SwarmItem
{
private ParticleEmitter emitter; //引用到的粒子系统
public override void Initialize(SwarmItemManager swarmItemManager, int prefabIndex, bool debugEvents)
{
base.Initialize(swarmItemManager, prefabIndex, debugEvents);
// cache the emitter for later use
emitter = (ParticleEmitter)gameObject.GetComponent(typeof(ParticleEmitter));
emitter.emit = false;
}
//改变状态时调用 和上面有区别
protected override void OnStateChange()
{
switch (_state)
{
case STATE.Active:
// turn on the emitter if active
emitter.emit = true;
break;
case STATE.Inactive:
// clear the particles and turn off emitter if inactive
emitter.ClearParticles(); //清除
emitter.emit = false;
break;
}
}
}