- Home /
Object pool shooting not working
Hey there. So I'm trying out some software patterns in Unity and I'm currently trying to implement Object Pools. I have a class called FirstPersonController that handles all of the movement and camera movement, then I have an ObjectPool class and finally a Projectile class. The Projectile is a sphere game object I created. I basically want the sphere tied to where the camera is looking, but right now the sphere keeps on spawning in the center of the map. Not sure how to fix it. I'll post the classes below because I'm not sure if the error resides in Projectile class or the ObjectPool class.
I'm assuming its the Projectile as that is the sphere itself and it will be something to do with the position but not sure how to tie it to the camera. Thanks for any help.
Projectile class:
using UnityEngine;
using System.Collections;
public class Projectile : MonoBehaviour {
public float life = 2.0f;
public float speed = 10.0f;
private float timeToDie = 0.0f;
// Update is called once per frame
void Update ()
{
CountDown ();
AutoMove ();
}
public void Activated()
{
timeToDie = Time.time + life;
transform.position = Vector3.zero;
}
private void Deactivate()
{
this.gameObject.SetActive (false);
}
private void CountDown()
{
if(timeToDie < Time.time)
Deactivate();
}
private void AutoMove()
{
Vector3 velocity = speed * Time.deltaTime * transform.forward;
transform.Translate (velocity);
}
}
ObjectPool Class:
using UnityEngine;
using System.Collections;
public class ObjectPool : MonoBehaviour {
GameObject[] projectiles = null;
public int numberOfProjectilesToCreate = 0;
// Use this for initialization
void Start () {
projectiles = new GameObject[numberOfProjectilesToCreate];
InstantiateProjectiles();
}
// Update is called once per frame
void Update ()
{
if(Input.GetMouseButton(0))
{
ActivateProjectile();
}
}
private void InstantiateProjectiles()
{
for (int i = 0; i < numberOfProjectilesToCreate; i++)
{
projectiles[i] = Instantiate(Resources.Load("Prefabs/prefab_projectile")) as GameObject;
projectiles[i].SetActive(false);
}
}
private void ActivateProjectile()
{
for (int i = 0; i < numberOfProjectilesToCreate; i++)
{
if(projectiles[i].activeSelf == false)
{
projectiles[i].SetActive(true);
projectiles[i].GetComponent<Projectile>().Activated();
}
}
}
}
Your answer
Follow this Question
Related Questions
Start raycast from object 1 Answer
No collision on trigger and character controller 1 Answer
Calculate distance between AR object and camera 1 Answer
2d axis is not shown 1 Answer