0

部屋に 3 人のプレイヤーがいて、3 つのスポーン位置が設定されていますが、各プレイヤーが同じ位置ではなく、これらの位置のいずれかでスポーンされるようにしたいと考えています。これはわかりましたが、このスポーンポイントで別のプレイヤーがスポーンしないようにするにはどうすればよいですか?

number = UnityEngine.Random.Range(1, 3);


if (number == 1)
{    
     spawnpoint = GameObject.FindWithTag("spawnpoint1");
}


if (number == 2)
{
     spawnpoint = GameObject.FindWithTag("spawnpoint2");
}

if (number == 3)
{
     spawnpoint = GameObject.FindWithTag("spawnpoint3");
}

GameObject myPlayer = PhotonNetwork.Instantiate(playerprefabname, spawnpoint.transform.position, spawnpoint.transform.rotation, 0);
4

3 に答える 3

0

利用可能なスポーン位置のリストをスタックに入れます。新しい位置が必要な場合は、アイテムをスタックからポップし、そのスポーン位置を使用します。

プレイヤーよりも多くのスポーン位置を確保する必要があります - 明らかに。

また、毎回何らかの方法でスタックをランダム化したい場合もあります。

この概念を採用して、好きなデータ構造を使用できますが、重要な考え方は、リセットする準備ができるまで「消費された」要素を削除することです。

于 2015-10-21T18:18:04.890 に答える
0

スポーン ポイントの配列を作成し、それらをランダム化して、そこにオブジェクトをスポーンすることができます。この方法を使用すると、コードを変更することなく、必要な数のスポーン ポイントを設定できます。

using UnityEngine;
using System.Linq;

public class Test : MonoBehaviour {

    [SerializeField] Vector3[] spawnPoints;
    [SerializeField] GameObject spawnObject;


    void Start(){
        InitRandom ();
    }

    void InitRandom(){
        System.Random rnd = new System.Random ();
        Vector3[] items = (
            from i in spawnPoints
            orderby rnd.Next()
            select i
        ).ToArray();

        foreach (Vector3 v in items) {
            Instantiate(spawnObject, v, Quaternion.identity);
        }
    }
}
于 2015-10-22T00:43:25.847 に答える
0

ルームに接続しているプレイヤーの数を取得して、その数を使用して特定のスポーン ポイントを選択できます。

このようなもの -

var playerID = PhotonNetwork.otherPlayers.Length;
var player = PhotonNetwork.Instantiate(name, spawns[playerID].transform.position, spawns[playerID].transform.rotation, 0);
player.name = "Player " + (playerID + 1);
于 2018-04-10T10:42:02.413 に答える