【发布时间】:2019-12-22 10:40:11
【问题描述】:
玩家资源和必需资源遵循类似的模式;
public struct RequiredResources
{
public Resource resource;
public int quantityRequired;
}
public class Resource : ScriptableObject
{
[SerializeField]
private string resourceName;
public string GetName() { return resourceName; }
[SerializeField]
public Sprite icon;
public Sprite GetIcon() { return icon; }
}
玩家可用的资源如下; 食物、黄金、木材、石头
我希望使用这样的系统,以便可以根据需要轻松添加更多资源。放置建筑物时,它会列出建造它所需的资源清单,例如房屋可能需要花费; 黄金 = 5 木材 = 3
使用下面的代码,这将遍历资源并根据需要减少数量。基本上是玩家拥有的数量 - 成本,然后更新 UI。
public void UseResources()
{
foreach (RequiredResources requiredResources in building.GetResources())
{
foreach (ResourceManager.PlayersResources resource in player.playersResources)
{
if (requiredResources.resource.Equals(resource.GetResourceType()))
{
resource.RemoveQuantity(requiredResources.quantityRequired);
}
}
}
}
但是,在运行此之前,我想检查播放器是否有足够的资源。当我使用类似的逻辑来返回真假,并且玩家有足够的木材(真)但没有足够的金币(假)时,它将删除两者的数量。我不知道如何正确地做到这一点。
public bool HasRequiredResources(RequiredResources[] requiredResources)
{
foreach (RequiredResources r in requiredResources) //go through all required resources
{
foreach (PlayersResources p in playersResources)
{
if (r.quantityRequired > p.GetCurrAmount())
Debug.Log("Has enough " + r.resource.name);
return false;
}
}
return true; //reaching this point means that the faction has all required resources
}
这就是我所拥有的,但它总是返回 false,我哪里出错了?我相信这是由于foreach内部的foreach。但是如何运行对第二个(PlayersResources)列表的搜索以返回相同的资源?
【问题讨论】:
-
肯定是打印出来的,“够了”?我猜如果你有 1 个糖,2 个面粉,它检查 2 个面粉,它对 1 个糖说不,因为它不检查糖和面粉是相同的资源类型......跨度>