首页 > 编程知识 正文

unity学习顺序,申请1学习15日

时间:2023-05-05 20:50:52 阅读:249873 作者:2164

TargetableObject是可当作目标物entity的逻辑脚本都要继承的脚本

实现接口:

OnInitOnShowOnUpdateOnDead:GameEntry.Entity.HideEntity(this);OnTriggerEnter:计算伤害

自己的函数

public void ApplyDamage(Entity attacker, int damageHP) { float fromHPRatio = m_TargetableObjectData.HPRatio; m_TargetableObjectData.HP -= damageHP; float toHPRatio = m_TargetableObjectData.HPRatio; if (fromHPRatio > toHPRatio) { GameEntry.HPBar.ShowHPBar(this, fromHPRatio, toHPRatio); } if (m_TargetableObjectData.HP <= 0) { OnDead(attacker); } }

自己的子类需要实现的接口

public abstract ImpactData GetImpactData();

————————

TargetableObjectData也是一个,分了阵营

AircraftData继承于它,这个data在onshow时作为user data传入,

传入时根据配置中的对象进行对应不同模块的加载:

public AircraftData(int entityId, int typeId, CampType camp) : base(entityId, typeId, camp) { IDataTable<DRAircraft> dtAircraft = GameEntry.DataTable.GetDataTable<DRAircraft>(); DRAircraft drAircraft = dtAircraft.GetDataRow(TypeId); if (drAircraft == null) { return; } m_ThrusterData = new ThrusterData(GameEntry.Entity.GenerateSerialId(), drAircraft.ThrusterId, Id, Camp); for (int index = 0, weaponId = 0; (weaponId = drAircraft.GetWeaponIdAt(index)) > 0; index++) { AttachWeaponData(new WeaponData(GameEntry.Entity.GenerateSerialId(), weaponId, Id, Camp)); } for (int index = 0, armorId = 0; (armorId = drAircraft.GetArmorIdAt(index)) > 0; index++) { AttachArmorData(new ArmorData(GameEntry.Entity.GenerateSerialId(), armorId, Id, Camp)); } m_DeadEffectId = drAircraft.DeadEffectId; m_DeadSoundId = drAircraft.DeadSoundId; HP = m_MaxHP; }

同时有自己的属性,包括存了其他内容的其他data等:

[SerializeField] private int m_MaxHP = 0; [SerializeField] private int m_Defense = 0; [SerializeField] private int m_DeadEffectId = 0; [SerializeField] private int m_DeadSoundId = 0;

还有一些方法:如

private void RefreshData() { m_MaxHP = 0; m_Defense = 0; for (int i = 0; i < m_ArmorDatas.Count; i++) { m_MaxHP += m_ArmorDatas[i].MaxHP; m_Defense += m_ArmorDatas[i].Defense; } if (HP > m_MaxHP) { HP = m_MaxHP; } }

————————————————

最后就是继承了targetobject的Aircraft了,

在OnShow中加载了武器和护盾。

至于这架机器的加载,则是在gamebase的initialize中:

GameEntry.Entity.ShowMyAircraft(new MyAircraftData(GameEntry.Entity.GenerateSerialId(), 10000) { Name = "My Aircraft", Position = Vector3.zero, }); GameEntry.Entity.ShowAsteroid(new AsteroidData(GameEntry.Entity.GenerateSerialId(), 60000 + Utility.Random.GetRandom(dtAsteroid.Count)) { Position = new Vector3(randomPositionX, 0f, randomPositionZ), });

观察这个showxx的函数,它的参数是一个data文件。

后面的60000和10000是一个typeid,entity带着的,一个唯一的编号,可以读取到。根据这个编号不不同的asteroid,在生成时就有所不同。

 

UCloud云社区win7系统出现电脑蓝屏如何解决

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。