Войти
ПрограммированиеФорумОбщее

У меня какая-то дичь, стреляю и удаляется пуля, помогите.

Страницы: 1 2 Следующая »
#0
22:23, 4 апр. 2021

Не понимаю из-за чего это происходит.

Вот скрипт:

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";
    }
}

#1
(Правка: 23:14) 23:12, 4 апр. 2021

>> удаляется пуля

AMMO--;

два минуса означает вычесть единицу из переменной.

#2
23:15, 4 апр. 2021

3dhater
Так да,

public int AMMO = 15;
и когда я стреляю пуля вычитается
AMMO--;
#3
(Правка: 23:18) 23:18, 4 апр. 2021

Mr_Kapitoshka

попробуй так

--AMMO;
#4
(Правка: 23:22) 23:19, 4 апр. 2021

а что если пуля спаунится в мире, тут же коллайдится с чем то из:

- модель оружия
- модель игрока
- капсулы для коллижена

и тут же уничтожается, думая что она долетела до цели?

edit:

или например здесь:

Instantiate(BulletPrefab, Bullet.transform.position, Bullet.transform.rotation);

непонятно откуда берутся

Bullet.transform.position
и
Bullet.transform.rotation
? Вдруг они дефолтные и пуля сразу спаунится в 0, 0, 0 и ты ее просто не видишь?

#5
23:25, 4 апр. 2021

Oleg Linkov
Префаб пули берет позицию с настоящей

Bullet.transform.position
Так же и тут
Bullet.transform.rotation
префаб пули берет поворот
#6
23:29, 4 апр. 2021

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;
        }
    }
 
#7
23:37, 4 апр. 2021

Это не то о чем я тебя спросил. Я вижу только объявление Bullet, но никакой инициации положения/вращения. В итоге когда ты делаешь Instantiate, у тебя в BulletPrefab какие значения копируются?

#8
23:41, 4 апр. 2021

Oleg Linkov
Ну у меня есть пуля настоящая, не префаб у неё есть положение и вращение и префаб копирует это все с нее

#9
23:47, 4 апр. 2021

Mr_Kapitoshka

Ну у меня есть пуля настоящая, не префаб у неё есть положение и вращение и префаб копирует это все с нее

ну допустим. тогда получается что префаб появляется в том же месте где и пуля, может они сталкиваются и префаб уничтожается, никуда не полетев?

#10
23:50, 4 апр. 2021

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;
        }
    }
#11
23:59, 4 апр. 2021

попробуй вместо

Text.text = "Kills:" + KillingZombie;

написать

Text.text = "Kills: " + (KillingZombie.toString());

и в старте и в OnTriggerEnter

#12
0:08, 5 апр. 2021

Oleg Linkov
Спасибо заранее, просто завтра посмотрю комп уже вырубил, и если это не поможет , то если не сложно можете написать код где за то что пуля попала в enemy прибавлялось 1 очко и писалось это на экране.

#13
0:11, 5 апр. 2021

давай ты проверь сперва, а потом уже посмотрим

#14
0:13, 5 апр. 2021

Oleg Linkov
Окей, тогда завтра и проверю.

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее