forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Фак по Юнити. (http://forum.boolean.name/showthread.php?t=12966)

SaM_ 31.03.2012 22:47

Ответ: Фак по Юнити.
 
pax, дико баговое нововведение, советую пока не связываться.

SaM_ 01.04.2012 13:01

Ответ: Фак по Юнити.
 
Есть много однотипных (из одного прифаба) предметов. На всех повешен один и тот же скрипт.
Как из повешенного на них скрипта определить, что луч выпущенный из игрока, наведен именно на ЭТОТ предмет, и после нажатия определенной кнопки, удалиться именно ЭТОТ предмет.

RegIon 01.04.2012 13:19

Ответ: Фак по Юнити.
 
ввести
public static GameObject ObjInRay в скрипте игрока,
там же:
ObjInRay=hit.colider.gameobject;
а потом просто из ПОВЕШЕННОГО на ПЕРЕФРАБЫ скрипта проверить
if(this==имяскриптаплеера.ObjInRay){
if(Input.GetButton("del")) { удаляем нафиг его}
}

..так наверно

pax 01.04.2012 13:25

Ответ: Фак по Юнити.
 
Проще удалять из скрипта игрока ;)

SaM_ 01.04.2012 13:29

Ответ: Фак по Юнити.
 
pax, а как удалять предмет из скрипта игрока, на который наведен луч в данный момент? Можно определить имя или тег предмета, но если удалять по этим данным, то удалятся все предмет с этим тегом или именем со сцены.

Lestar 01.04.2012 13:34

Ответ: Фак по Юнити.
 
Ты же из игрока пускаешь луч и кастуешь. Вот то,что получил, то и удаляй.

pax 01.04.2012 13:44

Ответ: Фак по Юнити.
 
Проверяй на наличие скрипта (GetComponent<ТипКомпонента>()) удаляй объект

SaM_ 01.04.2012 13:47

Ответ: Фак по Юнити.
 
Сделал так:
PHP код:

Debug.DrawLine(transform.positiontransform.forwardColor.green); 
Ray ray = new Ray(transform.positiontransform.forward);
RaycastHit hit;

if (
Physics.Raycast(rayout hit100)) 
{
    
ObjInRay hit.collider.gameObject
    if (
hit.collider.gameObject.tag == "dlt" &&  Input.GetKeyDown("g")) 
    {
        
Destroy (ObjInRay);
    }


Если навести луч на предмет с тегом "dlt", а затем нажать "g", то этот предмет удалится со сцены.

Цитата:

Проверяй на наличие скрипта
pax, это первое с чего я начал, но в таком случае будут удалятся все объекты с этим скриптом.

SaM_ 01.04.2012 18:55

Ответ: Фак по Юнити.
 
Почему в данном блоке boolean переменные не выполняются?
PHP код:

Ray ray = new Ray (mypos.positionmypos.forward);
RaycastHit hit;
if (
Physics.Raycast(rayout hit3)) 
{
    
ObjInRay hit.collider.gameObject
    if (
hit.collider.gameObject.tag == "weapon_01" && Input.GetKey("g")) 
        {
            
weapon_slot2 true
            
weapon_slot1 false
            
weapon_slot3 false;
                
            
weapon_01 true;
            
01_picked true;
        }


Переменные bool задаются так например: public bool 01_picked = false;
А блок в Update();

WISHMASTER35 01.04.2012 19:13

Ответ: Фак по Юнити.
 
SaM_, потому что какое-то условие не выполняется. Ты уверен, что луч длиной 3 достает до какого-то объекта с твоим тегом weapon_01?

Как вписать текстуру в инспектор?
Пишу так
Код:

Rect rect = EditorGUILayout.BeginHorizontal();
EditorGUILayout.EndHorizontal();
rect.height = rect.width * ((float)tex.height/tex.width);
GUI.DrawTexture(rect, tex);

Но если дальше рисовать, то оно рисуется не после текстуры, а по ней. Надо как-то в GUILayout отступ сделать.
Т.е. отступить можно так GUILayout.Space
Но проблема в том что rect.height равно нулю при событии Layout.

Вот как прекрасно в две строчке решилась эта проблема
Rect rect = GUILayoutUtility.GetAspectRect((float)tex.height/tex.width);
GUI.DrawTexture(rect, tex);

WISHMASTER35 01.04.2012 19:55

Ответ: Фак по Юнити.
 
Теперь другая проблема. Надо в инспекторе сделать выбор тайла на текстуре-атласе. Хотел обрисовывать выбранный тайл линиями, но как нарисовать эти линии в инспекторе?

Хотя через GL рисует. GL доступен же в инди версии? А то я считал, что он только в про.

SaM_ 01.04.2012 20:30

Ответ: Фак по Юнити.
 
WISHMASTER35, условие выполняется 100%. Если, как в предыдущем посте, вписать Destroy(GameObject); то выполнятся будет, если же назначать bool'у другое значение в данном блоке или просто вписать i=1, то выполнятся не будет. Почему?

WISHMASTER35 01.04.2012 21:55

Ответ: Фак по Юнити.
 
SaM_, от того, что ты написал в блоке ничего не изменится. Если оно конечно не влияет на результат твоих условий.
Вообще проверяй выполнение условий через Debug.log.

SaM_ 01.04.2012 22:31

Ответ: Фак по Юнити.
 
Все перепроверил, должно работать. Подозреваю, что это очередной баг новой 3.5 :mad:

...

Да, это баг новой unity. Проверил тот же скрипт на 3.2 - работает.

pax 02.04.2012 06:29

Цитата:

Сообщение от SaM_ (Сообщение 224276)
Почему в данном блоке boolean переменные не выполняются?

самый более менее правильный способ обработки, который снизит нагрузку на физику:
PHP код:

Ray ray = new Ray (mypos.positionmypos.forward);
RaycastHit hit;

if (
Input.GetKeyDown("g") && Physics.Raycast(rayout hit3)) 
{
    
ObjInRay hit.collider.gameObject
    if (
hit.collider.gameObject.tag == "weapon_01"
        {
            
weapon_slot2 true
            
weapon_slot1 false
            
weapon_slot3 false;
                
            
weapon_01 true;
            
01_picked true;
        }




Цитата:

Сообщение от WISHMASTER35 (Сообщение 224279)
Теперь другая проблема. Надо в инспекторе сделать выбор тайла на текстуре-атласе. Хотел обрисовывать выбранный тайл линиями, но как нарисовать эти линии в инспекторе?

Хотя через GL рисует. GL доступен же в инди версии? А то я считал, что он только в про.

Handles.DrawLine(), GUI.Label с необходимым стилем и размером.


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

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