Как выделить объект мышкой?

Общие вопросы о Unity3D

Как выделить объект мышкой?

Сообщение eureka3D 16 июн 2009, 12:15

Ну вот собственно вопрос.
Полного кода не надо, просто подскажите пожалуста, в каком направлении копать.
Перерыл весь форум.юнити.ком, ничего не нашел. Толи надо на каждый объект вешать скрипт типа:
Код: Выделить всё
function OnMouseOver () {
if (Input.GetButton ("Fire1")){
  Покрасить объект в красный цвет;
}
}

Толи еще как-то. А если у меня 1000 юнитов. Писать и вешать 1000 скриптов для каждого объекта?

Только не отсылайте учить 3ДПлатформерТуториал. пожалуста, нету там такого...
Аватара пользователя
eureka3D
UNец
 
Сообщения: 36
Зарегистрирован: 02 июн 2009, 11:39

Re: Как выделить объект мышкой?

Сообщение Neodrop 16 июн 2009, 12:17

Один скрипт. Который тыркает лучом от камеры через мышку.
Кого тыркнули, того и выделили. Чего проще то?

А скрипт, который висит на каждом и реагирует на OnMouseDown() Это сложно что ли? :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как выделить объект мышкой?

Сообщение eureka3D 16 июн 2009, 13:15

Neodrop писал(а):Один скрипт. Который тыркает лучом от камеры через мышку.
Кого тыркнули, того и выделили. Чего проще то?


Если нетрудно, намекните, что это за скрипт :-s . Понимаю, что нуб. Но я только учусь. И может ли этот скрипт окрашивать выбранный объект в, например, синий цвет.
Аватара пользователя
eureka3D
UNец
 
Сообщения: 36
Зарегистрирован: 02 июн 2009, 11:39

Re: Как выделить объект мышкой?

Сообщение Neodrop 16 июн 2009, 15:16

Качайте примеры. Procedural Example вам в помощь.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как выделить объект мышкой?

Сообщение Mr_Anderson 16 июн 2009, 15:56

Код: Выделить всё
using UnityEngine;
using System.Collections;

public class PanelControl : MonoBehaviour
{
    Color OriginMatColor;
    Color HighlightColor = new Color(0, 255, 0);
    bool isClosed = true;

    void Start()
    {
        // запоминаем оригинальные настройки материала объекта
        OriginMatColor = this.renderer.material.color;
    }

    void OnMouseOver()
    {
        this.renderer.material.color = HighlightColor;
    }

    void OnMouseExit()
    {
        this.renderer.material.color = OriginMatColor;
    }

    void OnMouseDown()
    {
        isClosed = !isClosed;
        if (isClosed)
            this.transform.Translate(0, 4.2f, 0, Space.Self);
        else
            this.transform.Translate(0, -4.2f, 0, Space.Self);
    }
}


небольшой примерчик из черновиков. Тока на объекте-меше (к которому нужно повесить этот скрипт) ессно нужно повесить еще и коллайдер ;)
Mr_Anderson
UNIт
 
Сообщения: 143
Зарегистрирован: 16 апр 2009, 13:32

Re: Как выделить объект мышкой?

Сообщение eureka3D 16 июн 2009, 16:39

Ок...с этим разобрался. Спасибо за помощь!
Проблем теперь такой. Вот мой скрипт на объекте:
Код: Выделить всё
var material1 : Material;

function OnMouseDown () {
renderer.material.color = Color (100, 0, 0);
}
function OnMouseUp () {
renderer.material = material1;
}

Как бы сделать так, чтобы красный цвет объекта не снимался после отжатия кнопки мыши. А после того как я щелкну мышью на другом объекте...или просто щелкну мышкой еще раз.

P.S. Какой же замудренный в Юнити PickMesh...
Аватара пользователя
eureka3D
UNец
 
Сообщения: 36
Зарегистрирован: 02 июн 2009, 11:39

Re: Как выделить объект мышкой?

Сообщение Neodrop 16 июн 2009, 16:44

Это вообще не Pick
Это локальная реакция на луч. Pick делается совсем иначе.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как выделить объект мышкой?

Сообщение eureka3D 16 июн 2009, 17:07

Боюсь уже спрашивать как? :-s
Просто у меня очень много объектов в проэкте (по скромным потщетам около 10000). И каждый надо Pick'ать, чтобы выдавало его название в отдельном окошке. Блин...как не хочется на Блитз возвращатся... :((
Аватара пользователя
eureka3D
UNец
 
Сообщения: 36
Зарегистрирован: 02 июн 2009, 11:39

Re: Как выделить объект мышкой?

Сообщение gnoblin 16 июн 2009, 17:12

Блиц вообще нормально реагирует на 10.000 объектов в кадре? :))
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Как выделить объект мышкой?

Сообщение Neodrop 16 июн 2009, 17:13

Пля. Я же дал ссылки на то, как это делать.

C# скрипт :
Код: Выделить всё
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        Debug.DrawRay(ray.origin, ray.direction * 10, Color.yellow);

        if (Physics.Raycast(ray, out hit, 100))
        {
            MeshFilter filter = hit.collider.GetComponent(typeof(MeshFilter)) as MeshFilter;
            if (filter)
            {
                // Делаем наше чёрное дело. Или опять объяснять КАК? (Все данные можно получить из параметра hit)
            }
        }


Ну сколько можно нашарика то ездить? Немного почитать справку ещё никому не мешало. Немного поразбирать примеры тоже очень полезно для общего развития. :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как выделить объект мышкой?

Сообщение eureka3D 16 июн 2009, 18:20

gnoblin писал(а):Блиц вообще нормально реагирует на 10.000 объектов в кадре? :))


Нет конечно. Вот поэтому пытаюсь перейти на Юнити. А дядько Неодроп ругаеццо :D
Аватара пользователя
eureka3D
UNец
 
Сообщения: 36
Зарегистрирован: 02 июн 2009, 11:39

Re: Как выделить объект мышкой?

Сообщение Mr_Anderson 08 сен 2009, 12:16

Возвращаясь... :) сильно не бейте за вопрос: как выделить мышкой объект-коллайдер, если он находится в более крупном объекте-коллайдере (или находится внутри нескольких таких объектов)?
Mr_Anderson
UNIт
 
Сообщения: 143
Зарегистрирован: 16 апр 2009, 13:32

Re: Как выделить объект мышкой?

Сообщение Neodrop 08 сен 2009, 12:49

Никак.
Только, если расположить объекты в разных слоях, чтобы при рейкастинге, проигнорировать внешний коллайдер.
Или писать скрипт, который станет продолжать луч внутри объекта, после коллизии с "оболочкой" так сказать.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как выделить объект мышкой?

Сообщение Const_47 08 сен 2009, 12:51

Назначить обжект который мы хотим выделить в отдельный слой.

Код: Выделить всё
................   
        private  Ray ray; //Луч
   private  RaycastHit hitElement = new RaycastHit();
        GameObject selectElementGO;
.................
   ray = camera.ScreenPointToRay (Input.mousePosition);
   Physics.Raycast(ray, out hitElement,100,1 << 0);

       selectElementGO  =  hitElement.transform.gameObject;
.................


последний аргумент в Physics.Raycast() --------> 1<< 0, битная маска, говорит о том что колизия с лучем, будет считатся только для нулевого слоя, а если например вот так 1<< 8, то для восьмого, и т д.
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск

Re: Как выделить объект мышкой?

Сообщение Mr_Anderson 08 сен 2009, 13:09

Похоже, Нео прав насчет делегирования рейкастов в потомки :(((. Const_47, мы пробовали так делать... объект в иерархии принадлежит большому объекту-коллайдеру и выделение его в отдельный слой не помогает :(( Хотелось сделать это проще, но все-таки придется переписывать управление. Спасибо ;)
Mr_Anderson
UNIт
 
Сообщения: 143
Зарегистрирован: 16 апр 2009, 13:32


Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10