Создайте несколько разных префабов, каждый в одной позиции с Unity Mapbox SDK - PullRequest
0 голосов
/ 01 мая 2018

Я работаю в игре Unity с Mapbox SDK. У меня есть этот скрипт для появления на карте только одного сборного в нескольких позициях. Как я могу создать несколько разных префабов, каждый в одной позиции?

public class SpawnOnMap : MonoBehaviour
{
    [SerializeField]
    AbstractMap _map;

    [SerializeField]
    [Geocode]
    string[] _locationStrings;
    Vector2d[] _locations;

    [SerializeField]
    float _spawnScale = 100f;

    [SerializeField]
    GameObject _markerPrefab;

    List<GameObject> _spawnedObjects;

    void Start()
    {
        _locations = new Vector2d[_locationStrings.Length];
        _spawnedObjects = new List<GameObject>();
        for (int i = 0; i < _locationStrings.Length; i++)
        {
            var locationString = _locationStrings[i];
            _locations[i] = Conversions.StringToLatLon(locationString);
            var instance = Instantiate(_markerPrefab);
            instance.transform.localPosition = _map.GeoToWorldPosition(_locations[i], true);
            instance.transform.localScale = new Vector3(_spawnScale, _spawnScale, _spawnScale);
            _spawnedObjects.Add(instance);
        }
    }

    private void Update()
    {
        int count = _spawnedObjects.Count;
        for (int i = 0; i < count; i++)
        {
            var spawnedObject = _spawnedObjects[i];
            var location = _locations[i];
            spawnedObject.transform.localPosition = _map.GeoToWorldPosition(location, true);
            spawnedObject.transform.localScale = new Vector3(_spawnScale, _spawnScale, _spawnScale);
        }
    }
}

1 Ответ

0 голосов
/ 01 мая 2018

Я использую структуру для координат:

public struct Point
    {
        /// <summary>
        /// The x position
        /// </summary>
        public int X { get; set; }

        /// <summary>
        /// The y position
        /// </summary>
        public int Y { get; set; }

        /// <summary>
        /// Sets the values of the struct
        /// </summary>
        /// <param name="x">initial x</param>
        /// <param name="y">initial y</param>
        public Point(int x, int y)
        {
            this.X = x;
            this.Y = y;
        }
}

Тогда я использовал эту структуру из другого класса, blueSpawn и redSpawn - это разные точки и Вы можете использовать разные префабы для них, например:

другой класс:

 private Point blueSpawn, redSpawn;
            //this the method for your question
             private void SpawnPortals()
                {
                    //Spawns the blue portal
                    blueSpawn = new Point(0, 0);
                    Instantiate(bluePortalPrefab, Tiles[BlueSpawn].GetComponent<TileScript>().WorldPosition, Quaternion.identity);
                    //GameObject tmp = (GameObject)Instantiate(bluePortalPrefab, Tiles[BlueSpawn].GetComponent<TileScript>().WorldPosition, Quaternion.identity);
                   //You can save like a "tmp" if you need. 

                    //Spawns the red portal
                    redSpawn = new Point(11, 6);
                    Instantiate(redPortalPrefab, Tiles[redSpawn].GetComponent<TileScript>().WorldPosition, Quaternion.identity);
                }

TileScript и Portal являются другими классами, но вы можете их игнорировать. Кстати, вы можете вызвать этот метод в Start ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...