我正在为我的回合制策略游戏创建AI,我的想法就是棋子中的棋子和那些瓦片可以包含单位。
在我的班级中,我会保留一份敌方单位列表,并希望根据他们的“威胁级别”对其进行排序。
/// <summary>
/// Enemy unit
/// </summary>
public Unit Unit { get; private set; }
/// <summary>
/// Distance towards other side of the board / victory
/// </summary>
public float Distance { get; private set; }
/// <summary>
/// Allied Unit covering the lane
/// </summary>
public Unit CoveringUnit { get; set; }
然而,我在if声明中苦苦挣扎:
public int CompareTo(AiEnemyUnit pOther)
{
if (CoveringUnit == null && pOther.CoveringUnit == null)
return Distance.CompareTo(pOther.Distance);
if (CoveringUnit != null && pOther.CoveringUnit == null)
return 1;
if (CoveringUnit == null && pOther.CoveringUnit != null)
return -1;
// coverunits are both not null
Unit lvWinningUnit = GameManager.Instance.WhoWouldWin(this.Unit, this.CoveringUnit);
Unit lvWinningOtherUnit = GameManager.Instance.WhoWouldWin(pOther.Unit, pOther.CoveringUnit);
if ((lvWinningUnit == null && lvWinningOtherUnit == null) ||
lvWinningUnit == this.Unit && lvWinningOtherUnit == pOther.Unit)
return Distance.CompareTo(pOther.Distance);
if (lvWinningUnit == this.CoveringUnit && lvWinningOtherUnit != pOther.CoveringUnit)
return -1;
if (lvWinningUnit != this.CoveringUnit && lvWinningOtherUnit == pOther.CoveringUnit)
return 1;
Debug.Log("CompareTo AiEnemyUnit couldn't compare??");
return Distance.CompareTo(pOther.Distance);
}
CoveringUnit 是已经覆盖敌方单位所在道路的单位(应该是一个列表,但我们),所以如果这个对象有一个 CoverUnit 和其他对象不会,其他对象应具有优先级,因为它需要生成一个单元来覆盖该通道。 / p>
它一直给我调试消息,但我不能用Unity调试它。
所以我的问题是:
是否有工具或在线网站帮助if语句查看我缺少的内容?
提前致谢。
EDIT1:@paqogomez建议的改述:
我在CompareTo函数中缺少什么?
答案 0 :(得分:2)
如果没有适当的IDE支持调试,您将必须完全按照您已经开始的方式进行操作。
在您的调试信息中,打印出您在上述if语句中使用的一些变量,以确定它们的实际值。
Debug.Log("CoveringUnit Won: " + lvWinningUnit == this.CoveringUnit)
Debug.Log("Other CoveringUnit Won: " + lvWinningOtherUnit == pOther.CoveringUnit)
你会发现这两个都返回false或者两者都返回true,否则你根本就不会打你的调试信息。
我猜猜你的WhoWouldWin方法的逻辑存在错误。我不确定您是否应该将单位与CoveringUnit进行比较,因为我不完全了解您的域名。
答案 1 :(得分:0)
我通过重新安装UnityVS让Visual Studio调试再次运行。
if ((lvWinningUnit == null && lvWinningOtherUnit == null) ||
lvWinningUnit == this.Unit && lvWinningOtherUnit == pOther.Unit ||
lvWinningUnit == this.CoveringUnit && lvWinningOtherUnit == pOther.CoveringUnit)
必须添加: || lvWinningUnit == this.CoveringUnit&amp;&amp; lvWinningOtherUnit == pOther.CoveringUnit)
找到它:)