1

私は新進のプログラミング愛好家であり、学位を取得するために勉強しているゲームデザイナーであるため、プログラミングの世界ではまだまったく新しいです。私はかなりの量のJavaScript(実際にはUnityScript)を実行し、現在C#に手を出そうとしています。私は、UnityでターンベースのRPGを作成する、hakimioのチュートリアルに従っています。これは、A*パスファインディングを使用した六角形のグリッドに基づいています。(http://tbswithunity3d.wordpress.com/)

私の質問は、A *パスファインディングスクリプトとアセットを完成させるまで、彼のチュートリアルを段階的に実行したが、Unityでエラーが発生したことです。

「エラーCS0308:非ジェネリック型の`IHasNeighbours'は型引数と一緒に使用できません」

これは、次の行でエラーメッセージを表示するコードですpublic class Tile: GridObject, IHasNeighbours<Tile>

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

public class Tile: GridObject, IHasNeighbours<Tile>
{
public bool Passable;

public Tile(int x, int y)
    : base(x, y)
{
    Passable = true;
}

public IEnumerable AllNeighbours { get; set; }
public IEnumerable Neighbours
{
    get { return AllNeighbours.Where(o => o.Passable); }
}

public static List<Point> NeighbourShift
{
    get
    {
        return new List<Point>
        {
            new Point(0, 1),
            new Point(1, 0),
            new Point(1, -1),
            new Point(0, -1),
            new Point(-1, 0),
            new Point(-1, 1),
        };
    }
}
public void FindNeighbours(Dictionary<Point, Tile> Board, Vector2 BoardSize, bool EqualLineLengths)
{
    List<Tile> neighbours = new List<Tile>();

    foreach (Point point in NeighbourShift)
    {
        int neighbourX = X + point.X;
        int neighbourY = Y + point.Y;
        //x coordinate offset specific to straight axis coordinates
        int xOffset = neighbourY / 2;

        //if every second hexagon row has less hexagons than the first one, just skip the last one when we come to it
        if (neighbourY % 2 != 0 && !EqualLineLengths && neighbourX + xOffset == BoardSize.x - 1)
            continue;
        //check to determine if currently processed coordinate is still inside the board limits
        if (neighbourX >= 0 - xOffset &&
            neighbourX < (int)BoardSize.x - xOffset &&
            neighbourY >= 0 && neighbourY < (int)BoardSize.y)
            neighbours.Add(Board[new Point(neighbourX, neighbourY)]);
    }

    AllNeighbours = neighbours;
}
}

このエラーを回避する方法についてのヘルプや洞察をいただければ幸いです。このスクリプトを機能させるために過去数日間苦労してきましたが、チュートリアル(および私のプロジェクト)を続行することはできません。エラー。

みなさん、よろしくお願いします!

アーロン :)

4

1 に答える 1

1

問題は、IHasNeighboursが汎用インターフェースではないため、Tileクラスを渡した方法でクラスを渡すことができないことです。

IHasNeighboursインターフェイスを変更して汎用にするか、その後のTileクラスへの参照を削除する必要があります。解決策は、コードで何をする必要があるかによって異なります。:)

于 2012-05-31T09:07:07.207 に答える