Проблема со стрельбой C#

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Проблема со стрельбой C#

Сообщение ollkill 07 фев 2013, 10:49

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Fire : MonoBehaviour
{

    public GameObject _bulletPrefab;
        public int Pover;
       
    void Update ()
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
                       
        {
                        FireBullet();          
        }
    }
       
        void FireBullet()
        {
                Transform boolet = (Transform) Instantiate(_bulletPrefab, GameObject.Find("BulletSpavn").transform.position, Quaternion.identity);
        boolet.rigidbody.AddForce(transform.forward * Pover);  
        }
       
       
}
 

Вылетает с ошибкой (Смотри прикрепленную картинку) Снаряд не летит(
Подскажите где косяк
У вас нет доступа для просмотра вложений в этом сообщении.
Последний раз редактировалось ollkill 07 фев 2013, 10:57, всего редактировалось 1 раз.
ollkill
UNIт
 
Сообщения: 50
Зарегистрирован: 07 фев 2013, 10:42
Откуда: Москва
  • Сайт
  • ICQ

Re: Проблема со стрельбой C#

Сообщение seaman 07 фев 2013, 11:02

В (Transform) GameObject в трансформ не преобразовать.
Синтаксис:
Используется csharp
void FireBullet()
{
    Transform boolet = ((GameObject ) Instantiate(_bulletPrefab, GameObject.Find("BulletSpavn").transform.position, Quaternion.identity)).transform;
    boolet.rigidbody.AddForce(transform.forward * Pover);  
}


PS^
Синтаксис:
Используется csharp
Transform boolet = Instantiate(_bulletPrefab, GameObject.Find("BulletSpavn").transform.position, Quaternion.identity) as Transform;

вернет null
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Проблема со стрельбой C#

Сообщение BornFoRdeatH 07 фев 2013, 11:03

_bulletPrefab у вас геймобжект и трансформом он быть не может

seaman писал(а):PS^

сегодня сутки не спал, немного невнимателен, но я исправляюсь
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: Проблема со стрельбой C#

Сообщение ollkill 08 фев 2013, 09:58

BornFoRdeatH писал(а):_bulletPrefab у вас геймобжект и трансформом он быть не может

seaman писал(а):PS^

сегодня сутки не спал, немного невнимателен, но я исправляюсь


Блин, это я уже понял, но повторюсь, опыт разработки - неделя!!! Разжуйте пожалуйста как школьнику как правильно написать, смысл ошибки понял, но возможность исправить - ни капли. ~x(
ollkill
UNIт
 
Сообщения: 50
Зарегистрирован: 07 фев 2013, 10:42
Откуда: Москва
  • Сайт
  • ICQ

Re: Проблема со стрельбой C#

Сообщение ollkill 08 фев 2013, 10:30

seaman писал(а):В (Transform) GameObject в трансформ не преобразовать.
Синтаксис:
Используется csharp
void FireBullet()
{
    Transform boolet = ((GameObject ) Instantiate(_bulletPrefab, GameObject.Find("BulletSpavn").transform.position, Quaternion.identity)).transform;
    boolet.rigidbody.AddForce(transform.forward * Pover);  
}


PS^
Синтаксис:
Используется csharp
Transform boolet = Instantiate(_bulletPrefab, GameObject.Find("BulletSpavn").transform.position, Quaternion.identity) as Transform;

вернет null




все бы хорошо, но вот только вылетает все с той же нул референс ошибкой...
ollkill
UNIт
 
Сообщения: 50
Зарегистрирован: 07 фев 2013, 10:42
Откуда: Москва
  • Сайт
  • ICQ

Re: Проблема со стрельбой C#

Сообщение seaman 08 фев 2013, 10:54

1.
Разжуйте пожалуйста как школьнику как правильно написать

Вроде написал сразу...
2.
вылетает все с той же нул референс ошибкой

Сделали как я написал?
Синтаксис:
Используется csharp
Transform boolet = ((GameObject ) Instantiate(_bulletPrefab, GameObject.Find("BulletSpavn").transform.position, Quaternion.identity)).transform;

BulletSpavn присутствует?
В _bulletPrefab объект перетащен?
На префабе ригидбоди есть?
На какой строке ошибка?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Проблема со стрельбой C#

Сообщение ollkill 08 фев 2013, 11:18

seaman писал(а):1.
Разжуйте пожалуйста как школьнику как правильно написать

Вроде написал сразу...
2.
вылетает все с той же нул референс ошибкой

Сделали как я написал?
Синтаксис:
Используется csharp
Transform boolet = ((GameObject ) Instantiate(_bulletPrefab, GameObject.Find("BulletSpavn").transform.position, Quaternion.identity)).transform;

BulletSpavn присутствует?
В _bulletPrefab объект перетащен?
На префабе ригидбоди есть?
На какой строке ошибка?


ошибка на этой:
Синтаксис:
Используется csharp
Transform boolet = ((GameObject ) Instantiate(_bulletPrefab, GameObject.Find("BulletSpavn").transform.position, Quaternion.identity)).transform;

Все присутствует и перетащено, проверил 100500 раз.
Ригидбоди тоже есть, гравитация отключена правда.
Перезапустил юнити, ошибка исчезла, просто снаряд появляется в точке и не летит никуда, сила 1000.
Последний раз редактировалось ollkill 08 фев 2013, 11:36, всего редактировалось 1 раз.
ollkill
UNIт
 
Сообщения: 50
Зарегистрирован: 07 фев 2013, 10:42
Откуда: Москва
  • Сайт
  • ICQ

Re: Проблема со стрельбой C#

Сообщение seaman 08 фев 2013, 11:27

Разбейте на две строки:
Синтаксис:
Используется csharp
GameObject go = (GameObject ) Instantiate(_bulletPrefab, GameObject.Find("BulletSpavn").transform.position, Quaternion.identity);
Transform boolet = go.transform;

PS^ BulletSpavn - это имя объекта, не тег.
Проверьте буквы. Может все же BulletSpawn
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Проблема со стрельбой C#

Сообщение ollkill 08 фев 2013, 11:48

seaman писал(а):Разбейте на две строки:
Синтаксис:
Используется csharp
GameObject go = (GameObject ) Instantiate(_bulletPrefab, GameObject.Find("BulletSpavn").transform.position, Quaternion.identity);
Transform boolet = go.transform;

PS^ BulletSpavn - это имя объекта, не тег.
Проверьте буквы. Может все же BulletSpawn


Код твой вставил копипастом.
Все объекты сцены пересобрал заново.


GameObject->Create Empty-> Переименовал в BulletSpavn копипастом для большей уверенности.
Но даже с этим кодом нехотить( Возможно что просто из-за кучи изменений сам проект подвис? Я его как создал неделю назад, так в нем и верчу кучу всякого шлака, все что вижу или в голову приходит пытаюсь проверить и сделать. Учусь так сказать.
Последний раз редактировалось ollkill 08 фев 2013, 12:30, всего редактировалось 1 раз.
ollkill
UNIт
 
Сообщения: 50
Зарегистрирован: 07 фев 2013, 10:42
Откуда: Москва
  • Сайт
  • ICQ

Re: Проблема со стрельбой C#

Сообщение seaman 08 фев 2013, 12:03

даже с этим кодом нехотить

Что значит нехотить?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Проблема со стрельбой C#

Сообщение AndreyMust19 08 фев 2013, 12:15

GameObject.Find("BulletSpavn").transform.position

Так делать неправильно. Find же не всегда возвращает валидное значение - может вернуть null если объект не найден. Это transform у объекта есть всегда.
Синтаксис:
Используется csharp
GameObject findObj = GameObject.Find("BulletSpavn").
if (findObj != null) {
        GameObject go = (GameObject ) Instantiate(_bulletPrefab, findObj.transform.position, Quaternion.identity);
        Transform boolet = go.transform;
}

По-хорошему в Awake надо еще убедиться что _bulletPrefab != null, а то и здесь может вылететь ошибка.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Проблема со стрельбой C#

Сообщение ollkill 08 фев 2013, 12:32

AndreyMust19 писал(а):
GameObject.Find("BulletSpavn").transform.position

Так делать неправильно. Find же не всегда возвращает валидное значение - может вернуть null если объект не найден. Это transform у объекта есть всегда.
Синтаксис:
Используется csharp
GameObject findObj = GameObject.Find("BulletSpavn").
if (findObj != null) {
        GameObject go = (GameObject ) Instantiate(_bulletPrefab, findObj.transform.position, Quaternion.identity);
        Transform boolet = go.transform;
}

По-хорошему в Awake надо еще убедиться что _bulletPrefab != null, а то и здесь может вылететь ошибка.



Может быть лучше вместо финд задать глобальную переменную в которую перетащить объект в редакторе? Или это абсолютно ничего не изменит?
ollkill
UNIт
 
Сообщения: 50
Зарегистрирован: 07 фев 2013, 10:42
Откуда: Москва
  • Сайт
  • ICQ

Re: Проблема со стрельбой C#

Сообщение ollkill 08 фев 2013, 12:39

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Fire : MonoBehaviour
{

    public GameObject _bulletPrefab;
        GameObject findObj;
       
    void Update ()
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
                       
        {
                        FireBullet();  
        }
    }
       
        void FireBullet()
        {
                if(_bulletPrefab != null)
                {
                        findObj = GameObject.Find("BulletSpavn");

                        if (findObj != null)
                        {
                        GameObject go = (GameObject ) Instantiate(_bulletPrefab, findObj.transform.position, Quaternion.identity);
                        Transform boolet = go.transform;
                        }
                }
        }      
}
 


Теперь ошибки нет, но снаряд просто появляется в том месте куда смотрю, движения нет. ~x(
ollkill
UNIт
 
Сообщения: 50
Зарегистрирован: 07 фев 2013, 10:42
Откуда: Москва
  • Сайт
  • ICQ

Re: Проблема со стрельбой C#

Сообщение ollkill 08 фев 2013, 13:15


Вот что происходит после изменения некоторого.... А хотелось бы чтоб все летоло по человечески(((((

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Firee : MonoBehaviour
{

    public GameObject _bulletPrefab;
    public int Pover;
       
    void Update ()
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
                       
        {
                FireBullet();          
        }
    }
       
        void FireBullet()
        {
                if(_bulletPrefab !=null)
                {
                Transform boolet = ((GameObject) Instantiate(_bulletPrefab, GameObject.Find("BulletSpavn").transform.position, Quaternion.identity)).transform;
                boolet.rigidbody.AddForce(transform.forward * Pover);  
                }
        }
       
       
}
ollkill
UNIт
 
Сообщения: 50
Зарегистрирован: 07 фев 2013, 10:42
Откуда: Москва
  • Сайт
  • ICQ

Re: Проблема со стрельбой C#

Сообщение AndreyMust19 08 фев 2013, 16:10

Уберите галочку Gravity в префабе пули. Уменьшите массу пули или увеличьте силу. Удаляйте выпущенные пули после столкновения с объектом (OnCollisionEnter) и по истечении определенного времени (н-р, 5 секунд).
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 18