Прочитал про 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);
}
}
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);
}
}