Некорректная работа луча ...
dostalition Дата: Вс, 29 Дек 2013, 12:03 | Сообщение # 1
Сообщений: 155
Награды:
0
Репутация:
9
Статус: Offline
Пускаю луч для определения столкновения по тегу и выведения соответствующей текстуры прицела. Бок номер 1: если объект импортированный, то луч работает, а если , например, стандартный куб из Юни, то не работает вообще (в логе постоянно чередуются сообщения "Действие" (1 раз) и "Текстура прицела" (2 раза), т.е. сообщения в логе не изменяются хоть луч попадает на коллайдер, хоть нет (тег DEISTVIE выставлен на объектах). Бок номер 2: когда луч наведён на импортированный меш с нужным тегом, то текстура прицела изменяется на нужную (на скрине текстура глаза из стандартного набора) , а когда увожу луч вбок, то сразу, после смещения из коллайдера, изменяется обратно, но ... Когда увожу прицел вверх или вниз, то текстура не меняется, как-будто луч ещё на коллайдере Подскажите где напортачил в коде ... Сам код Код
var textura_DEISTVIA : Texture2D; var texturaPRICELA : Texture2D; var position : Rect; var deistvie = false; var position_2 : Rect; var hit : RaycastHit; var n = 3; function Start () { position = new Rect((Screen.width - texturaPRICELA.width)/2, (Screen.height - texturaPRICELA.height)/2, texturaPRICELA.width, texturaPRICELA.height); position_2 = new Rect((Screen.width - textura_DEISTVIA.width)/2, (Screen.height - textura_DEISTVIA.height)/2, textura_DEISTVIA.width, textura_DEISTVIA.height); } function Update (){ var fwd = transform.TransformDirection (Vector3.forward); if (Physics.Raycast (transform.position, fwd,hit, n) && hit.collider.tag == "DEISTVIE"){ deistvie = true; Debug.Log ("Действие"); } else deistvie = false; } function OnGUI(){ if(deistvie == true){ GUI.DrawTexture(position_2, textura_DEISTVIA); Debug.Log ("Текстура действия"); } else { GUI.DrawTexture(position, texturaPRICELA); Debug.Log ("Текстура прицела"); } }
Сообщение отредактировал dostalition - Вс, 29 Дек 2013, 17:23
Сообщение Пускаю луч для определения столкновения по тегу и выведения соответствующей текстуры прицела. Бок номер 1: если объект импортированный, то луч работает, а если , например, стандартный куб из Юни, то не работает вообще (в логе постоянно чередуются сообщения "Действие" (1 раз) и "Текстура прицела" (2 раза), т.е. сообщения в логе не изменяются хоть луч попадает на коллайдер, хоть нет (тег DEISTVIE выставлен на объектах). Бок номер 2: когда луч наведён на импортированный меш с нужным тегом, то текстура прицела изменяется на нужную (на скрине текстура глаза из стандартного набора) , а когда увожу луч вбок, то сразу, после смещения из коллайдера, изменяется обратно, но ... Когда увожу прицел вверх или вниз, то текстура не меняется, как-будто луч ещё на коллайдере Подскажите где напортачил в коде ... Сам код Код
var textura_DEISTVIA : Texture2D; var texturaPRICELA : Texture2D; var position : Rect; var deistvie = false; var position_2 : Rect; var hit : RaycastHit; var n = 3; function Start () { position = new Rect((Screen.width - texturaPRICELA.width)/2, (Screen.height - texturaPRICELA.height)/2, texturaPRICELA.width, texturaPRICELA.height); position_2 = new Rect((Screen.width - textura_DEISTVIA.width)/2, (Screen.height - textura_DEISTVIA.height)/2, textura_DEISTVIA.width, textura_DEISTVIA.height); } function Update (){ var fwd = transform.TransformDirection (Vector3.forward); if (Physics.Raycast (transform.position, fwd,hit, n) && hit.collider.tag == "DEISTVIE"){ deistvie = true; Debug.Log ("Действие"); } else deistvie = false; } function OnGUI(){ if(deistvie == true){ GUI.DrawTexture(position_2, textura_DEISTVIA); Debug.Log ("Текстура действия"); } else { GUI.DrawTexture(position, texturaPRICELA); Debug.Log ("Текстура прицела"); } }
Автор - dostalition Дата добавления - 29 Дек 2013 в 12:03
N0rator Дата: Вс, 29 Дек 2013, 14:23 | Сообщение # 2
Сообщений: 16
Награды:
0
Репутация:
1
Статус: Offline
Попробуйте: Код
if (Physics.Raycast (transform.position, fwd,hit, n)) { if(hit.collider.tag == "DEISTVIE") deistvie = true; else { deistvie = false; Debug.Log ("Действие"); }
И вместо Код
else{ GUI.DrawTexture(position, texturaPRICELA); Debug.Log ("Текстура прицела");
Напишите это Код
if(deistvie == false) { GUI.DrawTexture(position_2, textura_DEISTVIA); Debug.Log ("Текстура прицела"); }
P.S. Стандартное шаманство, обычно помогает.Добавлено (29 Дек 2013, 14:23) --------------------------------------------- Ещё, замечу, что стоит перепроверить, те ли текстуры стоят в инспекторе.
Сообщение Попробуйте: Код
if (Physics.Raycast (transform.position, fwd,hit, n)) { if(hit.collider.tag == "DEISTVIE") deistvie = true; else { deistvie = false; Debug.Log ("Действие"); }
И вместо Код
else{ GUI.DrawTexture(position, texturaPRICELA); Debug.Log ("Текстура прицела");
Напишите это Код
if(deistvie == false) { GUI.DrawTexture(position_2, textura_DEISTVIA); Debug.Log ("Текстура прицела"); }
P.S. Стандартное шаманство, обычно помогает.Добавлено (29 Дек 2013, 14:23) --------------------------------------------- Ещё, замечу, что стоит перепроверить, те ли текстуры стоят в инспекторе.
Автор - N0rator Дата добавления - 29 Дек 2013 в 14:23
ilyakos Дата: Вс, 29 Дек 2013, 14:42 | Сообщение # 3
Сообщений: 171
Награды:
0
Репутация:
8
Статус: Offline
Ты ему подсказал так, что только если касается коллайдера с другим тагом, то deistvie = false, и когда он будет убирать прицел со шкафа своего, то у него deistvie будет true , пока луч не коснется другого коллайдера, без такого тага. Мб лучше написать так : Код
if (Physics.Raycast (transform.position, fwd,hit, n)) { if(hit.collider.tag == "DEISTVIE") deistvie = true; else { if( !hit.collider || hit.collider.tag != "DEISTVIE" ){ deistvie = false; Debug.Log ("Действие"); } }
Сообщение отредактировал ilyakos - Вс, 29 Дек 2013, 14:44
Сообщение Ты ему подсказал так, что только если касается коллайдера с другим тагом, то deistvie = false, и когда он будет убирать прицел со шкафа своего, то у него deistvie будет true , пока луч не коснется другого коллайдера, без такого тага. Мб лучше написать так : Код
if (Physics.Raycast (transform.position, fwd,hit, n)) { if(hit.collider.tag == "DEISTVIE") deistvie = true; else { if( !hit.collider || hit.collider.tag != "DEISTVIE" ){ deistvie = false; Debug.Log ("Действие"); } }
Автор - ilyakos Дата добавления - 29 Дек 2013 в 14:42
dostalition Дата: Вс, 29 Дек 2013, 17:23 | Сообщение # 4
Сообщений: 155
Награды:
0
Репутация:
9
Статус: Offline
Скрипт висел на префабе перса ... 8-x Повесил на камеру и всё в поряде стало :))
Сообщение отредактировал dostalition - Пн, 30 Дек 2013, 16:54
Сообщение Скрипт висел на префабе перса ... 8-x Повесил на камеру и всё в поряде стало :)) Автор - dostalition Дата добавления - 29 Дек 2013 в 17:23