Question by
jonesform · Apr 17, 2020 at 09:27 AM ·
transformobject pool
Stuck with OP, bullet go to top of screen not the way character is facing. and stop spawning.
been trying to use OP for the bullets as i hear its good to learn and use maybe for bigger and future projects.
the problem is the gun fires fine as first in the correct direction im facing and then it cuts out the bullets flash and dont always spawn properly and then the pooling stops until i change directions but when i do change direction the bullets just shoot to the top of the screen.
Pool Script
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class BulletPool : MonoBehaviour
{
public static BulletPool current;
public List pooledObjects;
public GameObject objectToPool;
public int amountToPool;
private void Awake()
{
current = this;
}
// Start is called before the first frame update
void Start()
{
pooledObjects = new List();
for (int i = 0; i < amountToPool; i++)
{
GameObject obj = (GameObject)Instantiate(objectToPool);
pooledObjects.Add(obj);
obj.transform.parent = this.transform;
obj.SetActive(false);
}
}
public GameObject GetPooledObject()
{
for (int i = 0; i < pooledObjects.Count; i++)
{
if (!pooledObjects[i].activeInHierarchy)
{
return pooledObjects[i];
}
}
return null;
}
// Update is called once per frame
void Update()
{
}
}
Collecting the bullet
using System.Collections;
using System.Collections.Generic;
using UnityEditorInternal;
using UnityEngine;
using UnityEngine.Assertions.Must;
public class Firing : MonoBehaviour
{
public GameObject firePoint;
public void Shoot()
{
GameObject obj = BulletPool.current.GetPooledObject();
if (obj != null)
{
obj.transform.position = firePoint.transform.position;
obj.transform.rotation = Quaternion.LookRotation(firePoint.transform.forward);
obj.SetActive(true);
}
}
}
Bullet Script
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class bullet : MonoBehaviour
{
public float speed = 20f;
Rigidbody rb;
public ParticleSystem hitFX;
// Start is called before the first frame update
void Start()
{
rb = GetComponent();
rb.velocity = transform.forward * speed *
Time.deltaTime;
}
private void Update()
{
transform.Rotate(5, 0, 0);
Invoke("BulletTimeout", 2f);
}
private void OnTriggerEnter(Collider other)
{
EnemyHealth enemy = other.GetComponent();
if (enemy != null)
{
Instantiate(hitFX, transform.position,
transform.rotation); enemy.TakeDamage(); BulletTimeout(); }
}
public void BulletTimeout()
{
gameObject.SetActive(false);
}
}
Movement Script
using System.Collections;
using System.Collections.Generic;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
Rigidbody player;
[SerializeField] float movementSpeed = 5;
public MobileJoyStick mobileJoyStick;
public MobileLookRottation mobileLookRottation;
Firing fireZone;
private Vector3 direction;
private Vector3 rotation;
public float FireRate;
float LastShot = 0;
// Start is called before the first frame update
void Start()
{
player = GetComponent();
fireZone = GetComponent();
}
// Update is called once per frame
void Update()
{
direction = mobileJoyStick.inputVector;
rotation = mobileLookRottation.inputVector;
transform.position += direction * movementSpeed *
Time.deltaTime;
if (rotation.sqrMagnitude > 0)
{
transform.rotation = Quaternion.LookRotation(rotation);
if (LastShot + FireRate <= Time.time)
{
fireZone.Shoot();
LastShot = Time.time;
}
}
}
private void FixedUpdate()
{
}
}
Many thanks in advance.
Comment