以下代码中的错误是什么?

时间:2014-01-31 17:17:27

标签: unity3d unityscript

这是功能:

for (i = 0; i <= array.Length; i++) {
      if (array[i].transform.position = 0)
        array.RemoveAt(i);
        print(“Removed element: “ + array[i].name);
      else if (array[i].transform.position > 0)
         array[i].transform.forward = Vector3(1,0,0);
}

2 个答案:

答案 0 :(得分:2)

我不确定这是否是一个有效的问题,但肯定存在一些逻辑错误:

  • 首先,我不确定数组是否有RemoveAt(int index) (但我不是一个大的统一用户)(虽然有列表)
  • 你绝对不应该(即使一些奇怪的语言可能允许你)尝试访问你刚删除的对象...这是你试图在这里做的:

    array.RemoveAt(i);
    print(“Removed element: “ + array[i].name);
    
  • 位置是Vector3而不是int或float,所以你不能这样做:array[i].transform.position = 0

  • 你永远不应该在if()中使用=(赋值运算符),你应该使用==(比较运算符)(因为=当可以赋值时,返回总是为真)

  • 由于与array[i].transform.position > 0

  • 之前相同的原因,该行有误
  • array[i].transform.forward = Vector3(1,0,0);让我感到疑惑,因为如果它是C#我会在Vector3()之前尝试new关键字,我更喜欢浮动:

  • array[i].transform.forward = new Vector3(1.0F,0,0);但是即便有Unity会给你一个错误,说明你不能先修改Transform的组件而不先制作副本我相信...

但不错的尝试:D

答案 1 :(得分:0)

你无法将矢量与0比较,它需要像这样

如果(myObject.transform.position == Vector3.zero)

并删除我建议包含System.Collections.generic lib的内容 然后使用Listarray然后你可以使用array.RemoveAt(index);