接下来就是多种病毒的实现了,为此,我们先定义3中病毒:
先根据类型创建不同种类病毒
var type = (VirusDefine.VirusType) _virusDatas[virusId].Type;
switch (type)
{
case VirusDefine.VirusType.Ordinary:
var ordVirus = prefab.AddComponent<OrdinaryVirus>();
ordVirus.SetVirusData(_virusDatas[virusId]);
break;
case VirusDefine.VirusType.Track:
var trackVirus = prefab.AddComponent<TrackVirus>();
trackVirus.SetVirusData(_virusDatas[virusId]);
break;
case VirusDefine.VirusType.Breed:
break;
}
先来实现第一种病毒;
首先先看看普通病毒的定义及特点:
普通病毒的特点暂定为随处游走,那我们就得就得为他创造一个随机点算法:
/// <summary>
/// 得到一个随机位置
/// </summary>
/// <returns></returns>
protected Vector3 GetRandomPosInBoard()
{
var x = Random.Range(-ConfigDefine.MapWidth / 2 + _virusData.Radius, ConfigDefine.MapWidth / 2 - _virusData.Radius);
var y = Random.Range(-ConfigDefine.MapHeight / 2 + _virusData.Radius, ConfigDefine.MapHeight / 2 - _virusData.Radius);
return new Vector3(x, y, 0);
}
然后我们就可以让目标实现随处走动:效果如图:
接下来实现第二种病毒;
首先先看看追踪病毒的定义及特点:
追踪病毒的特点暂定为追踪player,然后一开始要随机到边界点,看上去散开的,不会一窝蜂的跑到player,那我们就得就得为他创造一个随机边界算法:
/// <summary>
/// 得到最近的边界点
/// </summary>
/// <returns></returns>
protected Vector3 GetNearestBoardPos()
{
float x = 0;
float y = 0;
if (-ConfigDefine.MapWidth / 2 < _transform.position.x && _transform.position.x < ConfigDefine.MapWidth / 2)
{
// y 值
x = Random.Range(-ConfigDefine.MapWidth / 2 + _virusData.Radius, ConfigDefine.MapWidth / 2 - _virusData.Radius);
y = _transform.position.y > ConfigDefine.MapHeight / 2 ? ConfigDefine.MapHeight / 2 : -ConfigDefine.MapHeight / 2;
}
if (-ConfigDefine.MapHeight / 2 < _transform.position.y && _transform.position.y < ConfigDefine.MapHeight / 2)
{
x = _transform.position.x > ConfigDefine.MapWidth / 2 ? ConfigDefine.MapWidth / 2 : -ConfigDefine.MapWidth / 2;
y = Random.Range(-ConfigDefine.MapHeight / 2 + _virusData.Radius, ConfigDefine.MapHeight / 2 - _virusData.Radius);
}
return new Vector3(x, y, 0);
}
然后看效果图:
绿色的就是追踪病毒,红色的就是随机病毒。
接下来就是第三种病毒,繁殖病毒。。。
这个我还没想好表现方式,,我先想想吧。
总结:这次主要将病毒的类型给做区分并实现了随机病毒和追踪病毒。
传送门:独立游戏开发–索引