Суббота, 23 Ноября 2024, 00:23

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Ошибка скрипта .
AdomДата: Четверг, 29 Августа 2013, 22:40 | Сообщение # 1
Печенька!
Сейчас нет на сайте
Я сделал здоровье для игрока так вот когда меня убивает враг у меня вылазит эта ошибка и игра останавливаеться.
MissingReferenceException: The object of type 'Transform' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
Код
using UnityEngine;
using System.Collections;

public class XP : MonoBehaviour {
public Transform Player;  
public Transform Bullet;  
public float xp;  
public float Health;  
public float CurXP;

// Use this for initialization
void Start () {  
   
}  
void Awake(){
if (networkView.isMine){  
enabled = true;    
}
}
// Update is called once per frame
void Update () {
if(xp > 100){
xp =100;    
}
if(CurXP >100){  
CurXP = 100;
    
}
}
void OnTriggerEnter(){
if(GameObject.FindWithTag("Bullet")){
xp -=1f;
CurXP -=1f;    
if(xp ==0){
Destroy(GameObject.FindWithTag("Player"));       
}
}
if(GameObject.FindWithTag("Apteka")&& xp < 100){
xp +=Time.deltaTime;
if(xp == 100){    
xp = 100;      
}      
}
}
void OnGUI(){
if(GameObject.FindWithTag("Player")){
GUI.Label(new Rect(10, Screen.height - 40, 120, 20),"Xp:"+(int)CurXP+ "/"+Health);
}
}
}


Сообщение отредактировал Adom - Четверг, 29 Августа 2013, 22:41
IzaronДата: Четверг, 29 Августа 2013, 22:56 | Сообщение # 2
Rammstein forever
Сейчас нет на сайте
Player в коде уничтожается, но после этого еще где-нибудь используется
AdomДата: Четверг, 29 Августа 2013, 22:58 | Сообщение # 3
Печенька!
Сейчас нет на сайте
Izaron,Хм сейчас поищу .=)
IzaronДата: Четверг, 29 Августа 2013, 23:00 | Сообщение # 4
Rammstein forever
Сейчас нет на сайте
if(GameObject.FindWithTag("Player") != null)

добавь перед Destroy игрока
SomeOneInTheMaskДата: Четверг, 29 Августа 2013, 23:08 | Сообщение # 5
Stranger
Сейчас нет на сайте
хм... unity вроде обычно пишет какой скрипт ошибку возвращает

Карта моего канала по созданию игр на Unity3d, можно даже заказать урок бесплатно)
IzaronДата: Четверг, 29 Августа 2013, 23:28 | Сообщение # 6
Rammstein forever
Сейчас нет на сайте
Цитата (SomeOneInTheMask)
хм... unity вроде обычно пишет какой скрипт ошибку возвращает

А у нас вроде выложили скрипт, а не проект?

Добавлено (29.08.2013, 23:28)
---------------------------------------------
Напрягают строчки:
if(xp == 100){    
xp = 100;      
}  
Скрипт эту фигню просто проскакивает, и хп до бесконечности увеличивается

AdomДата: Четверг, 29 Августа 2013, 23:32 | Сообщение # 7
Печенька!
Сейчас нет на сайте
Эмм я посмотрел на что он ругаеться и он ругаеться на скрипт врага а точнее на это строку .
Код
var playerDirection : Vector3 = (_playerTransform.position - _thisTransform.position  ).normalized;
SomeOneInTheMaskДата: Четверг, 29 Августа 2013, 23:41 | Сообщение # 8
Stranger
Сейчас нет на сайте
Цитата (Izaron)


А у нас вроде выложили скрипт, а не проект?


да, но скрипт работает в проекте, а в описании к ошибке unity пишет название скрипта, в котором произошла ошибка...


Карта моего канала по созданию игр на Unity3d, можно даже заказать урок бесплатно)
IzaronДата: Четверг, 29 Августа 2013, 23:44 | Сообщение # 9
Rammstein forever
Сейчас нет на сайте
Adom, значит, ты пытаешься в скрипте врага взять позицию игрока, которой может не быть, если игрока не существует, т.е. был удален. Как-нибудь измени скрипт врага, чтобы учитывалас возможность несуществования игрока

Сообщение отредактировал Izaron - Четверг, 29 Августа 2013, 23:45
AdomДата: Пятница, 30 Августа 2013, 18:44 | Сообщение # 10
Печенька!
Сейчас нет на сайте
ага спасибо

Добавлено (30.08.2013, 18:44)
---------------------------------------------
Блин я досихпор не могу решить эту ошибку помогите !

IzaronДата: Пятница, 30 Августа 2013, 19:26 | Сообщение # 11
Rammstein forever
Сейчас нет на сайте
Цитата (Adom)
Блин я досихпор не могу решить эту ошибку помогите !

Окей, сделаем тебе подарок к днюхе)
Выложи скрипты (можно в ЛС), попытаюсь разобраться. По-любому ошибка из-за того, что игрок в какой-либо момент перестает существовать
AdomДата: Пятница, 30 Августа 2013, 20:51 | Сообщение # 12
Печенька!
Сейчас нет на сайте
Спасибо =) , вот скрипты которые используються.
Код
using UnityEngine;
using System.Collections;

public class XP : MonoBehaviour {
public Transform Player;   
public Transform Bullet;   
public float xp;   
public float Health;   
public float CurXP;

// Use this for initialization
void Start () {   
     
}   
void Awake(){
if (networkView.isMine){   
enabled = true;     
}
}
// Update is called once per frame
void Update () {
if(xp > 100){
xp =100;     
}
if(CurXP >100){   
CurXP = 100;
      
}
}
void OnTriggerEnter(){
if(GameObject.FindWithTag("Bullet")){
xp -=1f;
CurXP -=1f;     
if(xp <0){      
Destroy(GameObject.FindWithTag("Player"));
Destroy(GameObject.FindWithTag("Enemy"));     
}
}    
if(GameObject.FindWithTag("Apteka")&& xp < 100){
xp +=Time.deltaTime;
if(xp == 100){     
xp = 100;       
}       
}
}
void OnGUI(){
if(GameObject.FindWithTag("Player")){
GUI.Label(new Rect(10, Screen.height - 40, 120, 20),"Xp:"+(int)CurXP+ "/"+Health);
}
}
}

И вот я переделал скрипт врага на шарп.
Код
using UnityEngine;
using System.Collections;

public class Ai : MonoBehaviour {
// Make sure there is always a character controller
public CharacterController controller;

// скорость ходьбы и скорость поворота в секунду
float moveSpeed = 2;
float turnSpeed = 90;

Transform spawnPoint;
float bulletSpeed = 20;

private CharacterController _controller;
private Transform _thisTransform;
public Transform playerTransform;

public Transform bullet; //Префаб патрона
public int BulletForce = 5000; //Скорость патрона
public AudioClip Fire; //Аудиоклип воспроизводящийся во время стрельбы

void  Start (){
         // Получаем контроллер
         _controller = GetComponent<CharacterController>();

         // Получаем компонент трансформации объекта, к которому привязан данный компонент
         _thisTransform = transform;

         // Получаем компонент трансформации игрока
         if (playerTransform == null && GameObject.FindWithTag("Player"))
    playerTransform = GameObject.FindWithTag("Player").transform;
   

     }
void  Update (){
         // направление на игрока
   if(GameObject.FindWithTag("Player") != null);
         Vector3 playerDirection = (playerTransform.position - _thisTransform.position).normalized ;
    
         // угол поворота на игрока
         float angle = Vector3.Angle(_thisTransform.forward, playerDirection);

         // максимальный угол поворота на текущем кадре
         float maxAngle = turnSpeed * Time.deltaTime;

         // Вычисляем прямой поворот на игрока
         Quaternion rot = Quaternion.LookRotation(playerTransform.position - _thisTransform.position);
    
         // поворачиваем врага на игрока с учетом скорости поворота
         if (maxAngle < angle)
         {
             _thisTransform.rotation = Quaternion.Slerp(_thisTransform.rotation, rot, maxAngle / angle);
         }
         else
    

         {
             _thisTransform.rotation = rot;
         }

         // если дистанция до игрока больше трех метров
         if (Vector3.Distance(playerTransform.position, _thisTransform.position) >100.0f)
         {
             // двигаемся к игроку
             _controller.Move(_thisTransform.forward * moveSpeed * Time.deltaTime);
         }
         else // если меньше или равна трем метрам
         { if (Vector3.Distance(playerTransform.position, _thisTransform.position)  > 0)
         {
         
           Shoot();  // здесь например стреляем в игрока
         
   
    }
}
         // гравитация
         _controller.Move(Vector3.down * 10.0f * Time.deltaTime);
      
    }
void Shoot(){   
Transform BulletInstance = (Transform) Instantiate(bullet, GameObject.Find("BulletSpawnPoint3").transform.position, Quaternion.identity); //Генерится префаб патрона в координатах объекта "BulletSpawnPoint"
BulletInstance.rigidbody.AddForce(transform.forward * BulletForce); //Сгенерированый патрон отправляется вперед со скоростью "BulletForce"
audio.PlayOneShot(Fire);//проигрываем звук выстрела
}
}


Сообщение отредактировал Adom - Пятница, 30 Августа 2013, 20:52
IzaronДата: Пятница, 30 Августа 2013, 21:42 | Сообщение # 13
Rammstein forever
Сейчас нет на сайте
Цитата (Adom)
void  Update (){
         // направление на игрока
   if(GameObject.FindWithTag("Player") != null);

В третьей строке точка с запятой зачем?
Сделать так попробуй:
void Update()
{
if(GameObject.FindWithTag("Player") != null)
{
// Весь код, который был в апдейте, исключая прокомментированный выше
}
}

Цитата (Adom)
 // Получаем компонент трансформации игрока
         if (playerTransform == null && GameObject.FindWithTag("Player"))
    playerTransform = GameObject.FindWithTag("Player").transform;

Убери playerTransform == null
AdomДата: Пятница, 30 Августа 2013, 22:34 | Сообщение # 14
Печенька!
Сейчас нет на сайте
Код
using UnityEngine;
using System.Collections;

public class Ai : MonoBehaviour {
// Make sure there is always a character controller
public CharacterController controller;

// скорость ходьбы и скорость поворота в секунду
float moveSpeed = 2;
float turnSpeed = 90;

Transform spawnPoint;
float bulletSpeed = 20;

private CharacterController _controller;
private Transform _thisTransform;
private Transform playerTransform;

public Transform bullet; //Префаб патрона
public int BulletForce = 5000; //Скорость патрона
public AudioClip Fire; //Аудиоклип воспроизводящийся во время стрельбы

void  Start (){
         // Получаем контроллер
         _controller = GetComponent<CharacterController>();

         // Получаем компонент трансформации объекта, к которому привязан данный компонент
         _thisTransform = transform;

         // Получаем компонент трансформации игрока
         if (GameObject.FindWithTag("Player"))
    playerTransform = GameObject.FindWithTag("Player").transform;
   

     }
void  Update (){
         // направление на игрока
   if(GameObject.FindWithTag("Player") != null){
         Vector3 playerDirection = (playerTransform.position - _thisTransform.position).normalized ;
    
         // угол поворота на игрока
         float angle = Vector3.Angle(_thisTransform.forward, playerDirection);

         // максимальный угол поворота на текущем кадре
         float maxAngle = turnSpeed * Time.deltaTime;

         // Вычисляем прямой поворот на игрока
         Quaternion rot = Quaternion.LookRotation(playerTransform.position - _thisTransform.position);
    
         // поворачиваем врага на игрока с учетом скорости поворота
         if (maxAngle < angle)
         {
             _thisTransform.rotation = Quaternion.Slerp(_thisTransform.rotation, rot, maxAngle / angle);
         }
         else
    

         {
             _thisTransform.rotation = rot;
         }

         // если дистанция до игрока больше трех метров
         if (Vector3.Distance(playerTransform.position, _thisTransform.position) >100.0f)
         {
             // двигаемся к игроку
             _controller.Move(_thisTransform.forward * moveSpeed * Time.deltaTime);
         }
         else // если меньше или равна трем метрам
         { if (Vector3.Distance(playerTransform.position, _thisTransform.position)  > 0)
         {
         
           Shoot();  // здесь например стреляем в игрока
         
   
    }
}
         // гравитация
         _controller.Move(Vector3.down * 10.0f * Time.deltaTime);
      
    }
  }
void Shoot(){   
Transform BulletInstance = (Transform) Instantiate(bullet, GameObject.Find("BulletSpawnPoint3").transform.position, Quaternion.identity); //Генерится префаб патрона в координатах объекта "BulletSpawnPoint"
BulletInstance.rigidbody.AddForce(transform.forward * BulletForce); //Сгенерированый патрон отправляется вперед со скоростью "BulletForce"
audio.PlayOneShot(Fire);//проигрываем звук выстрела
}
}

Правильно?
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг