视频教程:
在层次结构中,我有两个空的GameObject,其中一个名为Object Pooler,第二个名为Cube Spawner。
在Object Pooler中附加了脚本名称ObjectPooler:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectPooler : MonoBehaviour
{
[System.Serializable]
public class Pool
{
public string tag;
public GameObject prefab;
public int size;
}
#region Singleton
public static ObjectPooler Instance;
private void Awake()
{
Instance = this;
}
#endregion
public List<Pool> pools;
public Dictionary<string, Queue<GameObject>> poolDictionary;
// Start is called before the first frame update
void Start()
{
poolDictionary = new Dictionary<string, Queue<GameObject>>();
foreach(Pool pool in pools)
{
Queue<GameObject> objectPool = new Queue<GameObject>();
for(int i = 0; i < pool.size; i++)
{
GameObject obj = Instantiate(pool.prefab);
obj.SetActive(false);
objectPool.Enqueue(obj);
}
poolDictionary.Add(pool.tag, objectPool);
}
}
public GameObject SpawnFromPool(string tag, Vector3 position, Quaternion rotation)
{
if(!poolDictionary.ContainsKey(tag))
{
Debug.LogWarning("Pool with tag " + tag + " doesn't exist.");
return null;
}
GameObject objectToSpawn = poolDictionary[tag].Dequeue();
objectToSpawn.SetActive(true);
objectToSpawn.transform.position = position;
objectToSpawn.transform.rotation = rotation;
IPooledObject pooledObj = objectToSpawn.GetComponent<IPooledObject>();
if(pooledObj != null)
{
pooledObj.OnObjectSpawn();
}
poolDictionary[tag].Enqueue(objectToSpawn);
return objectToSpawn;
}
}
在多维数据集Spawner上附加了一个脚本名称CubeSpawner:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeSpawner : MonoBehaviour
{
ObjectPooler objectPooler;
// Start is called before the first frame update
void Start()
{
objectPooler = ObjectPooler.Instance;
}
private void FixedUpdate()
{
objectPooler.SpawnFromPool("Cube", transform.position, Quaternion.identity);
}
}
我有一个带有Rigidbody组件和脚本名称Cube的Cube预制件:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Cube : MonoBehaviour , IPooledObject
{
public float upForce = 1f;
public float sideForce = .1f;
// Start is called before the first frame update
public void OnObjectSpawn()
{
float xForce = Random.Range(-sideForce, sideForce);
float yForce = Random.Range(upForce / 2f, upForce);
float zForce = Random.Range(-sideForce, sideForce);
Vector3 force = new Vector3(xForce, yForce, zForce);
GetComponent<Rigidbody>().velocity = force;
}
}
在教学视频中,对象生成的效果如下:
这是我在编辑器中运行游戏时的效果:
多维数据集预制件上的刚体,因为我没有更改任何值,所以我刚刚附加了它。
答案 0 :(得分:1)
可能是因为您的多维数据集的刚体与本教程中的刚体不具有相同的质量,因此添加相同的力将导致不同的结果。你能检查一下吗?