void bulletProcess(SkillBullet n) { switch (n.target) { case SkillTarget.Target.Unit: { Bullet bt = mUnit.mgr.getUnit(0, UnitType.Bullet, n.id) as Bullet; bt.setParam(mUnit.pos, mUnit.dir, mUnit); bt.mOwner = mUnit.guid; bt.mHarm = n.harm; Vector3 projDir = n.locationDir(mUnit); projDir.y = 0; bt.play(projDir.normalized, mUnit.skill.targetGUID); break; } case SkillTarget.Target.Dir: { Bullet bt = mUnit.mgr.getUnit(0, UnitType.Bullet, n.id) as Bullet; bt.setParam(mUnit.pos, mUnit.dir, mUnit); bt.mOwner = mUnit.guid; bt.mHarm = n.harm; Vector3 projDir = n.locationDir(mUnit); projDir.y = 0; bt.play(projDir.normalized, mUnit.skill.targetGUID); break; } case SkillTarget.Target.Pos: { Bullet bt = mUnit.mgr.getUnit(0, UnitType.Bullet, n.id) as Bullet; bt.setParam(mUnit.pos, mUnit.dir, mUnit); bt.mOwner = mUnit.guid; bt.mHarm = n.harm; bt.play(n.locationPos(mUnit), mUnit.skill.targetGUID); break; } case SkillTarget.Target.Area: { Matrix4x4 mt = Matrix4x4.TRS(mUnit.pos, Quaternion.LookRotation(mUnit.dir), Vector3.one).inverse; List <Unit> units = mUnit.mgr.getUnitInArea(UnitType.Monster | UnitType.Player, n.area, mt); for (int i = 0; i < units.Count; ++i) { Bullet bt = mUnit.mgr.getUnit(0, UnitType.Bullet, n.id) as Bullet; bt.setParam(mUnit.pos, mUnit.dir, mUnit); bt.mOwner = mUnit.guid; bt.mHarm = n.harm; bt.play(units[i].pos, units[i].guid); } break; } } }