1

メソッドを呼び出すことができる一般的なゲーム オブジェクトを返す関数を作成したいと考えています。これはうまくいきません。

ゲームの世界にさまざまなオブジェクトがあります。特定の場所で見つかったオブジェクトを返す、呼び出すことができる 1 つの関数が必要です。次に、見つかったオブジェクトの種類を確認します。各オブジェクトには、オブジェクトのタイプを返す GetObjectType メソッドがあります。

私はあなたが私の方法を送ることができるどんな助けにも感謝します. ご覧いただきありがとうございます。

GameObject spotObjectLocation1;

spotObjectLocation1 = GetObjectAtLocation(player.transform.position 
                                          + checkDirection);

// THIS IS WHAT I WANT TO DO THAT DOESN'T WORK
if (spotObjectLocation1.GetObjectType() == "box"){  }

GameObject GetObjectAtLocation(Vector3 location)
{
    GameObject[] objects = GameObject.FindGameObjectsWithTag("boxes");

    for (int i = 0; i < objects.Length; i++)
    {
        if (objects[i].transform.position.x == location.x 
            && objects[i].transform.position.z == location.z)
        {
            return objects[i];
        }
    }

    GameObject[] objects = GameObject.FindGameObjectsWithTag("blocks");

    for (int i = 0; i < objects.Length; i++)
    {
        if (objects[i].transform.position.x == location.x 
            && objects[i].transform.position.z == location.z)
        {
            return objects[i];
        }
    }
}

public class ObjectBox : MonoBehaviour {    
    public string GetObjectType()
    {
        return "box";   
    }
}

public class ObjectBlock : MonoBehaviour {  
    public string GetObjectType()
    {
        return "block"; 
    }
}
4

1 に答える 1

2

正確に何が機能しないのですか?

とにかく、適切な継承ツリーと「as」演算子を使用する方が良いでしょう。たとえば、すべてのボックス オブジェクトがクラス Box から継承されるようにします (複数のボックス オブジェクトがある場合)。

public class Box : GameObject
{
    ...
}

public class ObjectBox : Box
{
    ...
}

次に、"as" 演算子を使用して、GameObject がボックスかどうかを調べることができます。

GameObject spotObjectLocation1 = GetObjectAtLocation(player.transform.position + checkDirection);

Box b = spotObjectLocation1 as Box;
if (b != null)
    ...

また、このタイプのコードは、通常のポリモーフィズムで処理する方が適切な場合があります。オブジェクトが実際にボックスであることが判明した場合、そのオブジェクトをどうするかを考えてください。他のタイプのオブジェクトでもやりたいことはありますか? その場合、それらのオブジェクトはすべて、派生クラスがオーバーライドする可能性のある仮想メソッドまたは抽象メソッドを提供する共通の基本クラスから継承します。その後、クライアント コードは、オブジェクトの実際の型を知る必要なく、基本クラスを介してこれらのメソッドを簡単に呼び出すことができます。

于 2012-12-21T08:15:19.213 に答える