unity gameframework starforce学习1
TargetableObject是可当作目标物entity的逻辑脚本都要继承的脚本
实现接口:
- OnInit
- OnShow
- OnUpdate
- OnDead: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,在生成时就有所不同。
unity gameframework starforce学习1相关推荐
- unity DOTS的学习总结之Job System应用——绘制曼德勃罗集合
接上回:DOTS的学习总结之Job System的介绍,这次就利用之前了解知识来做点效果. 上回在这:unity DOTS的学习总结之Job System 说到并行处理,那最适合拿来做实验的就是一些分 ...
- Unity超基础学习笔记(二)
Unity超基础学习笔记(二) 1. 基本数据类型的扩展 之前在K12中学习了一些基本的数据类型,实际上C#支持更多的数据类型.如下: 注意无符号整型数和有符号整型数的表示范围,例如: int 能表示 ...
- unity地形模块学习
unity地形模块学习: 问题一: 看不见自己抬高或拉低的操作结果 问题二: 制作地形过程中停止光照烘焙消耗内存 问题三: 加了direction light之后地形还是没有变亮 问题四: Unity ...
- Unity C# 网络学习(十二)——Protobuf生成协议
Unity C# 网络学习(十二)--Protobuf生成协议 一.安装 去Protobuf官网下载对应操作系统的protoc,用于将.proto文件生成对应语言的协议语言文件 由于我使用的是C#所以 ...
- Unity动画系统学习
Unity动画系统学习 文章目录 Unity动画系统学习 AnimationState 动画状态 Animation Transitions 动画过渡 动画分层和遮罩 动画混合 1D混合 2D混合 动 ...
- Unity动画状态机学习笔记
Unity动画状态机学习笔记 一.建平面,拖人物模型.建状态机.动画导入.拖组件--实现Game时人物动画为等待状态. 二.拖WAIT01.WAIT02.WAIT03.WAIT04--实现按数字1切换 ...
- Unity之C#学习笔记(11):静态类型 Static
前篇链接:Unity之C#学习笔记(10):接口和多态 Interfaces and Polymorphism 静态类型(Static)用一句话概括就是:在程序运行期间只会被创建一份的通用内容,用关键 ...
- 【Unity NGUI】学习笔记(二)之英雄攻击和装备武器
玩魔兽世界的时候,游戏人物可以行走,奔跑,攻击,死亡等等行为,今天继续结合上一个案例[Unity NGUI]学习笔记(一):英雄选择,皮肤更换上给英雄添加动作行为. 一.准备工作 给英雄准备奔跑 攻击 ...
- Unity游戏框架学习笔记——03基于观察者模式的事件中心
Unity游戏框架学习笔记--03基于观察者模式的事件中心 基于观察者模式的事件中心 一如既往指路牌:https://www.bilibili.com/video/BV1C441117wU?p=5. ...
最新文章
- web与APP之间的交互---WebViewJavascriptBridge
- 解决 NDK is missing a “platforms“ directory.
- 网络安全导论课程-windows开启远程
- LeetCode-二叉树-94. 二叉树的中序遍历
- oracle 快速上手,Oracle学习笔记:快速上手
- 新编计算机英语第六章,新编计算机英语-电子教案.ppt
- New Distinct Substrings(后缀数组)
- android音量键广播,音量控制键控制的音频流(setVolumeControlStream)描述
- (51)FPGA状态机描述(四段式)
- css中hover的妙用!!
- Child module pom.xml of pom.xml does not exist @
- Oracle中sql相关的命令
- 【UE4】UE4GamePlay架构
- minimumsnap(1)微分平坦特性(Differential Flatness)
- QT实现记事本代码(版本三)
- pg8168改mac命令_使用PG8168修改8111b网卡MAC地址
- 玩转诺基亚5800XM,新手上路指南
- Java 文件上传 三种方式
- java中string是什么意思_java中string什么意思
- WebForm网站和MVC网站运行机制的区别