对象引用有时设置为对象的实例(Unity)

时间:2015-10-12 23:17:37

标签: c# unity3d

我是C#和Unity的新手,他遇到了我无法解决的错误。

我有两个类,tileMap和rangeHandler。我在tileMap中有一个tileTypes数组,包含名称,对象和移动成本,我需要在rangeHandler中引用它来确定角色可以走多远。在tileMap中,我有一个函数(下面),它返回给定tile的moveCost,在pathfinding函数中使用时没有错误。

public float tileCost(int sourceX, int SourceY, int targetX, int targetY)
     {

         tileData td = tileTypes[tiles[targetX, targetY]];

         float cost = td.moveCost;

         if (canEnter(targetX, targetY) == false)
         {
             return Mathf.Infinity;
         }
         //cosmetic increase to movement cost for diagonals
         if(sourceX != targetX && SourceY != targetY)
         {
             cost += 0.001F;
         }

         return cost;
     }

然而,当我从rangeHandler调用这个相同的函数时,它告诉我tileTypes [tiles [targetX,targetY]]没有设置为对象的实例,即使tile [targetX,targetY]是用于的相同值寻找路径。下面是tileMap中调用tileCost的位置,然后是rangeHandler中调用的位置。

foreach (Node v in u.edges)
             {
                 //float alt = dist[u] + u.DistanceTo(v);
                 float alt = dist[u] + tileCost(u.x, u.y, v.x, v.y);
                 if (alt < dist[v])
                 {
                     dist[v] = alt;
                     prev[v] = u;
                 }
             }

和...

using System.Collections.Generic;
 using System.Linq;
 using UnityEngine;

 using Random = UnityEngine.Random;



 public class rangeHandler : MonoBehaviour
 {
     public tileMap map = new tileMap();
     public tileData td = new tileData();
     Dictionary<Node, Node> prev = new Dictionary<Node, Node>();
     Dictionary<Node, float> dist = new Dictionary<Node, float>();

     List<Node> unvisited = new List<Node>();



     public static bool[,] tilesHighlighted = null;





     public void getRange(int x, int y, int r)
      {
         r--;
          tilesHighlighted = new bool[tileMap.mapX, tileMap.mapY];
         foreach (Node v in tileMap.graph)
         {

                 dist[v] = Mathf.Infinity;
                 prev[v] = null;


             unvisited.Add(v);
         }



         //adds the source to the highlight array




         tilesHighlighted[x, y] = true;

          //then adds all adjacent tiles too


          foreach (Node n in tileMap.graph[x, y].edges)
          {



                 tilesHighlighted[n.x, n.y] = true;


                 dist[n] = map.tileCost(tileMap.graph[x, y].x, tileMap.graph[x, y].y, n.x, n.y);


                 extendRange(n.x, n.y, r, n);




          }
          map.generateRange(true);

      }

错误发生在tileCost()的第一行,我在Unity网站上没有得到任何答案。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为此行失败

 tileData td = tileTypes[tiles[targetX, targetY]];

tileTypes为null或tiles [targetX,targetY]为null。分成2行

var idx = tiles[targetX,targetY];
var td = tileTypes[idx];

这样您就可以看到哪一个为null并使用调试器来检查值