Я новичёк в скриптинге , могу не видеть ошибки. Обьект отталкивается взрывом , но урон не получает и не уничтожается. Скрипт взрыва
Код
var explosionPower = 200.0; var explosionDamage = 100.0;
var explosionTime = 1.0;
function Start () { var explosionPosition = transform.position; var colliders : Collider[] = Physics.OverlapSphere (explosionPosition, explosionRadius); for (var hit in colliders) { if (!hit) continue; if (hit.rigidbody) { hit.rigidbody.AddExplosionForce(explosionPower, explosionPosition, explosionRadius, 3.0);
var closestPoint = hit.rigidbody.ClosestPointOnBounds(explosionPosition); var distance = Vector3.Distance(closestPoint, explosionPosition); var koef = 1.0 - Mathf.Clamp01(distance / explosionRadius); var damage = koef * explosionDamage;
Я тоже намека не понял. Первая проверка имхо не нужна, но не мешает.
Вопрос топикастеру - как увидели что урон не наносится? Ну и проверяйте дебагом - заходит ли вообще в Damage Код function Damage (damage : float) { Debug.Log("HERE!");
Я думаю что урон не наносился потому что взрыву я поставил урон +100500 а кубику хп всего 1 и всеравно ничего не происходило. Попробую debug.log. Попробовал , функция Damage вообще не вызывается. Все намного круче , юнити заглючил , и тепер я выключил ВСЕ скрипты , а оружие всеравно стреляет , взрыв появляется , обьекты отталкиваются. Я пошел дальше , я удалил скрипты , запускаю , и что вы думаете , всеравно все так же работает... бред...
Сообщение отредактировал Tramplex - Сб, 15 Авг 2015, 18:54
Когда останавливает подумал, или просто так написал? Останавливает только если hp меньше или рано нулю. А оно больше нуля! И что? Тогда все спокойно выполняется, вызывается и работает....
Цитата
if (hp <= 0) hp -= damage; // лучше так писать
Чушь. Если hp меньше нуля - перс или кто там - мертв! Нафига у него еще что-то отнимать? В чем намек то был? Да, первая проверка не нужна. Т.к. если hp <= 0 - мы разрушаем объект и скорее всего в Update управление больше предано не будет. Даже если будет - ну и фиг с ним - еще вычтем hp - это не помешает. Т.е. я бы написал что-то типа:
Код
function Damage (damage : float) { hp -= damage; if (hp <= 0) Destroy (gameObject); }
Когда останавливает подумал, или просто так написал?
Толком код не просмотрел, не заметил что скобки не поставлены
Цитатаseaman ()
Чушь. Если hp меньше нуля - перс или кто там - мертв! Нафига у него еще что-то отнимать?
Это я тоже нафэйлил. быстро писал. Наверно случайно строчку выше захватил
но вот такие костыли типа hp = hp-damage зачем писать-то?? --------------------------------------------------------------------------------------- Throw Exception (ノಠ益ಠ)ノ彡┻━┻ Catch Exception ┬──┬ ノ( ゜-゜ノ)
Сообщение отредактировал chapaeff - Вс, 16 Авг 2015, 14:08
Первая проверка осталась случайно , так как сначала обьект должен был не просто удалится , а со взрывом , вот и проверка для того чтобы взрыв не повторялся после смерти обьекта каждый раз как я по нему попаду. hp = hp - damage это от отчаяния , так то я знаю сокращение , на матмоде в универе учил. Ничего так и не помогло , SendMessageUpwards из скрипта взрыва так и не работает. Я подумал вдруг версия юнити глюканутая , потому что качал не с оф. сайта , и переустановил , заодно и самую новую версию получил. Решил делать пока без урона от взрыва , потом посмотрим. Спасибо за желание помочь.