Unity类银河战士恶魔城学习总结(P124 CharacterStats UI玩家的UI)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili

教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/

本章节实现了玩家属性栏,仓库,物品栏UI的制作

UI_StatSlot.cs

这个脚本是用来在Unity的UI上显示玩家属性(比如生命值或攻击力)的。

  1. 显示状态名称statName用来存储属性名称,比如"Health"。在编辑器中修改这个名字时,它会自动显示在对应的UI文本框里。
  2. 显示状态值statValueText是用来显示这个属性的数值(比如100生命值)。
  3. 初始化UIStart方法会在游戏开始时更新UI,确保显示玩家的正确状态。
  4. 动态更新UpdateStatValueUI方法可以随时调用,更新UI上显示的数值。它会通过PlayerManager找到玩家的属性,然后把这个值显示在UI上。
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;public class UI_StatSlot : MonoBehaviour
{[SerializeField] private string statName;[SerializeField] private StatType statType;[SerializeField] private TextMeshProUGUI statValueText;[SerializeField] private TextMeshProUGUI statNameText;private void OnValidate(){gameObject.name = "Stat - "+ statName;if(statNameText != null)statNameText.text = statName;}void Start(){UpdateStatValueUI();}public void UpdateStatValueUI(){PlayerStats playerStats = PlayerManager.instance.player.GetComponent<PlayerStats>();if(playerStats !=null){statValueText.text = playerStats.GetStat(statType).GetValue().ToString();}}
}

CharacterStats.cs

把状态类型移动到这个脚本

using System.Collections;
using UnityEngine;public enum StatType//枚举 StatType 的定义
{strength,agility,intelligence,vitality,damage,critChance,critPower,health,armor,evasion,magicRes,fireDamage,iceDamage,lightingDamage
}//10月25日
//10月26日
public class CharacterStats : MonoBehaviour
{private EntityFX fx;[Header("主属性")]public Stat strength;//力量,1点增加1攻击力和%1爆伤public Stat agility;//敏捷,1点增加1%闪避和%1暴击率public Stat intelligence;//智力,1点增加1法术强度和%1魔抗public Stat vitality;//活力,1点增加3生命值[Header("攻击属性")]//offensive statspublic Stat damage;public Stat critChance;//暴击率public Stat critPower;//暴击伤害,默认%150[Header("防守属性")]//defensive statspublic Stat maxHealth;public Stat armor;//护甲public Stat evasion;//闪避public Stat magicResistance;//魔抗[Header("魔法属性")]//magic statspublic Stat fireDamage;public Stat iceDamage;public Stat lightningDamage;public bool isIgnited;//是否燃烧,持续伤害public bool isChilled;//是否冻结,削弱护甲20%public bool isShocked;//是否感电,减少命中率20%[SerializeField] private float ailmentsDuration = 4;//异常状态持续时间private float ignitedTimer;private float chilledTimer;private float shockedTimer;private float igniteDamageCoolDown = .3f;//燃烧伤害间隔时间private float igniteDamageTimer;//燃烧伤害计时器private int igniteDamage;//燃烧伤害[SerializeField] private GameObject shockStrikePrefab;private int shockDamage;public int currentHealth;public System.Action onHealthChanged;public bool isDead { get; private set; }protected virtual void Start(){critPower.SetDefaultValue(150);//暴击伤害默认150%currentHealth = GetMaxHealthValue();//一开始血条满的fx = GetComponent<EntityFX>();}protected virtual void Update(){ignitedTimer -= Time.deltaTime;//燃烧时间减少chilledTimer -= Time.deltaTime;shockedTimer -= Time.deltaTime;igniteDamageTimer -= Time.deltaTime;//燃烧伤害计时器减少if (ignitedTimer < 0)isIgnited = false;if (chilledTimer < 0)isChilled = false;if (shockedTimer < 0)isShocked = false;if (isIgnited)ApplyIgniteDamage();}public virtual void IncreaseStatBy(int _modifier, float _duration, Stat _statToModify){StartCoroutine(StatModCoruntine(_modifier, _duration, _statToModify));}private IEnumerator StatModCoruntine(int _modifier, float _duration, Stat _statToModify)//加buff的协程{_statToModify.AddModifier(_modifier);//添加一个buffyield return new WaitForSeconds(_duration);_statToModify.RemoveModifier(_modifier);//移除一个buff}public virtual void DoDamage(CharacterStats _targetStats)//只是一次物理攻击{if (TargetCanAvoidAttack(_targetStats))return;int totalDamage = damage.GetValue() + strength.GetValue();if (Cancrit()){//Debug.Log("Crit Hit");totalDamage = CalculateCriticalDamage(totalDamage);//Debug.Log(" 总的暴击伤害是"+ totalDamage);//Total crit damage is}totalDamage = CheckTargetArmor(_targetStats, totalDamage);_targetStats.TakeDamage(totalDamage);//把造成的给到继承CharacterStats的类DoMagicDamage(_targetStats);//如果普通攻击不想要魔法伤害移除}#region Magic Damage and ailmentspublic virtual void DoMagicDamage(CharacterStats _targetStats)//只是一次魔法攻击{int _fireDamage = fireDamage.GetValue();int _iceDamage = iceDamage.GetValue();int _lightningDamage = lightningDamage.GetValue();int totalMagicalDamage = _fireDamage + _iceDamage + _lightningDamage + intelligence.GetValue();totalMagicalDamage = CheckTargetResistance(_targetStats, totalMagicalDamage);_targetStats.TakeDamage(totalMagicalDamage);//把造成的给到继承CharacterStats的类//importantif (Mathf.Max(_fireDamage, _iceDamage, _lightningDamage) <= 0)//可以保证下面的while循环不会无限循环return;AttempToApplyAilements(_targetStats, _fireDamage, _iceDamage, _lightningDamage);}private void AttempToApplyAilements(CharacterStats _targetStats, int _fireDamage, int _iceDamage, int _lightningDamage){//判断魔法伤害类型bool canApplyIgnite = _fireDamage > _iceDamage && _fireDamage > _lightningDamage;bool canApplyChill = _iceDamage > _fireDamage && _iceDamage > _lightningDamage;bool canApplyShock = _lightningDamage > _fireDamage && _lightningDamage > _iceDamage;while (!canApplyIgnite && !canApplyChill && !canApplyShock){//三个if同时判断大小,可以完成一个随机属性伤害的bossif (Random.value < .33f && _fireDamage > 0)//Random.value用于生成一个介于 0.0 和 1.0 之间的随机浮点数{canApplyIgnite = true;_targetStats.ApplyAilments(canApplyIgnite, canApplyChill, canApplyShock);//Debug.Log("ignited" );return;}if (Random.value < .5f && _lightningDamage > 0){canApplyShock = true;_targetStats.ApplyAilments(canApplyIgnite, canApplyChill, canApplyShock);//Debug.Log("shocked" );return;}if (Random.value < .99f && _iceDamage > 0){canApplyChill = true;_targetStats.ApplyAilments(canApplyIgnite, canApplyChill, canApplyShock);//Debug.Log("iced" );return;}}if (canApplyIgnite){_targetStats.SetupIgniteDamage(Mathf.RoundToInt(_fireDamage * .2f));}if (canApplyShock){_targetStats.SetupShockDamage(Mathf.RoundToInt(_lightningDamage * .1f));}_targetStats.ApplyAilments(canApplyIgnite, canApplyChill, canApplyShock);}public void ApplyAilments(bool _ignite, bool _chill, bool _shock)//应用异常状态{bool canApplyIgnite = !isIgnited && !isChilled && !isShocked;bool canApplyChill = !isIgnited && !isChilled && !isShocked;bool canApplyShock = !isIgnited && !isChilled;//没有其他异常状态才能进入一个异常状态//if (isIgnited || isChilled || isShocked)//如果进入一个异常状态就不能进入其他状态了//    return;if (_ignite && canApplyIgnite){isIgnited = _ignite;ignitedTimer = ailmentsDuration;fx.IgniteFxFor(ailmentsDuration);}if (_chill && canApplyChill){isChilled = _chill;chilledTimer = ailmentsDuration;float slowPercentage = .2f;//减速百分比GetComponent<Entity>().SlowEntityBy(slowPercentage, ailmentsDuration);//减速20%fx.ChillFxFor(ailmentsDuration);}if (_shock && canApplyShock){if (!isShocked){ApplyShock(_shock);}else{if (GetComponent<Player>() != null)//防止敌人打玩家自己被电return;HitNearsetTargerWithShockStrike();}}}public void ApplyShock(bool _shock){if (isShocked)//已经进入感电就不如再次进入return;isShocked = _shock;shockedTimer = ailmentsDuration;fx.ShockFxFor(ailmentsDuration);}private void HitNearsetTargerWithShockStrike(){Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, 25);//碰撞体检测周围的敌人float closestDistance = Mathf.Infinity;Transform closestEnemy = null;foreach (var hit in colliders){if (hit.GetComponent<Enemy>() != null && Vector2.Distance(transform.position, hit.transform.position) > 1)//如果是敌人并且不是自己,防止自己被电{float distanceToEnemy = Vector2.Distance(transform.position, hit.transform.position);if (distanceToEnemy < closestDistance){closestDistance = distanceToEnemy;closestEnemy = hit.transform;}}if (closestEnemy == null)closestEnemy = transform;}//寻找最近的敌人然后雷击if (closestEnemy != null){GameObject newShockStrike = Instantiate(shockStrikePrefab, transform.position, Quaternion.identity);newShockStrike.GetComponent<ShockStrike_Controller>().Setup(shockDamage, closestEnemy.GetComponent<CharacterStats>());}}//闪电攻击附近的目标private void ApplyIgniteDamage(){if (igniteDamageTimer < 0){DecreaseHealthBy(igniteDamage);//currentHealth -= igniteDamage;if (currentHealth < 0 && !isDead)Die();igniteDamageTimer = igniteDamageCoolDown;}}public void SetupIgniteDamage(int _damage) => igniteDamage = _damage;//设置燃烧伤害public void SetupShockDamage(int _damage) => shockDamage = _damage;//设置感电伤害#endregionpublic virtual void TakeDamage(int _damage)//造成伤害函数,返回伤害值{DecreaseHealthBy(_damage);GetComponent<Entity>().DamageImpact();fx.StartCoroutine("FlashFX");Debug.Log(_damage);if (currentHealth < 0 && !isDead)Die();//人被杀就会死}public virtual void IncreaseHealthBy(int _amount)//加血函数{currentHealth += _amount;if (currentHealth > GetMaxHealthValue())currentHealth = GetMaxHealthValue();if (onHealthChanged != null)onHealthChanged();}protected virtual void DecreaseHealthBy(int _damage)//受到伤害的数值变化{currentHealth -= _damage;if (onHealthChanged != null)onHealthChanged();}protected virtual void Die(){isDead = true;}#region Stat calculationsprivate int CheckTargetResistance(CharacterStats _targetStats, int totalMagicalDamage)//计算魔法伤害(魔抗{totalMagicalDamage -= _targetStats.magicResistance.GetValue() + (_targetStats.intelligence.GetValue() * 3);//减去魔抗值totalMagicalDamage = Mathf.Clamp(totalMagicalDamage, 0, int.MaxValue);//Clamp限制血量数值return totalMagicalDamage;}private int CheckTargetArmor(CharacterStats _targetStats, int totalDamage)//计算物理伤害(护甲{if (_targetStats.isChilled)totalDamage -= Mathf.RoundToInt(_targetStats.armor.GetValue() * .8f);//减去对方的护甲值elsetotalDamage -= _targetStats.armor.GetValue();//减去对方的护甲值totalDamage = Mathf.Clamp(totalDamage, 0, int.MaxValue);//最小值是0,最大值是int.MaxValue,防止别人打我加血return totalDamage;}private bool TargetCanAvoidAttack(CharacterStats _targetStats)//检测闪避{int totalEvasion = _targetStats.evasion.GetValue() + _targetStats.agility.GetValue();//总的闪避率if (isShocked)totalEvasion += 20;if (Random.Range(0, 100) < totalEvasion){Debug.Log("Attack Avoided");return true;}return false;}private bool Cancrit()//暴击检测{int totalCritChance = critChance.GetValue() + agility.GetValue();//总的暴击率if (Random.Range(0, 100) < totalCritChance){return true;}return false;}private int CalculateCriticalDamage(int _damage)//计算爆伤{float totalCritPower = (critPower.GetValue() + strength.GetValue()) * .01f;//Debug.Log("总的暴击率: " + totalCritPower);//total crit powerfloat critDamage = _damage * totalCritPower;//Debug.Log("取整之后的爆伤" + critDamage);//crit damage before round upreturn Mathf.RoundToInt(critDamage);}public int GetMaxHealthValue(){return maxHealth.GetValue() + vitality.GetValue() * 5;}//获取最大生命值#endregionpublic Stat GetStat(StatType _statType)//根据 buffType 返回需要修改的属性{if (_statType == StatType.strength) return strength;else if (_statType == StatType.agility) return agility;else if (_statType == StatType.intelligence) return intelligence;else if (_statType == StatType.vitality) return vitality;else if (_statType == StatType.damage) return damage;else if (_statType == StatType.critChance) return critChance;else if (_statType == StatType.critPower) return critPower;else if (_statType == StatType.health) return maxHealth;else if (_statType == StatType.armor) return armor;else if (_statType == StatType.evasion) return evasion;else if (_statType == StatType.magicRes) return magicResistance;else if (_statType == StatType.fireDamage) return fireDamage;else if (_statType == StatType.iceDamage) return iceDamage;else if (_statType == StatType.lightingDamage) return lightningDamage;else return null;}
}

Buff_Effect.cs

using UnityEngine;//2024年11月11日[CreateAssetMenu(fileName = "Buff Effect", menuName = "Data/Item effect/Buff effect")]
public class Buff_Effect : ItemEffect
{private PlayerStats stats;[SerializeField] private StatType buffType;// Buff 的类型[SerializeField] private int buffAmount; // Buff 的增加量[SerializeField] private float buffDuration;// Buff 持续时间public override void ExcuteEffect(Transform _enemyPositon){stats = PlayerManager.instance.player.GetComponent<PlayerStats>();//相当于获得了CharacterStats的引用stats.IncreaseStatBy(buffAmount, buffDuration, stats.GetStat(buffType));}
}

Inventory.cs

更新部分

      [SerializeField] private Transform statSlotParent;private UI_StatSlot[] statSlot;private void Start()//初始实例化{inventoryItems = new List<InventoryItem>();inventoryDictionary = new Dictionary<ItemData, InventoryItem>();stash = new List<InventoryItem>();stashDictionary = new Dictionary<ItemData, InventoryItem>();equipment = new List<InventoryItem>();equipmentDictionary = new Dictionary<ItemData_Equipment, InventoryItem>();//同时获取UI中对应的物品槽//获得起始的脚本inventoryItemSlot = inventorySlotParent.GetComponentsInChildren<UI_ItemSlot>();stashItemSlot = stashSlotParent.GetComponentsInChildren<UI_ItemSlot>();equipmentSlot = equipmentSlotParent.GetComponentsInChildren<UI_EquipmentSlot>();statSlot = statSlotParent.GetComponentsInChildren<UI_StatSlot>();AddStartingItems();}
using System.Collections.Generic;
using UnityEngine;//放在创建仓库的empyty对象上,就是仓库的运行函数
public class Inventory : MonoBehaviour
{public static Inventory instance;//单例模式public List<ItemData> startingItems;//初始装备//两种关键的存贮结构//List:存储玩家的装备、仓库物品、储藏室物品等//Dictionary:存储每个物品的数据以及物品在仓库中的具体信息,例如物品的堆叠数量public List<InventoryItem> equipment;public Dictionary<ItemData_Equipment, InventoryItem> equipmentDictionary;public List<InventoryItem> inventoryItems;public Dictionary<ItemData, InventoryItem> inventoryDictionary;public List<InventoryItem> stash;public Dictionary<ItemData, InventoryItem> stashDictionary;//UI物品槽管理:通过以下代码将游戏中的物品槽和UI界面上的物品槽关联起来[Header("仓库UI")]//Inventory UI[SerializeField] private Transform inventorySlotParent;//位置[SerializeField] private Transform stashSlotParent;[SerializeField] private Transform equipmentSlotParent;[SerializeField] private Transform statSlotParent;//物品和材料的存贮位置分开private UI_ItemSlot[] inventoryItemSlot;private UI_ItemSlot[] stashItemSlot;//储藏室private UI_EquipmentSlot[] equipmentSlot;//装备private UI_StatSlot[] statSlot;[Header("物品冷却")]private float lastTimeUsedFlask;private float lastTimeUsedArmor;//P122解决一开始不能用物品的问题,因为一开始冷却被赋值,使用了currentFlask.itemCoolDownprivate float flaskCoolDown;private float armorCoolDown;private void Awake(){if (instance == null)instance = this;elseDestroy(gameObject);//防止从一个地方到另一个地方}private void Start()//初始实例化{inventoryItems = new List<InventoryItem>();inventoryDictionary = new Dictionary<ItemData, InventoryItem>();stash = new List<InventoryItem>();stashDictionary = new Dictionary<ItemData, InventoryItem>();equipment = new List<InventoryItem>();equipmentDictionary = new Dictionary<ItemData_Equipment, InventoryItem>();//同时获取UI中对应的物品槽//获得起始的脚本inventoryItemSlot = inventorySlotParent.GetComponentsInChildren<UI_ItemSlot>();stashItemSlot = stashSlotParent.GetComponentsInChildren<UI_ItemSlot>();equipmentSlot = equipmentSlotParent.GetComponentsInChildren<UI_EquipmentSlot>();statSlot = statSlotParent.GetComponentsInChildren<UI_StatSlot>();AddStartingItems();}private void AddStartingItems()//添加初始物品{for (int i = 0; i < startingItems.Count; i++){AddItem(startingItems[i]);}}public void EquipItem(ItemData _item)//把一个物品装备到角色身上{ItemData_Equipment newEquipment = _item as ItemData_Equipment;//把 _item 对象转换为 ItemData_Equipment 类型,表示它是一个装备物品InventoryItem newItem = new InventoryItem(newEquipment); //把 ItemData 对象转换为 InventoryItem 对象ItemData_Equipment oldEquipment = null;//要删除的物品foreach (KeyValuePair<ItemData_Equipment, InventoryItem> item in equipmentDictionary)//遍历装备字典{if (item.Key.equipmentType == newEquipment.equipmentType)//如果装备类型相同oldEquipment = item.Key;//删除该装备}if (oldEquipment != null){UnequipItem(oldEquipment);AddItem(oldEquipment);//把要删除的物品放回仓库}equipment.Add(newItem);equipmentDictionary.Add(newEquipment, newItem);newEquipment.AddModifiers();//添加装备属性RemoveItem(_item);UpdataSlotsUI();}public void UnequipItem(ItemData_Equipment itemToRemove)//移除装备函数{if (equipmentDictionary.TryGetValue(itemToRemove, out InventoryItem value)){equipment.Remove(value);equipmentDictionary.Remove(itemToRemove);itemToRemove.RemoveModifiers();}}private void UpdataSlotsUI()//更新UI物体的数量{// 更新装备槽for (int i = 0; i < equipmentSlot.Length; i++)//将装备物品槽与一个装备字典中的物品进行匹配,并根据匹配结果更新物品槽的内容{foreach (KeyValuePair<ItemData_Equipment, InventoryItem> item in equipmentDictionary)//遍历装备字典{if (item.Key.equipmentType == equipmentSlot[i].slotType)//这个条件用于确保物品能放入正确的槽位中equipmentSlot[i].UpdataSlot(item.Value);}}// 清空并更新仓库和储藏室的物品槽for (int i = 0; i < inventoryItemSlot.Length; i++)//仓库物品槽{inventoryItemSlot[i].CleanUpSlot();}for (int i = 0; i < stashItemSlot.Length; i++)//储藏室中的物品槽{stashItemSlot[i].CleanUpSlot();}// 重新填充仓库和储藏室for (int i = 0; i < inventoryItems.Count; i++){inventoryItemSlot[i].UpdataSlot(inventoryItems[i]);}for (int i = 0; i < stash.Count; i++){stashItemSlot[i].UpdataSlot(stash[i]);}//更新属性槽for (int i = 0; i < statSlot.Length; i++){statSlot[i].UpdateStatValueUI();}}public void AddItem(ItemData _item)//据物品类型,将物品添加到仓库(inventory)或者储藏室(stash){if (_item.itemType == ItemType.Equipment){AddToInventory(_item);}else if (_item.itemType == ItemType.Material){AddToStash(_item);}UpdataSlotsUI();}private void AddToStash(ItemData _item){if (stashDictionary.TryGetValue(_item, out InventoryItem value)){value.AddStack();}else{InventoryItem newItem = new InventoryItem(_item);stash.Add(newItem);stashDictionary.Add(_item, newItem);}}private void AddToInventory(ItemData _item){if (inventoryDictionary.TryGetValue(_item, out InventoryItem value))//字典中检查仓库中是否有这个物品,具体查找的是ItemData,out InventoryItem value如果找,返回与该键相关联的值{value.AddStack();//如果物品已经存在于库存中,则增加其堆叠数量}else{InventoryItem newItem = new InventoryItem(_item);//如果物品不存在,则创建一个新的 InventoryIteminventoryItems.Add(newItem);inventoryDictionary.Add(_item, newItem);}}//检查物品是否已经在仓库里,如果存在则增加堆叠数量,如果不存在则创建新的物品对象并加入仓库public void RemoveItem(ItemData _item){if (inventoryDictionary.TryGetValue(_item, out InventoryItem value)){if (value.stackSize <= 1){inventoryItems.Remove(value);inventoryDictionary.Remove(_item);}else{value.RemoveStack();}}if (stashDictionary.TryGetValue(_item, out InventoryItem stashValue)){if (stashValue.stackSize <= 1)//如果物品的堆叠数量小于等于1,则从库存中删除该物品{stash.Remove(stashValue);stashDictionary.Remove(_item);}else{stashValue.RemoveStack();//否则就减少堆寨数量}}UpdataSlotsUI();}public bool CanCraft(ItemData_Equipment _itemToCraft, List<InventoryItem> _requiredMaterials)//判断是否可以合成的函数{List<InventoryItem> materialsToRemove = new List<InventoryItem>();for (int i = 0; i < _requiredMaterials.Count; i++){if (stashDictionary.TryGetValue(_requiredMaterials[i].data, out InventoryItem stashValue))//如果储藏室中没有所需材料{if (stashValue.stackSize < _requiredMaterials[i].stackSize)//数量是否足够{Debug.Log("没有足够的材料");return false;}else{materialsToRemove.Add(stashValue);}}else{Debug.Log("没有足够的材料");return false;}}for (int i = 0; i < materialsToRemove.Count; i++)//使用了就从临时仓库中移除{RemoveItem(materialsToRemove[i].data);}AddItem(_itemToCraft);Debug.Log("这里是你的物品" + _itemToCraft.name);return true;}public List<InventoryItem> GetEquipmentList() => equipment;//获取装备列表public List<InventoryItem> GetStashList() => stash;//获取仓库列表public ItemData_Equipment GetEquipment(EquipmentType _type)//获取装备{ItemData_Equipment equipedItem = null;foreach (KeyValuePair<ItemData_Equipment, InventoryItem> item in equipmentDictionary)//遍历装备字典{if (item.Key.equipmentType == _type)//如果装备类型相同equipedItem = item.Key;//删除该装备}return equipedItem;}public void UseFlask()//使用药水的函数{ItemData_Equipment currentFlask = GetEquipment(EquipmentType.Flask);//获取当前的药水if (currentFlask == null)return;bool canUseFlask = Time.time > lastTimeUsedFlask + flaskCoolDown;//判断是否可以使用药水if (canUseFlask){flaskCoolDown = currentFlask.itemCoolDown;//重置冷却时间,一开始就可以使用物品currentFlask.Effect(null);lastTimeUsedFlask = Time.time;}elseDebug.Log("药水冷却中");}public bool CanUseArmor(){ItemData_Equipment currentArmor = GetEquipment(EquipmentType.Armor);//获取当前装备的护甲信息。if (Time.time > lastTimeUsedArmor + armorCoolDown){//更新冷却时间和使用时间armorCoolDown = currentArmor.itemCoolDown;lastTimeUsedArmor = Time.time;return true;}Debug.Log("护甲正在冷却中");return false;}//private void Updata()//{//    Debug.Log(Time.time);//}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/60770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python实现PSO粒子群优化算法优化CNN-Transformer回归模型(优化权重和阈值)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 本项目旨在利用粒子群优化&#xff08;PSO&#xff09;算法优化卷积神经网络&#xff08;CNN&…

【linux】如何扩展磁盘容量(VMware虚拟机)-转载

如何扩展磁盘容量(VMware虚拟机) 一、前置准备工作 扩展虚拟机磁盘前&#xff0c;需要先把虚拟机关机才能进行扩展磁盘操作 1.选择虚拟机设置&#xff0c;如下图所示 2.输入你想扩展的磁盘容量&#xff0c;以本次实操为例&#xff0c;我这里输入的30G&#xff08;具体按照实…

内网渗透-搭建域环境

声明 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者简介&#xff1a;致力于网络安全领域&#xff0c;目前作为一名学习者&#xff0c;很荣幸成…

【Qt】使用QString的toLocal8Bit()导致的问题

问题 使用Qt发送一个Http post请求的时候&#xff0c;服务一直返回错误和失败信息。同样的url以及post参数&#xff0c;复制黏贴到postman里就可以发送成功。就感觉很神奇。 原因 最后排查出原因是因为参数中含有汉字而导致的编码问题。 在拼接post参数时&#xff0c;使用了…

H.265流媒体播放器EasyPlayer.js H.264/H.265播放器chrome无法访问更私有的地址是什么原因

EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、HTTP-FLV、HLS&#xff08;m3u8&#xff09;、WS、WEBRTC、FMP4视频直播与视频点播等多种协议&#xff0c;支持H.264、H.265、AAC、G711A、MP3等多种音视频编码格式&#xff0c;支持MSE、WASM、WebCodec等多种解码方…

【HarmonyOS】Hdc server port XXXX has been used.Configure environment variable

【HarmonyOS】Hdc server port XXXX has been used.Configure environment variable 一、 问题背景&#xff1a; 无法调试debug应用&#xff0c;IDE右下角显示该弹窗&#xff1a; Hdc server port XXXX has been used.Configure environment variable ‘OHOS_HDC_SERVER_POR…

AdaBoost 二分类问题

代码功能 生成数据集&#xff1a; 使用 make_classification 创建一个模拟分类问题的数据集。 数据集包含 10 个特征&#xff0c;其中 5 个是有用特征&#xff0c;2 个是冗余特征。 数据集划分&#xff1a; 将数据分为训练集&#xff08;70%&#xff09;和测试集&#xff08;3…

初识Linux · 信号保存

目录 前言&#xff1a; Block pending handler表 信号保存 前言&#xff1a; 前文我们已经介绍了信号产生&#xff0c;在时间的学习线上&#xff0c;信号的学习分为预备知识&#xff0c;信号产生&#xff0c;信号保存&#xff0c;信号处理&#xff0c;本文我们学习信号保存…

01 最舒适的python开发环境

0 前言 我自己经过尝试&#xff0c;总结出python3开发环境的最舒适方式。 python3安装创建虚拟环境 venvjupyter notebook 笔记本安装vscode插件(Python, Pylance, Jupyter) 1 python3安装 ubuntu系统下安装最新版本的python3 sudo apt update sudo apt install python32 …

vue3:computed

vue3:computed 扫码或者点击文字后台提问 computed 支持选项式写法 和 函数式写法 1.选项式写法 支持一个对象传入get函数以及set函数自定义操作 2.函数式写法 只能支持一个getter函数不允许修改值的 基础示例 <template><div><div>姓&#xff1a;<i…

【弱监督视频异常检测】2024-ESWA-基于扩散的弱监督视频异常检测常态预训练

2024-ESWA-Diffusion-based normality pre-training for weakly supervised video anomaly detection 基于扩散的弱监督视频异常检测常态预训练摘要1. 引言2. 相关工作3. 方法论3.1. 使用扩散自动编码器进行常态学习3.2. 全局-局部特征编码器3.2.1 局部块3.2.2 全局块3.2.3 协同…

124. 二叉树中的最大路径和【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 124. 二叉树中的最大路径和 一、题目描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径…

跳房子(弱化版)

题目描述 跳房子&#xff0c;也叫跳飞机&#xff0c;是一种世界性的儿童游戏&#xff0c;也是中国民间传统的体育游戏之一。 跳房子的游戏规则如下&#xff1a; 在地面上确定一个起点&#xff0c;然后在起点右侧画 n 个格子&#xff0c;这些格子都在同一条直线上。每个格子内…

qt移植到讯为rk3568,包含一些错误总结

qt移植到arm报错动态库找不到 error while loading shared libraries: libAlterManager.so.1: cannot open shared object file: No such file or directory 通过设置环境变量 LD_LIBRARY_PATH就行了。 LD_LIBRARY_PATH是一个用于指定动态链接器在运行时搜索共享库的路径的环…

【开发基础】语义化版本控制

语义化版本控制 基础三级结构主版本号次版本号修正版本号 思维导图在node包管理中的特殊规则 参考文件 基础 语义化版本控制是一套通用的包/库的版本管理规范。在各类语言的包管理中都有用到&#xff0c;一般以x.x.x的形式出现在包的命名中。 三级结构 在语义化版本控制中&a…

前端导出excel表格功能

缘由 大家好&#xff0c; 最近公司在做一个类似医疗的项目&#xff0c;由于前端的开发人员有些许变故&#xff0c;而且公司暂时没有找到合适的前端开发人员。所以&#xff0c;前端开发的任务也落在了我们后端的身上。没办法&#xff0c;时间紧任务重&#xff0c;只能硬着头皮上…

Dubbo 3.x源码(25)—Dubbo服务引用源码(8)notify订阅服务通知更新

基于Dubbo 3.1&#xff0c;详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了接口级的服务引入订阅的refreshInterfaceInvoker方法&#xff0c;当时还有最为关键的notify服务通知更新的部分源码没有学习&#xff0c;本次我们来学习notify通知本地服务更新的源码。 Dubb…

使用 Ansys Mechanical 中的“螺栓工具”插件导出螺栓反作用力

概括&#xff1a; 对于处理复杂组件和结构的工程师和分析师来说&#xff0c;提高在 Ansys Mechanical 中提取多个螺栓反作用力表格的效率至关重要。在有限元分析 (FEA) 中&#xff0c;准确确定螺栓上的反作用力对于评估机械连接的完整性和性能至关重要。但是&#xff0c;手动提…

Docker部署Kafka SASL_SSL认证,并集成到Spring Boot

1&#xff0c;创建证书和密钥 需要openssl环境&#xff0c;如果是Window下&#xff0c;下载openssl Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 还需要keytool环境&#xff0c;此环境是在jdk环境下 本案例所使用的账号密码均为&#xff1a; ka…

机器学习(基础2)

特征工程 特征工程:就是对特征进行相关的处理 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。 特征工程API 实例化…