Проблема с OnMouseEnter() [РЕШЕНО]

Программирование на Юнити.

Проблема с OnMouseEnter() [РЕШЕНО]

Сообщение duduka 10 апр 2011, 18:37

Помогите советом!
Есть скрипт №1:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
[RequireComponent (typeof(BoxCollider))]

public class CardPlayerHand: MonoBehaviour {
       
        public void OnMouseEnter() {
                Debug.Log("!!! Name: "+name);
        }
       


Скрипт №1 крепится к обьекту, созданному таким вот образом: Скрипт №2
Синтаксис:
Используется csharp
int Count = 0;
foreach(CardGame NewHand in Hand) {
        GameObject go = GameObject.CreatePrimitive(PrimitiveType.Plane);
        go.transform.localScale =
                GameObject.Find("Zone/PlayerPanel/CardPanelPrototype").transform.lossyScale;
        go.transform.position =
                GameObject.Find("Zone/PlayerPanel/Score"+(Hand.Count-Count)).transform.position;
        go.transform.position += new Vector3(0, 0.11f, 0);
        go.renderer.material.mainTexture = NewHand.MainTexture;
        go.name = "PlayerHand-"+Count;
        go.tag = "PlayerHand";
        go.AddComponent<CardPlayerHand>();
        Count++;
}

Вопрос: почему не работает событие OnMouseEnter() ?

Всю голову сломал, не могу понять где ошибка! Вроде первый скрипт работает, если добавить в ручную, на уже имеющийся на сцене объект. А вот так на "горячую" не пашет, в инспекторе всё в порядке(скрипт есть и даже работает), ошибок и предупреждений тоже не выдаёт.
Последний раз редактировалось duduka 11 апр 2011, 14:31, всего редактировалось 1 раз.
Аватара пользователя
duduka
UNец
 
Сообщения: 25
Зарегистрирован: 04 мар 2011, 12:47
Откуда: Тверь

Re: Проблема с OnMouseEnter()

Сообщение seaman 10 апр 2011, 18:48

Документация:
OnMouseEnter is called when the mouse entered the GUIElement or Collider.

Где у тебя GUIElement или Collider
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Проблема с OnMouseEnter()

Сообщение duduka 10 апр 2011, 19:12

[RequireComponent (typeof(BoxCollider))]


А это не он?
Аватара пользователя
duduka
UNец
 
Сообщения: 25
Зарегистрирован: 04 мар 2011, 12:47
Откуда: Тверь

Re: Проблема с OnMouseEnter()

Сообщение Zaicheg 10 апр 2011, 19:14

В инспекторе коллайдер появляется? И соответствует ли он своим положением и размерами объекту.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Проблема с OnMouseEnter()

Сообщение duduka 10 апр 2011, 19:24

В инспекторе коллайдер появляется? И соответствует ли он своим положением и размерами объекту.

Да. С этим всё в порядке! Даже Scale Y больше делал, уж подозрительно маленький он для Plane. Но увы не помогло.
Аватара пользователя
duduka
UNец
 
Сообщения: 25
Зарегистрирован: 04 мар 2011, 12:47
Откуда: Тверь

Re: Проблема с OnMouseEnter()

Сообщение seaman 10 апр 2011, 19:31

Сорри.
А если попробовать вручную его добавить. Типа:
Синтаксис:
Используется csharp
go.AddComponent(typeof (MeshCollider));
((MeshCollider) go.collider).sharedMesh = ((MeshFilter) go.GetComponent(typeof(MeshFilter))).mesh;
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Проблема с OnMouseEnter()

Сообщение duduka 10 апр 2011, 19:47

А если попробовать вручную его добавить. Типа:

Ну с Меш коллайдером не получилось т.к. он уже присутствует. Добавил:
Синтаксис:
Используется csharp
go.AddComponent<BoxCollider>();
и так тоже пробовал:
go.AddComponent(typeof (BoxCollider));
и ничего не изменилось...
Аватара пользователя
duduka
UNец
 
Сообщения: 25
Зарегистрирован: 04 мар 2011, 12:47
Откуда: Тверь

Re: Проблема с OnMouseEnter()

Сообщение duduka 10 апр 2011, 20:52

Глючит в этой строчке:
Синтаксис:
Используется csharp
go.transform.position =
                GameObject.Find("Zone/PlayerPanel/Score"+(Hand.Count-Count)).transform.position;
 

Тут скорей всего преобразовать координаты нужно. Вот так(вроде):
Синтаксис:
Используется csharp
go.transform.position =
go.transform.TransformDirection(GameObject.Find("Zone/PlayerPanel/Score"+(Hand.Count-Count)).transform.position)
 

Но всё равно глюк и всё тут!!! Что самое прикольное - РАБОТАЛО когда эксперементировал с преобразованиями(локальные-мир). А когда объект встал в нужное мне место - БАГ... ~x(
Аватара пользователя
duduka
UNец
 
Сообщения: 25
Зарегистрирован: 04 мар 2011, 12:47
Откуда: Тверь

Re: Проблема с OnMouseEnter()

Сообщение duduka 11 апр 2011, 14:26

Вот и ошибка нашлась!!! :)
Виной всему параметр Far на камере. Написано, что это дистанция до которой отрисовываются объекты. Но это не всегда так!
Изображение
На рис.1 в области N объекты отрисовываются, но OnMouseEnter() не срабатывает! Даже больше скажу - Эта пирамида на самом деле выглядит как на рис.3(по моему мнению). В итоге ошибку исправил выставив Far как на рис.2.
Изображение
Получается так: Если M - это плоскость, то OnMouseEnter() действует от точки a до точки b, хотя рендерится вся плоскость(здесь вся плоскость - понятие относительное :) ).
Аватара пользователя
duduka
UNец
 
Сообщения: 25
Зарегистрирован: 04 мар 2011, 12:47
Откуда: Тверь


Вернуться в Скрипты

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

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