【发布时间】:2019-04-26 13:44:53
【问题描述】:
我正在尝试通过列表中的一堆游戏对象进行递归:
// get the relative position of the weapons to the ship
List<Transform> weaponPositions = ship.GetWeaponLocations(); // works
// set the positions of the weapons
for(int i = 0 ; i < equippedWeapons.Length && i < weaponPositions.Count ; i++)
{
equippedWeapons[i].GetComponent<Weapon>().setPosition(weaponPositions[i]);
}
但是,它似乎将最后一个“武器位置”应用于所有内容。所以 WeaponPositions 是一个 Transform 类型的列表,比如我想将 Weapon[0] 的位置设置为 WeaponPosition[0] 的位置。
问题在于,当它到达第三把武器(本例中为最后一把)时,它会将武器位置[2] 应用到之前的每把武器,而不仅仅是第 i 个索引。
武器是SerailizedField:
[SerializeField] GameObject[] equippedWeapons;
在武器中,setWeapon 方法很简单:
Transform positionOfWeaponOnShip;
public void setPosition(Transform pos)
{
positionOfWeaponOnShip = pos;
}
我要问的问题是,我在这里以正确的方式使用列表吗?我很难理解为什么它不仅仅将其应用于第 i 个值。我也不确定我还能在这里放什么有用的...
谢谢, 波哥
【问题讨论】:
-
尝试添加一个Debug.Log("currentPosition is: " + weaponPositions[i]);在 for 循环内和赋值之前。检查日志看位置是否正确
-
(1) 检查
GetComponent<Weapon>()在equippedWeapons中的所有对象上调用时是否返回相同的引用; (2) 检查weaponPositions中的所有对象是否实际上都相同。 -
嗯,实例 ID 都是一样的......这是否意味着当我将预制件拖放到 [SerializeField] 中时,它会为每个预制件使用相同的预制件,而不是创建一个新实例对于列表中的每个元素?作为测试,我将武器预制件复制了三遍,然后将它们分别放入,然后是的,它工作得很好。但我不希望这样,我希望我的一个预制武器有多个 if 放入装备武器字段的实例......