- Home /
Question by
Nandha · Nov 30, 2020 at 10:30 AM ·
scripting problemspawning problems
Hello Friends, When I am trying to shoot, my bullet only goes on one side. Even I turn my Player my bullet doesn't turn, it's only move on one direction. I dont know What to do? Please help Me?
My scripts given below for bulletmove and spawningbullet`using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Collections.Generic;
public class ProjectileMoveScript : MonoBehaviour {
public float speed;
[Tooltip("From 0% to 100%")]
public float accuracy;
public float fireRate;
public GameObject muzzlePrefab;
public GameObject hitPrefab;
public AudioClip shotSFX;
public AudioClip hitSFX;
public List<GameObject> trails;
private float speedRandomness;
private Vector3 offset;
private bool collided;
void Start () {
if (accuracy != 100) {
accuracy = 1 - (accuracy / 100);
for (int i = 0; i < 2; i++) {
var val = 1 * Random.Range (-accuracy, accuracy);
var index = Random.Range (0, 2);
if (i == 0) {
if (index == 0)
offset = new Vector3 (0, -val, 0);
else
offset = new Vector3 (0, val, 0);
} else {
if (index == 0)
offset = new Vector3 (0, offset.y, -val);
else
offset = new Vector3 (0, offset.y, val);
}
}
}
if (muzzlePrefab != null) {
var muzzleVFX = Instantiate (muzzlePrefab, transform.position, Quaternion.identity);
muzzleVFX.transform.forward = gameObject.transform.forward + offset;
var ps = muzzleVFX.GetComponent<ParticleSystem>();
if (ps != null)
Destroy (muzzleVFX, ps.main.duration);
else {
var psChild = muzzleVFX.transform.GetChild(0).GetComponent<ParticleSystem>();
Destroy (muzzleVFX, psChild.main.duration);
}
}
if (shotSFX != null && GetComponent<AudioSource>()) {
GetComponent<AudioSource> ().PlayOneShot (shotSFX);
}
}
void Update () {
if (speed != 0)
transform.position += (transform.forward + offset) * (speed * Time.deltaTime);
}
void OnCollisionEnter (Collision co) {
if (co.gameObject.tag != "Bullet" && !collided) {
collided = true;
if (shotSFX != null && GetComponent<AudioSource>()) {
GetComponent<AudioSource> ().PlayOneShot (hitSFX);
}
if (trails.Count > 0) {
for (int i = 0; i < trails.Count; i++) {
trails [i].transform.parent = null;
var ps = trails [i].GetComponent<ParticleSystem> ();
if (ps != null) {
ps.Stop ();
Destroy (ps.gameObject, ps.main.duration + ps.main.startLifetime.constantMax);
}
}
}
speed = 0;
GetComponent<Rigidbody> ().isKinematic = true;
ContactPoint contact = co.contacts [0];
Quaternion rot = Quaternion.FromToRotation (Vector3.up, contact.normal);
Vector3 pos = contact.point;
if (hitPrefab != null) {
var hitVFX = Instantiate (hitPrefab, pos, rot);
var ps = hitVFX.GetComponent<ParticleSystem> ();
if (ps == null) {
var psChild = hitVFX.transform.GetChild (0).GetComponent<ParticleSystem> ();
Destroy (hitVFX, psChild.main.duration);
} else
Destroy (hitVFX, ps.main.duration);
}
StartCoroutine (DestroyParticle (0f));
}
}
public IEnumerator DestroyParticle (float waitTime) {
if (transform.childCount > 0 && waitTime != 0) {
List<Transform> tList = new List<Transform> ();
foreach (Transform t in transform.GetChild(0).transform) {
tList.Add (t);
}
while (transform.GetChild(0).localScale.x > 0) {
yield return new WaitForSeconds (0.01f);
transform.GetChild(0).localScale -= new Vector3 (0.1f, 0.1f, 0.1f);
for (int i = 0; i < tList.Count; i++) {
tList[i].localScale -= new Vector3 (0.1f, 0.1f, 0.1f);
}
}
}
yield return new WaitForSeconds (waitTime);
Destroy (gameObject);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SpawnProjectilesScript : MonoBehaviour {
public GameObject firePoint;
public List<GameObject> VFXs = new List<GameObject> ();
private float timeToFire = 0f;
private GameObject effectToSpawn;
void Start () {
Application.targetFrameRate = 60;
effectToSpawn = VFXs[0];
}
void Update () {
if (Input.GetKey (KeyCode.Space) && Time.time >= timeToFire || Input.GetMouseButton (0) && Time.time >= timeToFire) {
timeToFire = Time.time + 1f / effectToSpawn.GetComponent<ProjectileMoveScript>().fireRate;
SpawnVFX ();
}
}
public void SpawnVFX () {
GameObject vfx;
if (firePoint != null) {
vfx = Instantiate (effectToSpawn, firePoint.transform.position, Quaternion.identity);
}
else
vfx = Instantiate (effectToSpawn);
var ps = vfx.GetComponent<ParticleSystem> ();
if (vfx.transform.childCount > 0) {
ps = vfx.transform.GetChild (0).GetComponent<ParticleSystem> ();
}
}
}
Comment