Воскресенье, 24 Ноября 2024, 11:10

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Определить скриптом на каком объекте скрипт.
robertonoДата: Вторник, 09 Июля 2013, 14:30 | Сообщение # 1
Чокнутый Кот
Сейчас нет на сайте
как можно в
public GameObject Item;
определить автоматически скриптом на каком объекте стоит скрипт?
Есть куб, на кубе скрипт Item.cs
На других кубах тот же скрипт. Как можно определить название куба на котором стоит скрипт этот?
Или вообще как определить расстояние от игрока до этого куба со скриптом Item.cs ?
Спасибо.
IzaronДата: Вторник, 09 Июля 2013, 14:41 | Сообщение # 2
Rammstein forever
Сейчас нет на сайте
Код
using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
     void Update() {
         ScriptName other;
         other = gameObject.GetComponent("ScriptName") as ScriptName;
         other.DoSomething();
         other.someVariable = 5;
     }
}

Добавлено (09.07.2013, 14:40)
---------------------------------------------
Если на объекте нет этого скрипта, то other = 0;

Добавлено (09.07.2013, 14:41)
---------------------------------------------
Либо:

Код
    void Update() {
         ScriptName other = gameObject.GetComponent<ScriptName>();
         other.DoSomething();
         other.someVariable = 5;
     }
robertonoДата: Вторник, 09 Июля 2013, 14:41 | Сообщение # 3
Чокнутый Кот
Сейчас нет на сайте
Izaron, а можете комментарии подписать? Не очень понятно что делают те 4 строки.
IzaronДата: Вторник, 09 Июля 2013, 15:37 | Сообщение # 4
Rammstein forever
Сейчас нет на сайте
Цитата (robertono)
Izaron, а можете комментарии подписать? Не очень понятно что делают те 4 строки.

Допустим, в твоем Item.cs класс называется Cube (выглядит так: public class Cube : MonoBehaviour)
Тогда:
Код
         Cube other = gameObject.GetComponent<Cube>();     
             other.DoSomething();     
             other.someVariable = 5;

Если такого скрипта нет, то other равен нулю, так что делаем так:
1. Вносим объекты (кубы) в массив (public GameObject cube[])
2. Если приспичило, перебираем объекты с проверкой на скрипт
Код
foreach(GameObject obj in cube)
{
Cube other = obj.GetComponent<Cube>();
if(other == 0)
// Ну щито поделать
}

Код не проверял


Сообщение отредактировал Izaron - Вторник, 09 Июля 2013, 15:40
AlastarДата: Вторник, 09 Июля 2013, 15:53 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
ну вы даете dry
Код

public GameObject thisGO
public string thisGOname;
void Start()
{
thisGO = this.gameObject;
thisGOname= gameObject.name;
}


Big Boobs (+18 only!)

Сообщение отредактировал Alastar - Вторник, 09 Июля 2013, 16:06
IzaronДата: Вторник, 09 Июля 2013, 16:03 | Сообщение # 6
Rammstein forever
Сейчас нет на сайте
Alastar, щито это делает? И причем тут thisGo? Ты просто создаешь еще одну переменную name
robertonoДата: Вторник, 09 Июля 2013, 16:05 | Сообщение # 7
Чокнутый Кот
Сейчас нет на сайте
biggrin
AlastarДата: Вторник, 09 Июля 2013, 16:06 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Цитата (Izaron)
Alastar, щито это делает? И причем тут thisGo? Ты просто создаешь еще одну переменную name

А ему что надо? Получить имя объекта на котором висит этот скрипт


Big Boobs (+18 only!)
robertonoДата: Вторник, 09 Июля 2013, 16:17 | Сообщение # 9
Чокнутый Кот
Сейчас нет на сайте
Alastar, А если таких объектов Cube много на сцене? А мне нужно измерить расстояние от одного объекта до игрока. То что будет ? Мне кажется тогда не будет работать.
AlastarДата: Вторник, 09 Июля 2013, 16:24 | Сообщение # 10
постоянный участник
Сейчас нет на сайте
Цитата (robertono)
Alastar, А если таких объектов Cube много на сцене? А мне нужно измерить расстояние от одного объекта до игрока. То что будет ? Мне кажется тогда не будет работать.

Все в моем коде будет работать. Если тебе надо было получить все объекты на сцене с этим скриптом, то так бы и написал.
Код

public GameObject[] cubes;
void Start(){
GameObject[] objects = GameObject.FindGameObjectsOfType(GameObject);
for(int i - 0; i <= objects.Length; i++)
{
if(objects[i].GetComponent("Item") != null)
{
cubes[i] = objects[i];
}
}
}


Big Boobs (+18 only!)

Сообщение отредактировал Alastar - Вторник, 09 Июля 2013, 16:24
allodsДата: Вторник, 09 Июля 2013, 16:44 | Сообщение # 11
почти ветеран
Сейчас нет на сайте
Оно найдет все объекты с Item и засунет в лист к которому можно всегда обратится
robertonoДата: Вторник, 09 Июля 2013, 17:44 | Сообщение # 12
Чокнутый Кот
Сейчас нет на сайте
Тогда задам конкретный вопрос который меня интересует. Я делаю свою систему инвентаря. На объекты которые можно поднять я ставлю скрипт Item.cs . Как можно сделать что бы когда игрок 1 метр до объекта то отобразилось название объекта из переменной?
IzaronДата: Вторник, 09 Июля 2013, 19:23 | Сообщение # 13
Rammstein forever
Сейчас нет на сайте
Цитата (robertono)
Как можно сделать что бы когда игрок 1 метр до объекта то отобразилось название объекта из переменной?

Код
public GameObject items[];

void Start()
{
GameObject[] temp = GameObject.FindGameObjectsOfType(GameObject);
for(int i = 0; i <= temp.Length; i++)
if(temp[i].GetComponent("Item"))
items[i] = temp[i];
}

void OnGUI()
{
foreach(GameObject obj in items)
if(Vector3.Distance(obj.transform.position, transform.position) < 1.0f) // Ставь свое значение
GUI.Label(new Rect (150,30,200,40), "name : "+obj.name);
}


Сообщение отредактировал Izaron - Вторник, 09 Июля 2013, 19:24
robertonoДата: Вторник, 09 Июля 2013, 21:49 | Сообщение # 14
Чокнутый Кот
Сейчас нет на сайте
Izaron, из этого кода мне понадобилось только это:
Код
if(Vector3.Distance(obj.transform.position, transform.position) < 1.0f)

зачем остальное я не понял, главное что теперь всё правильно работает. Спасибо smile
  • Страница 1 из 1
  • 1
Поиск:

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