日志2025.2.13
1.增加了敌人的随机武器
//设置敌人的随机武器
private void SetUpRandomWeapon()
{
//先全设置为false
foreach (EnemyWeaponModel weaponModel in weaponModels)
{
weaponModel.gameObject.SetActive(false);
}
//根据武器类型而修正过后的武器列表
List<EnemyWeaponModel> filteredWeaponModels = new List<EnemyWeaponModel>();
//将类型相同的武器添加到武器列表
foreach (EnemyWeaponModel weaponModel in weaponModels)
{
if (weaponModel.weaponType_Melee == weaponType)
{
filteredWeaponModels.Add(weaponModel);
}
}
int random = Random.Range(0, filteredWeaponModels.Count);
currentWeaponModel = filteredWeaponModels[random].gameObject;
currentWeaponModel.SetActive(true);
OverrideAnimatorController();
}
public void ActiveWeaponModel(bool active)
{
currentWeaponModel.SetActive(active);
}
public void SetUpEnemyWeaponType(EnemyWeaponType_Melee type = EnemyWeaponType_Melee.OneHand)
{
weaponType = type;
}
//初始化一些特殊的敌人
private void InitializeSpeciality()
{
//设置武器类型
if(meleeType == Melee_EnemyType.AxeThrow)
{
visuals.SetUpEnemyWeaponType(EnemyWeaponType_Melee.Throw);
}
else if(meleeType == Melee_EnemyType.Dodge)
{
visuals.SetUpEnemyWeaponType(EnemyWeaponType_Melee.Unarmed);
}
else
{
visuals.SetUpEnemyWeaponType();
}
if(meleeType == Melee_EnemyType.Shield)
{
animator.SetFloat("ChaseIndex", 1);
shieldTransform.gameObject.SetActive(true);
}
}
2.添加了敌人的重载动画机
//更换对应的动画控制器
private void OverrideAnimatorController()
{
AnimatorOverrideController overrideController = currentWeaponModel.GetComponent<EnemyWeaponModel>().overrideController;
if (overrideController != null)
{
GetComponentInChildren<Animator>().runtimeAnimatorController = overrideController;
}
}
3.增加了敌人的武器拖尾效果
public void ActiveWeaponTrail(bool active)
{
currentWeaponModel.GetComponent<EnemyWeaponModel>().ActiveTrailEffect(active);
}
public class EnemyWeaponModel : MonoBehaviour
{
public EnemyWeaponType_Melee weaponType_Melee;
public AnimatorOverrideController overrideController;
public GameObject[] weaponTrail;
public Enemy_Melee_WeaponData weaponData;
private void Awake()
{
ActiveTrailEffect(false);
}
public void ActiveTrailEffect(bool active)
{
foreach (GameObject weapon in weaponTrail)
{
weapon.SetActive(active);
}
}
}
4.增加了敌人武器数据的存储结构
[CreateAssetMenu(fileName = "Enemy_Melee_WeaponData", menuName = "Scriptable Objects/Enemy_Melee_WeaponData")]
public class Enemy_Melee_WeaponData : ScriptableObject
{
public List<Melee_AttackData> attackData;
}
//设置当前武器的攻击数据
private void SetUpAttackData()
{
EnemyWeaponModel currentWeapon = visuals.currentWeaponModel.GetComponent<EnemyWeaponModel>();
if (currentWeapon.weaponData != null)
{
attackList = new List<Melee_AttackData>(currentWeapon.weaponData.attackData);
}
}