Воскресенье, 22 Декабря 2024, 20:50

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
передача объекта из файла в файл
88mml72Дата: Пятница, 11 Июля 2014, 00:38 | Сообщение # 1
частый гость
Сейчас нет на сайте
файл 1. сюда добавляется объект в массив

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class UnitBase : MonoBehaviour
{
List<GameObject> UnitPlayerBase = new List<GameObject>();

public void UnitPlayerBaseFunction(GameObject g)
{

UnitPlayerBase.Add(g);
Debug.Log(UnitPlayerBase.Count);
}
}
файл 2 отсюда вызывается метод

...............................................................................
UnitBase tempManager;
......................................................

if (hit.collider.tag == "Player")
{
tempManager.UnitPlayerBaseFunction(TransmissionObject);
}
при передаче возникает ошибка что мол пустая ссылка а если использовать ref иле out пишет что использование этих модификаторов для динамических объектов недопустимо как я понял
robertonoДата: Пятница, 11 Июля 2014, 02:15 | Сообщение # 2
Чокнутый Кот
Сейчас нет на сайте
88mml72, наверняка TransmissionObject пуст
RangerДата: Пятница, 11 Июля 2014, 05:55 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
tempManager != null ???
TransmissionObject != null ???

Полный текст ошибки укажите.


OpenGOOДата: Пятница, 11 Июля 2014, 10:58 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
ты ссылке
Код
UnitBase tempManager;
присвоил объект?


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
88mml72Дата: Пятница, 11 Июля 2014, 11:52 | Сообщение # 5
частый гость
Сейчас нет на сайте
извиняюсь вместо transmissionobject передается hit.collider.gameObject но он полюбому не пуст

Добавлено (11.07.2014, 11:52)
---------------------------------------------

Цитата
Полный текст ошибки укажите.


NullReferenceException: Object reference not set to an instance of an object
DetectClicksAndTouches.Update () (at Assets/camera/DetectClicksAndTouches.cs:58)
RangerДата: Пятница, 11 Июля 2014, 12:40 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Цитата 88mml72 ()
NullReferenceException: Object reference not set to an instance of an object
DetectClicksAndTouches.Update () (at Assets/camera/DetectClicksAndTouches.cs:58)

не установлена ссылка на объект.

58 строчку скрипта в студию




Сообщение отредактировал Ranger - Пятница, 11 Июля 2014, 12:44
88mml72Дата: Пятница, 11 Июля 2014, 12:56 | Сообщение # 7
частый гость
Сейчас нет на сайте
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class DetectClicksAndTouches : MonoBehaviour
{  
  //This variable is optional; if not set it will default to the main camera
  //This is so that you can detect clicks/touches on a separate UI Camera
  //This variable does NOT update in real time
  public Camera detectionCamera;
   
  //This variable adds a Debug.Log call to show what was touched
  public bool debug = false;
   
  //This is the actual camera we reference in the update loop, set in Start()
  private Camera _camera;
     //List<GameObject> UnitPlayerBase = new List<GameObject>();
  void Start()
  {
          
   if(detectionCamera != null)
   {
    _camera = detectionCamera;
   }
   else
   {
    _camera = Camera.main;
   }
  }
   
  // Update is called once per frame
  void Update ()
  {
   Ray ray;
   RaycastHit hit;
    
    if(Input.GetMouseButtonDown(0))  //Check to see if we've clicked
    {
     //Set up our ray from screen to scene
     ray = _camera.ScreenPointToRay(Input.mousePosition);  
      
     //If we hit...
     if(Physics.Raycast (ray, out hit, Mathf.Infinity))
     {
      //Tell the system what we clicked something if in debug
      if(debug)
      {
       Debug.Log("You clicked " + hit.collider.gameObject.name,hit.collider.gameObject);
      }
                     if (hit.collider.tag == "Player")
                     {

                         UnitBase.temp.UnitPlayerBaseFunction(hit.collider.gameObject);
                         //UnitPlayerBase.Add(hit.collider.gameObject);

                         //Debug.Log(UnitPlayerBase.Count);
                     }

      //Run the Clicked() function on the clicked object

     }
                 hit.transform.gameObject.SendMessage("Clicked", hit.point, SendMessageOptions.DontRequireReceiver);
    }
     
    if(Input.GetMouseButtonDown(1))  //Check to see if we've clicked
    {
     //Set up our ray from screen to scene
     ray = _camera.ScreenPointToRay(Input.mousePosition);  
      
     //If we hit...
     if(Physics.Raycast (ray, out hit, Mathf.Infinity))
     {
      //Tell the system what we clicked something if in debug
      if(debug)
      {
       Debug.Log("You right clicked " + hit.collider.gameObject.name,hit.collider.gameObject);
      }
       
      //Run the Clicked() function on the clicked object
      hit.transform.gameObject.SendMessage("RightClicked", hit.point, SendMessageOptions.DontRequireReceiver);
     }    
    }
    
  }
}[

Добавлено (11.07.2014, 12:56)
---------------------------------------------
это первый файл вот второй (чуть код сменил)

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class UnitBase : MonoBehaviour
{
public static UnitBase temp;
List<GameObject> UnitPlayerBase = new List<GameObject>();

public void UnitPlayerBaseFunction(GameObject g)
{

UnitPlayerBase.Add(g);
Debug.Log(UnitPlayerBase.Count);
}
}

Сообщение отредактировал 88mml72 - Пятница, 11 Июля 2014, 12:54
RangerДата: Пятница, 11 Июля 2014, 13:17 | Сообщение # 8
почти ветеран
Сейчас нет на сайте
Цитата 88mml72 ()
public static UnitBase temp;

Цитата 88mml72 ()
UnitBase.temp.UnitPlayerBaseFunction(hit.collider.gameObject);

в классе UnitBase добавьте метод;

void Awake(){
temp = this;
}




Сообщение отредактировал Ranger - Пятница, 11 Июля 2014, 13:19
OpenGOOДата: Пятница, 11 Июля 2014, 16:21 | Сообщение # 9
почти ветеран
Сейчас нет на сайте
Ещё как вариант добавить в классе UnitBase статический конструктор

static UnitBase()
{
temp = new UnitBase();
}


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
RangerДата: Пятница, 11 Июля 2014, 16:30 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
Цитата OpenGOO ()
static UnitBase()
{
temp = new UnitBase();
}

Наследники монобеха через new не создаются.
Цитата
"You are trying to create a MonoBehaviour using the 'new' keyword. "




Сообщение отредактировал Ranger - Пятница, 11 Июля 2014, 16:33
88mml72Дата: Пятница, 11 Июля 2014, 18:28 | Сообщение # 11
частый гость
Сейчас нет на сайте
Цитата
void Awake(){
temp = this;
}


с данным методом заработало, спасибо
  • Страница 1 из 1
  • 1
Поиск:

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