iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0

前言

RTS遊戲中單位控制及資源交換尤其重要,資源交換如使用較少的單位來擊敗敵人較多的單位,這時候攻擊力、冷卻時間、血量就尤為重要,因此今天來寫攻擊的方法。

實作

[Networked]
TickTimer cooldownTimer { get; set; }
[Networked]
public float currentHealth { get; set; }
public bool canAttack => cooldownTimer.ExpiredOrNotRunning(Runner);

SimpleKCC simpleKCC;
AnimalMove animalMove;
BloodBar bloodBar;

[Rpc (RpcSources.All, RpcTargets.StateAuthority, HostMode = RpcHostMode.SourceIsHostPlayer)]
public void RPC_Damage(float damage, NetworkAnimal animal,RpcInfo info = default)
{
    if (canAttack)
    {
        animal.BeDamaged(damage);
        cooldownTimer = TickTimer.CreateFromSeconds(Runner, cooldownTime);
    }
}
private void BeDamaged(float damge)
{
    currentHealth -= damge;
}

狀態授權

為了讓所有人都能夠看到動物目前的血量,所以將當前血量設為聯網屬性,然而聯網屬性需要狀態授權才能夠被修改,故這邊使用RPC來讓狀態能夠更新,且將攻擊判定及冷卻都放在RPC中,以避免延遲問題。

TickTimer

TickTimer 是PhotonFusion中提供的一個類似於計時器的結構,目的是為了降低頻寬及模擬網路刷新的方法。這邊使用TickTimer來實作冷卻的功能。


上一篇
Day 11 Photon Fusion 專案設定(下)
系列文
使用unity 及 photon fusion 打造線上RTS遊戲12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言