【载具】修改战斗内炮台创建机制

main
刘涛 2024-09-26 12:24:30 +08:00
parent 6b9fc390c1
commit 7daddb5ba3
14 changed files with 101 additions and 393 deletions

View File

@ -420,6 +420,14 @@ MonoBehaviour:
FilterRuleName: CollectPrefab
AssetTags:
UserData:
- CollectPath: Assets/Art/Character/Prefabs/BatteryNew
CollectorGUID: b511bb1813f33824387c1c6efac75e47
CollectorType: 0
AddressRuleName: AddressByFileName
PackRuleName: PackDirectory
FilterRuleName: CollectAll
AssetTags:
UserData:
- GroupName: Emoji
GroupDesc:
AssetTags:

View File

@ -93,11 +93,13 @@ namespace Gameplay.Buff
{
case EGameUnitType.Character:
if (sender is Character character)
ViewWeapon.ShowHitEffect(beHitter, isCritical, character.weapon.rawConfig, sender.Node.GameObject.transform);
ViewWeapon.ShowHitEffect(beHitter, isCritical, character.weapon.rawConfig.CriticalHitEffectId,
character.weapon.rawConfig.HitEffectId, sender.Node.GameObject.transform);
break;
case EGameUnitType.Vehicle:
if (sender is NormalVehicle normalVehicle)
ViewWeapon.ShowHitEffect(beHitter, isCritical, normalVehicle.battery.rawWeaponConfig, sender.Node.GameObject.transform);
ViewWeapon.ShowHitEffect(beHitter, isCritical, normalVehicle.battery.rawConfig.CriticalHitEffectId,
normalVehicle.battery.rawConfig.HitEffectId, sender.Node.GameObject.transform);
break;
default:
DebugUtil.LogError("暂未处理的GameUnit类型:{0}", sender.gameunitType);

View File

@ -1,4 +1,5 @@
using Cysharp.Threading.Tasks;
using System.Linq;
using Cysharp.Threading.Tasks;
using Gameplay.Character;
using Gameplay.Performance;
using Gameplay.Unit;
@ -15,6 +16,8 @@ namespace Gameplay.Vehicle
public readonly VehicleRuntimeData runtimeData;
public VehicleAnim vAnim;
public BaseBattery battery;
public BaseVehicle(uint id, VehicleConfigData configData,
int troopId) : base(id, troopId, EGameUnitType.Vehicle)
@ -46,6 +49,13 @@ namespace Gameplay.Vehicle
go.transform.ResetLocals();
Node.GameObject.SetLayerEx(Node.GameObject.layer);
// 找到炮台挂点
var allTrans = go.GetComponentsInChildren<Transform>();
var pointName = "Battery_point01";
var fireTrans = allTrans.First(t => t.name == pointName);
battery = new BaseBattery(this, fireTrans);
await battery.CreateView();
// 绑定动画数据
vAnim = new VehicleAnim(this);

View File

@ -1,7 +1,12 @@
using System;
using System.Linq;
using cfg.FightCfg;
using Cysharp.Threading.Tasks;
using Framework;
using Gameplay.Unit;
using Gameplay.Vehicle.Impl;
using LTGame;
using PhxhSDK;
namespace Gameplay.Vehicle
{
@ -32,7 +37,7 @@ namespace Gameplay.Vehicle
}
}
public readonly cfg.WeaponCfg.DataWeapon rawWeaponConfig;
public DataBattery rawConfig;
public int remainBulletCount;
@ -45,12 +50,41 @@ namespace Gameplay.Vehicle
/// </summary>
public Animator rawAnim;
public BaseBattery(NormalVehicle owner)
public Transform parent;
public Transform rotateTrans;
public BaseBattery(BaseVehicle owner, Transform parent)
{
this.owner = owner;
this.parent = parent;
this.owner = owner as NormalVehicle;
if (this.owner == null)
{
throw new Exception("炮台必须挂载在NormalVehicle上");
}
remainShootTime = 0f;
remainBulletCount = this.owner.fightData.maxBulletCount;
rawWeaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(owner.configData.weaponId);
rawConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(owner.configData.weaponId);
}
public async UniTask CreateView()
{
var batteryPath = rawConfig.ModelPath;
GameUnitManager.instance.RecordLoadPath(batteryPath);
var sampleObj = await AssetManager.Instance.LoadAssetAsync<GameObject>(batteryPath);
if (sampleObj == null)
{
DebugUtil.LogError("加载炮台失败: {0}", batteryPath);
return;
}
rootObj = Object.Instantiate(sampleObj, parent);
rootObj.transform.ResetLocals();
var allTrans = rootObj.GetComponentsInChildren<Transform>();
rawAnim = rootObj.GetComponentInChildren<Animator>();
rotateTrans = rootObj.transform;
_fireTrans = allTrans.First(t => t.name == "Fire");
}
private void _InitFsm()
@ -64,53 +98,26 @@ namespace Gameplay.Vehicle
_fsm.ChangeState(EBatteryState.Idle);
}
private void _BindView()
{
var ownerObj = owner.Node.GameObject;
var collector = new ComponentCollector(ownerObj);
var skeleton = new Skeleton(collector.Transforms, ownerObj.transform);
var parentTrans = skeleton.GetBone("Battery_point01");
if (parentTrans != null && parentTrans.childCount > 0)
{
var child = parentTrans.GetChild(0);
if (child != null && child.childCount > 0)
{
rootObj = child.GetChild(0)?.gameObject;
}
}
if (rootObj == null)
{
DebugUtil.LogError("{0}._BindView, cannot get rootObj, owner id = {1}", GetType(), owner?.configData?.configId);
}
_fireTrans = skeleton.GetBone("Fire");
rawAnim = parentTrans.GetComponentInChildren<Animator>();
}
public void Init()
{
_BindView();
_InitFsm();
}
public bool RotateTower(GameUnit targetEnemy, float dt)
{
if (rootObj == null)
if (rotateTrans == null)
{
return false;
}
var turnSpeed = owner.configData.batteryTurnSpeed;
var turnSpeed = rawConfig.TurnSpeed;
var turnDt = turnSpeed * dt;
var isMatchAngle = false;
if (targetEnemy == null || targetEnemy.isDisposed)
{
// 炮台回正
var localYaw = rootObj.transform.localEulerAngles.y;
var localYaw = rotateTrans.localEulerAngles.z;
var newYaw = Mathf.MoveTowardsAngle(localYaw, 0, turnDt);
rootObj.transform.localEulerAngles = new Vector3(0, newYaw, 0);
rotateTrans.localEulerAngles = new Vector3(0, 0, newYaw);
}
else
{
@ -119,18 +126,19 @@ namespace Gameplay.Vehicle
var selfPos = rootObj.transform.position;
var toTarget = targetPos - selfPos;
toTarget.y = 0;
var targetYaw = Vector3.SignedAngle(Vector3.forward, toTarget, Vector3.up);
var globalYaw = rootObj.transform.eulerAngles.y;
var deltaAngle = Mathf.Abs(Mathf.DeltaAngle(globalYaw, targetYaw));
var ownerForward = owner.transform.forward;
var targetYaw = Vector3.SignedAngle(ownerForward, toTarget, Vector3.up);
var nowYaw = rotateTrans.localEulerAngles.z;
var deltaAngle = Mathf.Abs(Mathf.DeltaAngle(nowYaw, targetYaw));
if (deltaAngle < turnDt)
{
rootObj.transform.eulerAngles = new Vector3(0, targetYaw, 0);
rotateTrans.localEulerAngles = new Vector3(0, 0, targetYaw);
isMatchAngle = true;
}
else
{
var newYaw = Mathf.MoveTowardsAngle(globalYaw, targetYaw, turnDt);
rootObj.transform.eulerAngles = new Vector3(0, newYaw, 0);
var newYaw = Mathf.MoveTowardsAngle(nowYaw, targetYaw, turnDt);
rotateTrans.localEulerAngles = new Vector3(0, 0, newYaw);
}
}
return isMatchAngle;

View File

@ -26,7 +26,10 @@ namespace Gameplay.Vehicle
owner.remainShootTime = owner.owner.fightData.shootCd;
_shootTime = owner.owner.fightData.firstShootTime;
owner.rawAnim.Play("attack", 0, 0);
if (owner.rawAnim != null)
{
owner.rawAnim.Play("attack", 0, 0);
}
}
protected override void _OnRunning()
@ -68,7 +71,7 @@ namespace Gameplay.Vehicle
private void _PlayFireAudio()
{
var weaponConfig = owner.rawWeaponConfig;
var weaponConfig = owner.rawConfig;
var fireAudioIds = weaponConfig.FireAudioId;
if (fireAudioIds.Count <= 0) return;
var fireAudioId = fireAudioIds[Random.Range(0, fireAudioIds.Count)];
@ -77,7 +80,7 @@ namespace Gameplay.Vehicle
private void _ShowFireEffects(GameUnit targetEnemy)
{
var rawWeaponConfig = owner.rawWeaponConfig;
var rawWeaponConfig = owner.rawConfig;
var rootObj = owner.rootObj;
var fireTrans = owner.fireTrans;
var fireEffectId = rawWeaponConfig.FireEffectId;
@ -108,7 +111,7 @@ namespace Gameplay.Vehicle
Transform end,
float flySpeed)
{
var rawWeaponConfig = owner.rawWeaponConfig;
var rawWeaponConfig = owner.rawConfig;
// line.effect.transform.LookAt(end, Vector3.up);
var endPos = end.position;
var startPos = start.position;

View File

@ -28,8 +28,6 @@ namespace Gameplay.Vehicle.Data
public int standLevel;
public int crossLevel;
public float batteryTurnSpeed;
public float shootCd;
public int maxBulletCount;
@ -96,7 +94,6 @@ namespace Gameplay.Vehicle.Data
attackDistance = rawConfig.AttackDistance;
batteryTurnSpeed = rawConfig.BatteryTurnSpeed;
shootCd = 1f / rawConfig.FireRate;
maxBulletCount = rawConfig.BulletCount;
@ -183,7 +180,6 @@ namespace Gameplay.Vehicle.Data
attackDistance = rawConfig.Cfg.AttackDistance;
batteryTurnSpeed = rawConfig.Cfg.BatteryTurnSpeed;
shootCd = 1f / rawConfig.Cfg.FireRate;
maxBulletCount = rawConfig.Cfg.BulletCount;

View File

@ -22,7 +22,6 @@ namespace Gameplay.Vehicle.Impl
public NStateMachine<BaseVehicleState> fsm => _fsm;
public BaseBattery battery;
public readonly List<GameUnit> containsUnits = new List<GameUnit>();
@ -51,7 +50,6 @@ namespace Gameplay.Vehicle.Impl
{
_InitProps();
battery = new BaseBattery(this);
battery.Init();
_InitFsm();

View File

@ -156,10 +156,11 @@ namespace Gameplay.Weapon
public static void ShowHitEffect(GameUnit enemy,
bool isCritical,
DataWeapon rawConfig,
int criticalHitEffectId,
int hitEffectId,
Transform senderTrans)
{
var effectId = isCritical ? rawConfig.CriticalHitEffectId : rawConfig.HitEffectId;
var effectId = isCritical ? criticalHitEffectId : hitEffectId;
if (effectId <= 0)
return;
var hitPoints = GetPoints(enemy);

View File

@ -20,6 +20,7 @@ public sealed partial class DataBattery : Bright.Config.BeanBase
{
{ if(!_json["ID"].IsNumber) { throw new SerializationException(); } ID = _json["ID"]; }
{ if(!_json["NameRead"].IsString) { throw new SerializationException(); } NameRead = _json["NameRead"]; }
{ if(!_json["ModelPath"].IsString) { throw new SerializationException(); } ModelPath = _json["ModelPath"]; }
{ if(!_json["TurnSpeed"].IsNumber) { throw new SerializationException(); } TurnSpeed = _json["TurnSpeed"]; }
{ if(!_json["BulletFlySpeed"].IsNumber) { throw new SerializationException(); } BulletFlySpeed = _json["BulletFlySpeed"]; }
{ var __json0 = _json["FireAudioId"]; if(!__json0.IsArray) { throw new SerializationException(); } FireAudioId = new System.Collections.Generic.List<string>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { string __v0; { if(!__e0.IsString) { throw new SerializationException(); } __v0 = __e0; } FireAudioId.Add(__v0); } }
@ -30,10 +31,11 @@ public sealed partial class DataBattery : Bright.Config.BeanBase
PostInit();
}
public DataBattery(int ID, string NameRead, float TurnSpeed, float BulletFlySpeed, System.Collections.Generic.List<string> FireAudioId, int FireEffectId, int HitEffectId, int CriticalHitEffectId, int FlyEffectId )
public DataBattery(int ID, string NameRead, string ModelPath, float TurnSpeed, float BulletFlySpeed, System.Collections.Generic.List<string> FireAudioId, int FireEffectId, int HitEffectId, int CriticalHitEffectId, int FlyEffectId )
{
this.ID = ID;
this.NameRead = NameRead;
this.ModelPath = ModelPath;
this.TurnSpeed = TurnSpeed;
this.BulletFlySpeed = BulletFlySpeed;
this.FireAudioId = FireAudioId;
@ -58,6 +60,10 @@ public sealed partial class DataBattery : Bright.Config.BeanBase
/// </summary>
public string NameRead { get; private set; }
/// <summary>
/// 武器模型路径
/// </summary>
public string ModelPath { get; private set; }
/// <summary>
/// 转动角速度
/// </summary>
public float TurnSpeed { get; private set; }
@ -103,6 +109,7 @@ public sealed partial class DataBattery : Bright.Config.BeanBase
return "{ "
+ "ID:" + ID + ","
+ "NameRead:" + NameRead + ","
+ "ModelPath:" + ModelPath + ","
+ "TurnSpeed:" + TurnSpeed + ","
+ "BulletFlySpeed:" + BulletFlySpeed + ","
+ "FireAudioId:" + Bright.Common.StringUtil.CollectionToString(FireAudioId) + ","

View File

@ -39,7 +39,6 @@ public sealed partial class DataEnemyVehicle : Bright.Config.BeanBase
{ if(!_json["ReloadTime"].IsNumber) { throw new SerializationException(); } ReloadTime = _json["ReloadTime"]; }
{ if(!_json["FireRate"].IsNumber) { throw new SerializationException(); } FireRate = _json["FireRate"]; }
{ if(!_json["MoveSpeed"].IsNumber) { throw new SerializationException(); } MoveSpeed = _json["MoveSpeed"]; }
{ if(!_json["BatteryTurnSpeed"].IsNumber) { throw new SerializationException(); } BatteryTurnSpeed = _json["BatteryTurnSpeed"]; }
{ if(!_json["TurnSpeed"].IsNumber) { throw new SerializationException(); } TurnSpeed = _json["TurnSpeed"]; }
{ if(!_json["AttackDistance"].IsNumber) { throw new SerializationException(); } AttackDistance = _json["AttackDistance"]; }
{ if(!_json["AttackIgnoreBlock"].IsBoolean) { throw new SerializationException(); } AttackIgnoreBlock = _json["AttackIgnoreBlock"]; }
@ -55,7 +54,7 @@ public sealed partial class DataEnemyVehicle : Bright.Config.BeanBase
PostInit();
}
public DataEnemyVehicle(int ID, int VehicleType, string Name, string PrefabPath, int DeadEffectId, int TireMarkId, int StandCrossLevel, int MoveCrossLevel, int SeatCount, int Damage, int Defense, int HP, int BulletCount, float AttackShiledScale, float AttackHpScale, float FirstShootTime, int PerShootCount, int WeaponId, float ReloadTime, int FireRate, float MoveSpeed, float BatteryTurnSpeed, float TurnSpeed, int AttackDistance, bool AttackIgnoreBlock, int MoraleDamage, float ScaleForHuman, float ScaleForVehicle, float CriticalRate, float CriticalScale, int TerrainPlain, int TerrainSnow, int TerrainMountain, int TerrainForest )
public DataEnemyVehicle(int ID, int VehicleType, string Name, string PrefabPath, int DeadEffectId, int TireMarkId, int StandCrossLevel, int MoveCrossLevel, int SeatCount, int Damage, int Defense, int HP, int BulletCount, float AttackShiledScale, float AttackHpScale, float FirstShootTime, int PerShootCount, int WeaponId, float ReloadTime, int FireRate, float MoveSpeed, float TurnSpeed, int AttackDistance, bool AttackIgnoreBlock, int MoraleDamage, float ScaleForHuman, float ScaleForVehicle, float CriticalRate, float CriticalScale, int TerrainPlain, int TerrainSnow, int TerrainMountain, int TerrainForest )
{
this.ID = ID;
this.VehicleType = VehicleType;
@ -78,7 +77,6 @@ public sealed partial class DataEnemyVehicle : Bright.Config.BeanBase
this.ReloadTime = ReloadTime;
this.FireRate = FireRate;
this.MoveSpeed = MoveSpeed;
this.BatteryTurnSpeed = BatteryTurnSpeed;
this.TurnSpeed = TurnSpeed;
this.AttackDistance = AttackDistance;
this.AttackIgnoreBlock = AttackIgnoreBlock;
@ -184,10 +182,6 @@ public sealed partial class DataEnemyVehicle : Bright.Config.BeanBase
/// </summary>
public float MoveSpeed { get; private set; }
/// <summary>
/// 炮台转身速度
/// </summary>
public float BatteryTurnSpeed { get; private set; }
/// <summary>
/// 转身速度
/// </summary>
public float TurnSpeed { get; private set; }
@ -272,7 +266,6 @@ public sealed partial class DataEnemyVehicle : Bright.Config.BeanBase
+ "ReloadTime:" + ReloadTime + ","
+ "FireRate:" + FireRate + ","
+ "MoveSpeed:" + MoveSpeed + ","
+ "BatteryTurnSpeed:" + BatteryTurnSpeed + ","
+ "TurnSpeed:" + TurnSpeed + ","
+ "AttackDistance:" + AttackDistance + ","
+ "AttackIgnoreBlock:" + AttackIgnoreBlock + ","

View File

@ -40,7 +40,6 @@ public sealed partial class DataVehicle : Bright.Config.BeanBase
{ if(!_json["ReloadTime"].IsNumber) { throw new SerializationException(); } ReloadTime = _json["ReloadTime"]; }
{ if(!_json["FireRate"].IsNumber) { throw new SerializationException(); } FireRate = _json["FireRate"]; }
{ if(!_json["MoveSpeed"].IsNumber) { throw new SerializationException(); } MoveSpeed = _json["MoveSpeed"]; }
{ if(!_json["BatteryTurnSpeed"].IsNumber) { throw new SerializationException(); } BatteryTurnSpeed = _json["BatteryTurnSpeed"]; }
{ if(!_json["TurnSpeed"].IsNumber) { throw new SerializationException(); } TurnSpeed = _json["TurnSpeed"]; }
{ if(!_json["AttackDistance"].IsNumber) { throw new SerializationException(); } AttackDistance = _json["AttackDistance"]; }
{ if(!_json["AttackIgnoreBlock"].IsBoolean) { throw new SerializationException(); } AttackIgnoreBlock = _json["AttackIgnoreBlock"]; }
@ -57,7 +56,7 @@ public sealed partial class DataVehicle : Bright.Config.BeanBase
PostInit();
}
public DataVehicle(int ID, int VehicleType, string Name, string UIHeadPath, string PrefabPath, int DeadEffectId, int TireMarkId, int StandCrossLevel, int MoveCrossLevel, int SeatCount, int Damage, int Defense, int HP, int BulletCount, float AttackShiledScale, float AttackHpScale, float FirstShootTime, int PerShootCount, int WeaponId, float ReloadTime, int FireRate, float MoveSpeed, float BatteryTurnSpeed, float TurnSpeed, int AttackDistance, bool AttackIgnoreBlock, int MoraleDamage, float ScaleForHuman, float ScaleForVehicle, float CriticalRate, float CriticalScale, int TerrainPlain, int TerrainSnow, int TerrainMountain, int TerrainForest, string Icon )
public DataVehicle(int ID, int VehicleType, string Name, string UIHeadPath, string PrefabPath, int DeadEffectId, int TireMarkId, int StandCrossLevel, int MoveCrossLevel, int SeatCount, int Damage, int Defense, int HP, int BulletCount, float AttackShiledScale, float AttackHpScale, float FirstShootTime, int PerShootCount, int WeaponId, float ReloadTime, int FireRate, float MoveSpeed, float TurnSpeed, int AttackDistance, bool AttackIgnoreBlock, int MoraleDamage, float ScaleForHuman, float ScaleForVehicle, float CriticalRate, float CriticalScale, int TerrainPlain, int TerrainSnow, int TerrainMountain, int TerrainForest, string Icon )
{
this.ID = ID;
this.VehicleType = VehicleType;
@ -81,7 +80,6 @@ public sealed partial class DataVehicle : Bright.Config.BeanBase
this.ReloadTime = ReloadTime;
this.FireRate = FireRate;
this.MoveSpeed = MoveSpeed;
this.BatteryTurnSpeed = BatteryTurnSpeed;
this.TurnSpeed = TurnSpeed;
this.AttackDistance = AttackDistance;
this.AttackIgnoreBlock = AttackIgnoreBlock;
@ -192,10 +190,6 @@ public sealed partial class DataVehicle : Bright.Config.BeanBase
/// </summary>
public float MoveSpeed { get; private set; }
/// <summary>
/// 炮台转身速度
/// </summary>
public float BatteryTurnSpeed { get; private set; }
/// <summary>
/// 转身速度
/// </summary>
public float TurnSpeed { get; private set; }
@ -285,7 +279,6 @@ public sealed partial class DataVehicle : Bright.Config.BeanBase
+ "ReloadTime:" + ReloadTime + ","
+ "FireRate:" + FireRate + ","
+ "MoveSpeed:" + MoveSpeed + ","
+ "BatteryTurnSpeed:" + BatteryTurnSpeed + ","
+ "TurnSpeed:" + TurnSpeed + ","
+ "AttackDistance:" + AttackDistance + ","
+ "AttackIgnoreBlock:" + AttackIgnoreBlock + ","

View File

@ -2,6 +2,7 @@
{
"ID": 1,
"NameRead": "炮台1",
"ModelPath": "Assets/Art/Character/Prefabs/BatteryNew/P_R00001_01.prefab",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
@ -15,6 +16,7 @@
{
"ID": 2,
"NameRead": "炮台2",
"ModelPath": "Assets/Art/Character/Prefabs/BatteryNew/P_R00002_01.prefab",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
@ -28,6 +30,7 @@
{
"ID": 3,
"NameRead": "炮台3",
"ModelPath": "Assets/Art/Character/Prefabs/BatteryNew/P_R00003_01.prefab",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
@ -41,6 +44,7 @@
{
"ID": 4,
"NameRead": "炮台4",
"ModelPath": "Assets/Art/Character/Prefabs/BatteryNew/P_R00004_01.prefab",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
@ -54,6 +58,7 @@
{
"ID": 5,
"NameRead": "炮台5",
"ModelPath": "Assets/Art/Character/Prefabs/BatteryNew/P_R00005_01.prefab",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
@ -67,6 +72,7 @@
{
"ID": 6,
"NameRead": "炮台6",
"ModelPath": "Assets/Art/Character/Prefabs/BatteryNew/P_R00006_01.prefab",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
@ -80,6 +86,7 @@
{
"ID": 7,
"NameRead": "炮台7",
"ModelPath": "Assets/Art/Character/Prefabs/BatteryNew/P_R00007_01.prefab",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
@ -93,6 +100,7 @@
{
"ID": 8,
"NameRead": "炮台8",
"ModelPath": "Assets/Art/Character/Prefabs/BatteryNew/P_R00008_01.prefab",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
@ -106,6 +114,7 @@
{
"ID": 9,
"NameRead": "炮台9",
"ModelPath": "Assets/Art/Character/Prefabs/BatteryNew/P_R00009_01.prefab",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
@ -115,304 +124,5 @@
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 10,
"NameRead": "炮台10",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_5"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 11,
"NameRead": "炮台11",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_4"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 12,
"NameRead": "炮台12",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_5"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 13,
"NameRead": "炮台13",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_4"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 14,
"NameRead": "炮台14",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_5"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 15,
"NameRead": "炮台15",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_4"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 16,
"NameRead": "炮台16",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_5"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 17,
"NameRead": "炮台17",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_4"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 18,
"NameRead": "炮台18",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_5"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 19,
"NameRead": "炮台19",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_4"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 20,
"NameRead": "炮台20",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_5"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 21,
"NameRead": "炮台21",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_4"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 22,
"NameRead": "炮台22",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_5"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 23,
"NameRead": "炮台23",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_4"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 24,
"NameRead": "炮台24",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_5"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 25,
"NameRead": "炮台25",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_4"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 26,
"NameRead": "炮台26",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_5"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 27,
"NameRead": "炮台27",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_4"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 28,
"NameRead": "炮台28",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_5"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 29,
"NameRead": "炮台29",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_4"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 30,
"NameRead": "炮台30",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_5"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 31,
"NameRead": "炮台31",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_4"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
},
{
"ID": 32,
"NameRead": "炮台32",
"TurnSpeed": 400,
"BulletFlySpeed": 120,
"FireAudioId": [
"Sound_Shoot_5"
],
"FireEffectId": 4,
"HitEffectId": 10,
"CriticalHitEffectId": 7,
"FlyEffectId": 15
}
]

View File

@ -21,7 +21,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 2,
"BatteryTurnSpeed": 90,
"TurnSpeed": 400,
"AttackDistance": 4,
"AttackIgnoreBlock": false,
@ -57,7 +56,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 2,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 4,
"AttackIgnoreBlock": false,
@ -93,7 +91,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 1.2,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 6,
"AttackIgnoreBlock": false,
@ -129,7 +126,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 2,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 4,
"AttackIgnoreBlock": false,
@ -165,7 +161,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 1.2,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 6,
"AttackIgnoreBlock": false,
@ -201,7 +196,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 2,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 4,
"AttackIgnoreBlock": false,
@ -237,7 +231,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 2,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 4,
"AttackIgnoreBlock": false,
@ -273,7 +266,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 3,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 3,
"AttackIgnoreBlock": false,
@ -309,7 +301,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 3,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 3,
"AttackIgnoreBlock": false,
@ -345,7 +336,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 3,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 3,
"AttackIgnoreBlock": false,
@ -381,7 +371,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 3,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 3,
"AttackIgnoreBlock": false,
@ -417,7 +406,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 3,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 3,
"AttackIgnoreBlock": false,

View File

@ -22,7 +22,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 2,
"BatteryTurnSpeed": 90,
"TurnSpeed": 400,
"AttackDistance": 4,
"AttackIgnoreBlock": false,
@ -60,7 +59,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 1.2,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 6,
"AttackIgnoreBlock": false,
@ -98,7 +96,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 2,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 4,
"AttackIgnoreBlock": false,
@ -136,7 +133,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 2,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 4,
"AttackIgnoreBlock": false,
@ -174,7 +170,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 3,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 3,
"AttackIgnoreBlock": false,
@ -212,7 +207,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 3,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 3,
"AttackIgnoreBlock": false,
@ -250,7 +244,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 3,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 3,
"AttackIgnoreBlock": false,
@ -288,7 +281,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 3,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 3,
"AttackIgnoreBlock": false,
@ -326,7 +318,6 @@
"ReloadTime": 4,
"FireRate": 1,
"MoveSpeed": 3,
"BatteryTurnSpeed": 400,
"TurnSpeed": 400,
"AttackDistance": 3,
"AttackIgnoreBlock": false,