【发布时间】:2022-01-12 16:27:31
【问题描述】:
我在 Unity 中收到错误消息:
"InvalidCastException: Specified cast is not valid.
Tile.OnMouseDown () (at Assets/Tiles/Tile.cs:38)
UnityEngine.SendMouseEvents:DoSendMouseEvents(Int32)"
更准确地说,它抱怨这条线( 38):
> if (OccupiedUnit.Faction == Faction.Hero) UnitManager.Instance.SetSelectedHero((BaseHero)OccupiedUnit);
我最近开始学习Unity所以我不知道如何解决这个问题。
附上以下代码:
if (OccupiedUnit != null)
{
if (OccupiedUnit.Faction == Faction.Hero) UnitManager.Instance.SetSelectedHero((BaseHero)OccupiedUnit);
else
{
if(UnitManager.Instance.SelectedHero != null)
{
var enemy = (BaseEnemy)OccupiedUnit;
Destroy(enemy.gameObject);
UnitManager.Instance.SetSelectedHero(null);
}
}
}
else
{
if (UnitManager.Instance.SelectedHero != null)
{
SetUnit(UnitManager.Instance.SelectedHero);
UnitManager.Instance.SetSelectedHero(null);
}
}
}
提前谢谢你。
【问题讨论】:
-
OccupiedUnit在代码运行时不得引用BaseHero实例。 -
无论
OccupiedUnit是什么,它都不是BaseHero(但至少它不为空)。 -
OccupiedUnit是 BaseUnit 类型的变量。反过来,BaseHero类型继承自BaseUnit,因此需要显式类型转换才能将其作为接受BaseHero类型的函数中的参数发送。UnitManager类存储我们需要使用的BaseHero类型的变量,但 Tile 类只能存储BaseHero和BaseEnemy的通用类型。如果我正确理解了这个问题,这应该可以澄清情况。