using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Pool; public class SpawnRB : MonoBehaviour { public Body m_Rigidbody; public ObjectPool m_Pool; public float m_SpawnTime; public int m_DefaultPoolCapacity; public int m_MaxPoolCapacity; private Vector3 m_PelvisPosition; private void Start() { if (m_Rigidbody == null) Debug.Log($"Rigidbody is null"); m_Pool = new ObjectPool(CreateBody, OnTakeBodyFromPool, OnReturnBodyToPool, OnDestroyBody, true, m_DefaultPoolCapacity, m_MaxPoolCapacity); StartCoroutine(Spawn()); } private Body CreateBody() { Vector3 spawnPos = this.transform.position; Body body = Instantiate(m_Rigidbody, spawnPos, new Quaternion(Random.Range(0, 180), Random.Range(0, 180), Random.Range(0, 180), Random.Range(0, 180))); body.m_Pelvis.gameObject.GetComponent().AddForce(new Vector3(1, 1, 1)); m_PelvisPosition = body.m_Pelvis.position; body.SetPool(m_Pool); return body; } private void OnTakeBodyFromPool(Body body) { body.m_Pelvis.transform.position = m_PelvisPosition; body.gameObject.SetActive(true); } private void OnReturnBodyToPool(Body body) { body.gameObject.SetActive(false); } private void OnDestroyBody(Body body) { Destroy(body.gameObject); } IEnumerator Spawn() { yield return new WaitForSecondsRealtime(m_SpawnTime); m_Pool.Get(); StartCoroutine(Spawn()); } }