Не понимаю из-за чего это происходит.
Вот скрипт:
using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; using UnityEngine.SceneManagement; using UnityEngine.UI; public class Shot : MonoBehaviour { public GameObject Bullet; public GameObject BulletPrefab; public TextMeshProUGUI Text; //AMMO public int AMMO = 15; public int MAXCLIP = 30; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if(Input.GetMouseButtonDown(0)){ if(AMMO > 0){ AMMO--; Instantiate(BulletPrefab, Bullet.transform.position, Bullet.transform.rotation); } } Text.text = "AMMO: "+ (AMMO) +"/30"; } }
>> удаляется пуля
AMMO--;
два минуса означает вычесть единицу из переменной.
3dhater
Так да,
public int AMMO = 15;
и когда я стреляю пуля вычитается
AMMO--;
Mr_Kapitoshka
попробуй так
--AMMO;
а что если пуля спаунится в мире, тут же коллайдится с чем то из:
- модель оружия
- модель игрока
- капсулы для коллижена
и тут же уничтожается, думая что она долетела до цели?
edit:
или например здесь:
Instantiate(BulletPrefab, Bullet.transform.position, Bullet.transform.rotation);
непонятно откуда берутся
Bullet.transform.position
и
Bullet.transform.rotation
? Вдруг они дефолтные и пуля сразу спаунится в 0, 0, 0 и ты ее просто не видишь?
Oleg Linkov
Префаб пули берет позицию с настоящей
Bullet.transform.position
Так же и тут
Bullet.transform.rotation
префаб пули берет поворот
3dhater
Все спасибо помог, но возникла еще одна ошибка я не могу передать вручную в префаб текст, как можно сделать через скрипт?
Сам скрипт:
using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; using UnityEngine.SceneManagement; using UnityEngine.UI; public class Bullet : MonoBehaviour { public float speed = 20; private int bob = 1000; public int KillingZombie = 0; public TextMeshProUGUI Text; // Start is called before the first frame update void Start() { Text = gameObject.GetComponent<TextMeshProUGUI>(); Text.text = "Kills:" + KillingZombie; } // Update is called once per frame void Update() { transform.Translate(Vector3.forward * Time.deltaTime * speed); if((transform.position.x > bob || transform.position.x < -bob) || (transform.position.y > bob || transform.position.y < -bob) || (transform.position.z > bob || transform.position.z < -bob)){ Destroy(gameObject); } } void OnTriggerEnter(Collider Other){ if(Other.gameObject.CompareTag ("Enemy")){ Destroy(gameObject); Destroy(Other.gameObject); KillingZombie += 1; Text.text = "Kills:" + KillingZombie; } }
Это не то о чем я тебя спросил. Я вижу только объявление Bullet, но никакой инициации положения/вращения. В итоге когда ты делаешь Instantiate, у тебя в BulletPrefab какие значения копируются?
Oleg Linkov
Ну у меня есть пуля настоящая, не префаб у неё есть положение и вращение и префаб копирует это все с нее
Mr_Kapitoshka
Ну у меня есть пуля настоящая, не префаб у неё есть положение и вращение и префаб копирует это все с нее
ну допустим. тогда получается что префаб появляется в том же месте где и пуля, может они сталкиваются и префаб уничтожается, никуда не полетев?
Oleg Linkov
Возможно, хорошо я это попробую исправить, но помоги у меня ещё какая-то ошибка я не могу передать вручную в префаб текст, как можно сделать через скрипт?
Сам скрипт:
using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; using UnityEngine.SceneManagement; using UnityEngine.UI; public class Bullet : MonoBehaviour { public float speed = 20; private int bob = 1000; public int KillingZombie = 0; public TextMeshProUGUI Text; // Start is called before the first frame update void Start() { Text = gameObject.GetComponent<TextMeshProUGUI>(); Text.text = "Kills:" + KillingZombie; } // Update is called once per frame void Update() { transform.Translate(Vector3.forward * Time.deltaTime * speed); if((transform.position.x > bob || transform.position.x < -bob) || (transform.position.y > bob || transform.position.y < -bob) || (transform.position.z > bob || transform.position.z < -bob)){ Destroy(gameObject); } } void OnTriggerEnter(Collider Other){ if(Other.gameObject.CompareTag ("Enemy")){ Destroy(gameObject); Destroy(Other.gameObject); KillingZombie += 1; Text.text = "Kills:" + KillingZombie; } }
попробуй вместо
Text.text = "Kills:" + KillingZombie;
написать
Text.text = "Kills: " + (KillingZombie.toString());
и в старте и в OnTriggerEnter
Oleg Linkov
Спасибо заранее, просто завтра посмотрю комп уже вырубил, и если это не поможет , то если не сложно можете написать код где за то что пуля попала в enemy прибавлялось 1 очко и писалось это на экране.
давай ты проверь сперва, а потом уже посмотрим
Oleg Linkov
Окей, тогда завтра и проверю.
Тема в архиве.