forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Вопросы от новичка (http://forum.boolean.name/showthread.php?t=15809)

pax 20.02.2013 12:40

Ответ: Вопросы от новичка
 
npc.cs
PHP код:

public class npcMonoBehaviour
{
    public 
float life;

    public static 
npc Create(string npcName)
    {
          return new 
GameObject(npcName).AddComponent<npc>();
    }

    public 
void DestroyMe()
    {
         
Destroy(gameObject);
    }


Game.cs
PHP код:

public class GameMonoBehaviour
{
   
npc newNPC;

   
void Start()
   {
     
newNPC npc.Create("MySuperNPC");
     
newNPC.transform.position = new Vector3(1,2,3);
     
newNPC.life 100;
   }

   
void Update()
   {
      if (
newNPC!= null && newNPC.life<=0) { newNPC.DestroyMe(); }
   }



burovalex 20.02.2013 16:02

Ответ: Вопросы от новичка
 
хм, спасибо пакс! вроде понятно, а вроде и запутанее стало ))
Наверное просто надо привыкать..

После запуска зашел обратно в сцену, и понял что таким образом создаются новые GameObject'ы и просто в них добавляются скрипты npc, так?

pax 20.02.2013 16:15

Ответ: Вопросы от новичка
 
Так, ты же хотел создать как камеру
PHP код:

var myCamera = new GameObject("MyCamera").AddComponent<Camera>(); 

На самом деле можно сложнее, можно создать объект (можно не пустой, а с моделью), поместить на него скрипт и сохранить как префаб (в окно Project). А потом при создании загружать префаб как ресурс и делать его копию.

burovalex 20.02.2013 20:37

Ответ: Вопросы от новичка
 
Пакс, спасибо, немного хоть разобрался, вообще помогаешь - респект тебе!! Можно тебя сэнсэем по юнити называть? :) И понял что по сути мне сейчас и не надо вызывать методы с другого скрипта. Получается что скрипт и так делает ГеймОбджекты индивидуальными объектами с одинаковыми полями.

Единственное, что мне не хватает. Это как найти префаб для копирования.
Пробовал так, не работает - Instance(Resources.Load("npc1")); в иерархии он также называется..

RegIon 20.02.2013 21:00

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от burovalex (Сообщение 253311)
Пакс, спасибо, немного хоть разобрался, вообще помогаешь - респект тебе!! Можно тебя сэнсэем по юнити называть? :) И понял что по сути мне сейчас и не надо вызывать методы с другого скрипта. Получается что скрипт и так делает ГеймОбджекты индивидуальными объектами с одинаковыми полями.

Единственное, что мне не хватает. Это как найти префаб для копирования.
Пробовал так, не работает - Instance(Resources.Load("npc1")); в иерархии он также называется..

Код:

public GameObject npc;
//остальной код
go = (GameObject)Instantiate(npc);


burovalex 20.02.2013 21:07

Ответ: Вопросы от новичка
 
Не Костян, я имею ввиду если у тебя не публичная, а скрипт сам должен найти префаб или любой другой ГаймОбжект

RegIon 20.02.2013 21:18

Ответ: Вопросы от новичка
 
http://docs.unity3d.com/Documentatio...ject.Find.html

pax 20.02.2013 21:46

Ответ: Вопросы от новичка
 
1. Ложишь префаб в папку Resources с названием npc. На нем пусть уже есть скрипт npc.
2. npc newNPC = ((GameObject)Instantiate(Resources.Load("npc", typeof(GameObject)))).GetComponent<npc>();

WISHMASTER35 20.02.2013 22:10

Ответ: Вопросы от новичка
 
Как в моно работать с файловой системой?
Смотрю этот http://wiki.unity3d.com/index.php?title=FileBrowser пример, но ничего не понимаю.
Класс BehaveLibrary у меня вообще не находит.

Немного начал понимать. Вот простой код.
Код:

                string[] items;
                if(path.Equals("/")) {
                        items = Directory.GetLogicalDrives();
                } else {
                        items = Directory.GetDirectories(path);
                }
               
                foreach(string item in items) {
                        if( GUILayout.Button(item) ) {
                                path = item;
                        }
                }

Только надо как-то DVD ром и скрытые папки и файлы как-то убрать.

burovalex 20.02.2013 22:20

Ответ: Вопросы от новичка
 
У меня сейчас вылез непонятный баг, которого раньше не было. Ничего не понимаю, толи под вечер бошка не соображает, но НЕ ВИЖУ КОСЯК!
ПОМОГИТЕ!!


PHP код:

using UnityEngine;
using System.Collections;



public class 
Grid MonoBehaviour {    
    public  
Terrain            thisTerrain;
    public     static 
int         gridMaxXgridMaxZ;
    public     
float             gridHeight;
    public     
float[,]         gridFloat;
    public  
int[,]            gridDensity;
    public  
int[,]            gridFerlity;
    public  
GameObject[,]    gridEl;
    public  
GameObject        cub;                
    
// Use this for initialization
    
void Start () {
        
thisTerrain = (Terrain)GetComponent<Terrain>();
        
gridMaxX = (int)thisTerrain.terrainData.size.x;
        
gridMaxZ = (int)thisTerrain.terrainData.size.z;
        
gridHeight = (float)thisTerrain.terrainData.size.y;
        
gridFloat = new float[gridMaxX,gridMaxZ];
        
cub GameObject.CreatePrimitive(PrimitiveType.Cube);
        
cub.transform.localScale = new Vector3(0.1f,0.5f,0.1f);
        print(
cub.transform.localScale.x);  //есть результат
        
for (int z=1z<gridMaxZz++)            
            {
            for (
int x=1x<gridMaxXx++)        
                {
                    
gridFloat[x,z] = (float)thisTerrain.SampleHeight(new Vector3(x,0f,z));
                    print(
"1 "+cub.transform.localScale.x);  // есть результат
                    
gridEl[x,z] = (GameObject)Instantiate(cub); //на втором кадре ошибка
                    
print("2 "+cub.transform.localScale.x);  //нет результата
                    
gridEl[x,z].transform.position = new Vector3(x,gridFloat[x,z],z);
                }
            }
            
    }




using UnityEngine;
using System.Collections;



public class Grid : MonoBehaviour {
public Terrain thisTerrain;
public static int gridMaxX, gridMaxZ;
public float gridHeight;
public float[,] gridFloat;
public int[,] gridDensity;
public int[,] gridFerlity;
public GameObject[,] gridEl;
public GameObject cub;
// Use this for initialization
void Start () {
thisTerrain = (Terrain)GetComponent<Terrain>();
gridMaxX = (int)thisTerrain.terrainData.size.x;
gridMaxZ = (int)thisTerrain.terrainData.size.z;
gridHeight = (float)thisTerrain.terrainData.size.y;
gridFloat = new float[gridMaxX,gridMaxZ];
cub = GameObject.CreatePrimitive(PrimitiveType.Cube);
cub.transform.localScale = new Vector3(0.1f,0.5f,0.1f);
print(cub.transform.localScale.x);
//есть результат
for (int z=1; z<gridMaxZ; z++)
{
for (int x=1; x<gridMaxX; x++)
{
gridFloat[x,z] = (float)thisTerrain.SampleHeight(new Vector3(x,0f,z));
print("1 "+cub.transform.localScale.x); // есть результат
gridEl[x,z] = (GameObject)Instantiate(cub); //на втором кадре ошибка
print("2 "+cub.transform.localScale.x); //нет результата
gridEl[x,z].transform.position = new Vector3(x,gridFloat[x,z],z);
}
}

}
}

Пишет NullReferenceException: A null value was found where an object instance was required.
Grid.Start ()


Главное в консоле пишет размер (дебаг при помощи print) до инстанса, а после инстанса нулл :4to:

WISHMASTER35 20.02.2013 22:25

Ответ: Вопросы от новичка
 
burovalex, что с форматированием? У меня глаза болят.
Цитата:

Пишет что нулл в инстансе(куб)
Цитата:

а после инстанса нулл
Так все же где?
Кстати, правильно cube, а не cub.

burovalex 20.02.2013 22:36

Ответ: Вопросы от новичка
 
А что с форматом, специально подсветил синим основные строки. Короче сделал два варианта )
cub - это название объекта типа GameObject, а так cub = GameObject.CreatePrimitive(PrimitiveType.Cube);

seaman 20.02.2013 22:46

Ответ: Вопросы от новичка
 
Цитата:

скрытые папки и файлы как-то убрать
Directory.GetFiles вызывает исключение при попытке обратиться к скрытым фалам и папкам. Нужно просто обработать это исключение. Пример на МСДН:
ПРИМЕР

seaman 20.02.2013 22:52

Ответ: Вопросы от новичка
 
Цитата:

специально подсветил синим основные строки.
В ошибке обычно пишет номер строки где ошибка. Лучше бы просто привели полностью ошибку, или указали сами этот номер строки. У меня вот на мониторе строки цветом не отличаются.
Куда ошибка? На Instantiate, на print, или на следующую строку?

burovalex 20.02.2013 22:55

Ответ: Вопросы от новичка
 
Поправил, во 2-м оффтопе чётче видно
Пишу что ошибка на втором кадре, потому что один инстанс он всё таки создаёт


PHP код:

using UnityEngine;
using System.Collections;



public class 
Grid MonoBehaviour {    
    public  
Terrain            thisTerrain;
    public     static 
int         gridMaxXgridMaxZ;
    public     
float             gridHeight;
    public     
float[,]         gridFloat;
    public  
int[,]            gridDensity;
    public  
int[,]            gridFerlity;
    public  
GameObject[,]    gridEl;
    public  
GameObject        cub;                
    
// Use this for initialization
    
void Start () {
        
thisTerrain = (Terrain)GetComponent<Terrain>();
        
gridMaxX = (int)thisTerrain.terrainData.size.x;
        
gridMaxZ = (int)thisTerrain.terrainData.size.z;
        
gridHeight = (float)thisTerrain.terrainData.size.y;
        
gridFloat = new float[gridMaxX,gridMaxZ];
        
cub GameObject.CreatePrimitive(PrimitiveType.Cube);
        
cub.transform.localScale = new Vector3(0.1f,0.5f,0.1f);
        print(
cub.transform.localScale.x);  //есть результат
        
for (int z=1z<gridMaxZz++)            
            {
            for (
int x=1x<gridMaxXx++)        
                {
                    
gridFloat[x,z] = (float)thisTerrain.SampleHeight(new Vector3(x,0f,z));
                    print(
"1 "+cub.transform.localScale.x);  // есть результат
                    
gridEl[x,z] = (GameObject)Instantiate(cub); //на втором кадре ошибка
                    
print("2 "+cub.transform.localScale.x);  //нет результата
                    
gridEl[x,z].transform.position = new Vector3(x,gridFloat[x,z],z);
                }
            }
            
    }




using UnityEngine;
using System.Collections;



public class Grid : MonoBehaviour {
public Terrain thisTerrain;
public static int gridMaxX, gridMaxZ;
public float gridHeight;
public float[,] gridFloat;
public int[,] gridDensity;
public int[,] gridFerlity;
public GameObject[,] gridEl;
public GameObject cub;
// Use this for initialization
void Start () {
thisTerrain = (Terrain)GetComponent<Terrain>();
gridMaxX = (int)thisTerrain.terrainData.size.x;
gridMaxZ = (int)thisTerrain.terrainData.size.z;
gridHeight = (float)thisTerrain.terrainData.size.y;
gridFloat = new float[gridMaxX,gridMaxZ];
cub = GameObject.CreatePrimitive(PrimitiveType.Cube);
cub.transform.localScale = new Vector3(0.1f,0.5f,0.1f);
print(cub.transform.localScale.x);
//есть результат
for (int z=1; z<gridMaxZ; z++)
{
for (int x=1; x<gridMaxX; x++)
{
gridFloat[x,z] = (float)thisTerrain.SampleHeight(new Vector3(x,0f,z));
print("1 "+cub.transform.localScale.x); // есть результат
gridEl[x,z] = (GameObject)Instantiate(cub); //на втором кадре ошибка
print("2 "+cub.transform.localScale.x); //нет результата
gridEl[x,z].transform.position = new Vector3(x,gridFloat[x,z],z);
}
}

}
}

Пишет NullReferenceException: A null value was found where an object instance was required.
Grid.Start ()


Главное в консоле пишет размер (дебаг при помощи print) до инстанса, а после инстанса нулл :4to:


Часовой пояс GMT +4, время: 17:32.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot