unity3d 如何使用布尔值比较操作< int>

qrjkbowd  于 2023-01-26  发布在  其他
关注(0)|答案(2)|浏览(268)

我有一个方法如下

public void RequestTPCost(Action<int> callback, Action<int> enemyCallback)
 {
        if (OnTPSelectionNeeded == null)
        {
            callback?.Invoke(0);
            enemyCallback?.Invoke(0);
            return;
        }
        if (TurnSystem.Instance.IsPlayerTurn())
        {
            //Player turn use shooting unit is selected and target is enemy
            OnTPSelectionNeeded?.Invoke(this, new TPSelectionInfo()
            {
                callback = callback,
                enemyCallback = enemyCallback,
                TPAvailable = selectedUnit.GetTacticalPoints(),
                enemyTPAvailable = targetUnit.GetTacticalPoints(),
            });
        }
        else
        {
            OnTPSelectionNeeded?.Invoke(this, new TPSelectionInfo()
            {
                callback = callback,
                enemyCallback = enemyCallback,
                TPAvailable = targetUnit.GetTacticalPoints(),
                enemyTPAvailable = selectedUnit.GetTacticalPoints()
            });
        }
    }

我把它用在其他地方
x一个一个一个一个x一个一个二个x
现在我想检查ConfirmTPCost < ConfirmEnemyTPCost是否正确,但不确定如何简单地执行此操作。
我有一个迂回的方法,使用事件和更多的UnityActionSystem函数来调用示例,并通过它工作,但它似乎非常笨重,容易中断。有没有更好的方法来获得这些值,并检查哪个更多?

ni65a41a

ni65a41a1#

var cost = 0;
var enemyCost = 0;
UnitActionSystem.Instance.RequestTPCost(i => cost = i, i => enemyCost = i);
Debug.Log($"TP = {cost}");
Debug.Log($"EnemyTP = {enemyCost}");
if (cost < enemyCost)
{
    //Do your stuff here
}
nbewdwxp

nbewdwxp2#

如前所述,听起来实际上涉及到一些异步部分。
因此,您可能希望正确实现asyncawait模式,并等待这两个值都可用。
或者,您可以使用nullables和局部函数(如

int? cost = null;
int? enemyCost = null;

UnitActionSystem.Instance.RequestTPCost(i => 
{
    cost = i;
    if(enemyCost != null)
    {
        Validate();
    }
}, i =>
{
    enemyCost = i;
    if(cost != null)
    {
        Validate();
    }
});

// Can be a local function 
// otherwise pass in the two int values via parameters  
void Validate()
{
    Debug.Log($"TP = {cost.Value}");
    Debug.Log($"EnemyTP = {enemyCost.Value}");
    if (cost.Value < enemyCost.Value)
    {
        //Do your stuff here
    }
}

这里的想法是:无论两个回调中哪一个先触发,它都将被忽略,只有第二个回调的两个值都可用,并且可以调用实际的处理程序方法

相关问题