Спавн астероидов

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Спавн астероидов

Сообщение ToxWill 21 авг 2018, 12:34

Тут нашел скрипт спавна астероидов в случайном месте... Всё отлично работает НО! астероиды спавнятся так, чтоб образуют куб.... А как сделать чтоб было похоже на сферу?
Прочитал про Random.insideUnitSphere, но не могу понять как это в этот скрипт запихать?
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class AsteroidManager : NetworkBehaviour
{
        [SerializeField] Asteroid asteroidPrefab;
        [SerializeField] GameObject pickupPrefab;
        [SerializeField] int numberOfAsteroidsOnAnAxis = 10;
        [SerializeField] int gridSpacing = 100;

        List<Asteroid> asteroid = new List<Asteroid>();
   
    void OnEnable()
        {
        EventManager.onStartGame += PlaceAsteroids;
        EventManager.onPlayerDeath += DestroyAsteroids;
        EventManager.onReSpawnPickup += PlacePickup;
    }

    void OnDisable()
    {
        EventManager.onStartGame -= PlaceAsteroids;
        EventManager.onPlayerDeath -= DestroyAsteroids;
        EventManager.onReSpawnPickup -= PlacePickup;
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.L))
        {
            CmdSpawnPickup();
        }
    }

    [Command]
    void CmdSpawnAsteroids()
    {
        for (int x = 0; x < numberOfAsteroidsOnAnAxis; x++)
            for (int y = 0; y < numberOfAsteroidsOnAnAxis; y++)
                for (int z = 0; z < numberOfAsteroidsOnAnAxis; z++)
                    InstantiateAsteroid(x, y, z);

        PlacePickup();
    }

    public void PlaceAsteroids()
        {
        CmdSpawnAsteroids();
    }

        public void DestroyAsteroids()
        {
                foreach (Asteroid ast in asteroid)
                        ast.SelfDestruct();
                asteroid.Clear();
        }

        void InstantiateAsteroid(int x, int y, int z)
        {
                Asteroid temp = Instantiate (asteroidPrefab, new Vector3
                        (transform.position.x + (x * gridSpacing) + AsteroidOffset(),
                         transform.position.y + (y * gridSpacing) + AsteroidOffset(),
                         transform.position.z + (z * gridSpacing) + AsteroidOffset()),
                        Quaternion.identity, transform) as Asteroid;
                temp.name = "Asteroid: " + x + "-" + y + "-" + z;
                asteroid.Add(temp);
        NetworkServer.Spawn(temp.gameObject);
    }

    public void PlacePickup()
        {
        CmdSpawnPickup();
        //CmdSpawnAsteroids();
        //Debug.Log ("Destroy: " + asteroid [rnd].name);

    }

    [Command]
    void CmdSpawnPickup()
    {
        int rnd = Random.Range(0, asteroid.Count);
        GameObject go = Instantiate(pickupPrefab, asteroid[rnd].transform.position, Quaternion.identity);
        NetworkServer.Spawn(go);
        print(go);
        Destroy(asteroid[rnd].gameObject);
        asteroid.RemoveAt(rnd);
    }

        float AsteroidOffset()
        {
                return Random.Range (-gridSpacing / 2f, gridSpacing/2f);
        }
}
 
ToxWill
UNец
 
Сообщения: 20
Зарегистрирован: 04 фев 2016, 15:21

Re: Спавн астероидов

Сообщение 1max1 21 авг 2018, 12:56

Синтаксис:
Используется csharp
asteroid.transform.position = Random.onUnitSphere * radius;

Или так:
Синтаксис:
Используется csharp
asteroid.transform.position = Random.insideUnitSphere * radius;

Но тогда астероиды могут быть и внутри сферы, а не только на ее поверхности...
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 18