Проблема со скриптом на урон обьектам - Форум Игроделов
Чт, 02 Май 2024, 02:45 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Проблема со скриптом на урон обьектам
Проблема со скриптом на урон обьектам
TramplexДата: Пт, 14 Авг 2015, 12:25 | Сообщение # 1
Нет аватара
 
Сообщений: 4
Награды: 0
Репутация: 0
Статус: Offline
Я новичёк в скриптинге , могу не видеть ошибки.
Обьект отталкивается взрывом , но урон не получает и не уничтожается.
Скрипт взрыва
Код

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;
     
    hit.rigidbody.SendMessageUpwards("Damage", damage, SendMessageOptions.DontRequireReciewer);
    }
  }
   
  if (particleEmitter)
  {
  particleEmitter.emit = true;
  yield WaitForSeconds(0.5);
  particleEmitter.emit = false;
  }
Destroy (gameObject, explosionTime);
}

Скрипт хп
Код

var hp = 100.0;

function Damage (damage : float)
{
  if (hp <= 0)
  return;
  hp = hp - damage;
  if (hp <= 0)
  {
   Destroy (gameObject);
  }  
}

Помогите решить проблему , пожалуйста.
 
СообщениеЯ новичёк в скриптинге , могу не видеть ошибки.
Обьект отталкивается взрывом , но урон не получает и не уничтожается.
Скрипт взрыва
Код

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;
     
    hit.rigidbody.SendMessageUpwards("Damage", damage, SendMessageOptions.DontRequireReciewer);
    }
  }
   
  if (particleEmitter)
  {
  particleEmitter.emit = true;
  yield WaitForSeconds(0.5);
  particleEmitter.emit = false;
  }
Destroy (gameObject, explosionTime);
}

Скрипт хп
Код

var hp = 100.0;

function Damage (damage : float)
{
  if (hp <= 0)
  return;
  hp = hp - damage;
  if (hp <= 0)
  {
   Destroy (gameObject);
  }  
}

Помогите решить проблему , пожалуйста.

Автор - Tramplex
Дата добавления - 14 Авг 2015 в 12:25
ilyakosДата: Пт, 14 Авг 2015, 13:40 | Сообщение # 2
 
Сообщений: 171
Награды: 0
Репутация: 8
Статус: Offline
if (hp <= 0)
return;
hp = hp - damage;


Сообщение отредактировал ilyakos - Пт, 14 Авг 2015, 13:43
 
Сообщениеif (hp <= 0)
return;
hp = hp - damage;

Автор - ilyakos
Дата добавления - 14 Авг 2015 в 13:40
chapaeffДата: Пт, 14 Авг 2015, 19:24 | Сообщение # 3
 
Сообщений: 48
Награды: 0
Репутация: 12
Статус: Offline
Цитата ilyakos ()
if (hp <= 0)
return;
hp = hp - damage;


Максимальный намек


---------------------------------------------------------------------------------------
Throw Exception
(ノಠ益ಠ)ノ彡┻━┻
Catch Exception
┬──┬ ノ( ゜-゜ノ)
 
Сообщение
Цитата ilyakos ()
if (hp <= 0)
return;
hp = hp - damage;


Максимальный намек

Автор - chapaeff
Дата добавления - 14 Авг 2015 в 19:24
TramplexДата: Пт, 14 Авг 2015, 20:22 | Сообщение # 4
Нет аватара
 
Сообщений: 4
Награды: 0
Репутация: 0
Статус: Offline
Спасиб , но нужен намёк помаксимальнее , я же писал - новичёк.
 
СообщениеСпасиб , но нужен намёк помаксимальнее , я же писал - новичёк.

Автор - Tramplex
Дата добавления - 14 Авг 2015 в 20:22
seamanДата: Пт, 14 Авг 2015, 21:36 | Сообщение # 5
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Я тоже намека не понял. Первая проверка имхо не нужна, но не мешает.

Вопрос топикастеру - как увидели что урон не наносится? Ну и проверяйте дебагом - заходит ли вообще в Damage
Код
function Damage (damage : float)
  {  
    Debug.Log("HERE!");
 
СообщениеЯ тоже намека не понял. Первая проверка имхо не нужна, но не мешает.

Вопрос топикастеру - как увидели что урон не наносится? Ну и проверяйте дебагом - заходит ли вообще в Damage
Код
function Damage (damage : float)
  {  
    Debug.Log("HERE!");

Автор - seaman
Дата добавления - 14 Авг 2015 в 21:36
TramplexДата: Сб, 15 Авг 2015, 10:35 | Сообщение # 6
Нет аватара
 
Сообщений: 4
Награды: 0
Репутация: 0
Статус: Offline
Цитата seaman ()
Я тоже намека не понял. Первая проверка имхо не нужна, но не мешает.

Вопрос топикастеру - как увидели что урон не наносится? Ну и проверяйте дебагом - заходит ли вообще в Damage
Код
function Damage (damage : float)
{
Debug.Log("HERE!");


Я думаю что урон не наносился потому что взрыву я поставил урон +100500 а кубику хп всего 1 и всеравно ничего не происходило.
Попробую debug.log.
Попробовал , функция Damage вообще не вызывается.
Все намного круче , юнити заглючил , и тепер я выключил ВСЕ скрипты , а оружие всеравно стреляет , взрыв появляется , обьекты отталкиваются. Я пошел дальше , я удалил скрипты , запускаю , и что вы думаете , всеравно все так же работает... бред...


Сообщение отредактировал Tramplex - Сб, 15 Авг 2015, 18:54
 
Сообщение
Цитата seaman ()
Я тоже намека не понял. Первая проверка имхо не нужна, но не мешает.

Вопрос топикастеру - как увидели что урон не наносится? Ну и проверяйте дебагом - заходит ли вообще в Damage
Код
function Damage (damage : float)
{
Debug.Log("HERE!");


Я думаю что урон не наносился потому что взрыву я поставил урон +100500 а кубику хп всего 1 и всеравно ничего не происходило.
Попробую debug.log.
Попробовал , функция Damage вообще не вызывается.
Все намного круче , юнити заглючил , и тепер я выключил ВСЕ скрипты , а оружие всеравно стреляет , взрыв появляется , обьекты отталкиваются. Я пошел дальше , я удалил скрипты , запускаю , и что вы думаете , всеравно все так же работает... бред...

Автор - Tramplex
Дата добавления - 15 Авг 2015 в 10:35
ilyakosДата: Вс, 16 Авг 2015, 13:29 | Сообщение # 7
 
Сообщений: 171
Награды: 0
Репутация: 8
Статус: Offline
Да просто у тебя написано, что хп отнимается если оно <= 0, это вообще почему?

Сообщение отредактировал ilyakos - Вс, 16 Авг 2015, 13:30
 
СообщениеДа просто у тебя написано, что хп отнимается если оно <= 0, это вообще почему?

Автор - ilyakos
Дата добавления - 16 Авг 2015 в 13:29
chapaeffДата: Вс, 16 Авг 2015, 13:54 | Сообщение # 8
 
Сообщений: 48
Награды: 0
Репутация: 12
Статус: Offline
Код
var hp = 100.0;    

    function Damage (damage : float)    
    {    
     hp -= damage;  //зачем тут вообще еще одна проверка??? Просто при каждом вызове урона пускай просто отнимает

     if (hp <= 0)    
     {    
      Destroy (gameObject);    
     }     
    }


---------------------------------------------------------------------------------------
Throw Exception
(ノಠ益ಠ)ノ彡┻━┻
Catch Exception
┬──┬ ノ( ゜-゜ノ)


Сообщение отредактировал chapaeff - Вс, 16 Авг 2015, 14:31
 
Сообщение
Код
var hp = 100.0;    

    function Damage (damage : float)    
    {    
     hp -= damage;  //зачем тут вообще еще одна проверка??? Просто при каждом вызове урона пускай просто отнимает

     if (hp <= 0)    
     {    
      Destroy (gameObject);    
     }     
    }

Автор - chapaeff
Дата добавления - 16 Авг 2015 в 13:54
seamanДата: Вс, 16 Авг 2015, 13:57 | Сообщение # 9
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Цитата
вот и все дела

Когда останавливает подумал, или просто так написал?
Останавливает только если hp меньше или рано нулю. А оно больше нуля! И что? Тогда все спокойно выполняется, вызывается и работает....
Цитата
if (hp <= 0)
hp -= damage; // лучше так писать

Чушь. Если hp меньше нуля - перс или кто там - мертв! Нафига у него еще что-то отнимать?
В чем намек то был?
Да, первая проверка не нужна. Т.к. если hp <= 0 - мы разрушаем объект и скорее всего в Update управление больше предано не будет. Даже если будет - ну и фиг с ним - еще вычтем hp - это не помешает. Т.е. я бы написал что-то типа:
Код
function Damage (damage : float)
   {
    hp -= damage;
    if (hp <= 0)
        Destroy (gameObject);
   }
 
Сообщение
Цитата
вот и все дела

Когда останавливает подумал, или просто так написал?
Останавливает только если hp меньше или рано нулю. А оно больше нуля! И что? Тогда все спокойно выполняется, вызывается и работает....
Цитата
if (hp <= 0)
hp -= damage; // лучше так писать

Чушь. Если hp меньше нуля - перс или кто там - мертв! Нафига у него еще что-то отнимать?
В чем намек то был?
Да, первая проверка не нужна. Т.к. если hp <= 0 - мы разрушаем объект и скорее всего в Update управление больше предано не будет. Даже если будет - ну и фиг с ним - еще вычтем hp - это не помешает. Т.е. я бы написал что-то типа:
Код
function Damage (damage : float)
   {
    hp -= damage;
    if (hp <= 0)
        Destroy (gameObject);
   }

Автор - seaman
Дата добавления - 16 Авг 2015 в 13:57
chapaeffДата: Вс, 16 Авг 2015, 14:07 | Сообщение # 10
 
Сообщений: 48
Награды: 0
Репутация: 12
Статус: Offline
Цитата seaman ()
Когда останавливает подумал, или просто так написал?


Толком код не просмотрел, не заметил что скобки не поставлены

Цитата seaman ()
Чушь. Если hp меньше нуля - перс или кто там - мертв! Нафига у него еще что-то отнимать?


Это я тоже нафэйлил. быстро писал. Наверно случайно строчку выше захватил

но вот такие костыли типа hp = hp-damage зачем писать-то??


---------------------------------------------------------------------------------------
Throw Exception
(ノಠ益ಠ)ノ彡┻━┻
Catch Exception
┬──┬ ノ( ゜-゜ノ)


Сообщение отредактировал chapaeff - Вс, 16 Авг 2015, 14:08
 
Сообщение
Цитата seaman ()
Когда останавливает подумал, или просто так написал?


Толком код не просмотрел, не заметил что скобки не поставлены

Цитата seaman ()
Чушь. Если hp меньше нуля - перс или кто там - мертв! Нафига у него еще что-то отнимать?


Это я тоже нафэйлил. быстро писал. Наверно случайно строчку выше захватил

но вот такие костыли типа hp = hp-damage зачем писать-то??

Автор - chapaeff
Дата добавления - 16 Авг 2015 в 14:07
seamanДата: Вс, 16 Авг 2015, 16:33 | Сообщение # 11
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Ну это просто незнание синтаксиса. Он же написал, что новичек. Новички часто не знают таких вещей.
 
СообщениеНу это просто незнание синтаксиса. Он же написал, что новичек. Новички часто не знают таких вещей.

Автор - seaman
Дата добавления - 16 Авг 2015 в 16:33
TramplexДата: Пн, 17 Авг 2015, 19:31 | Сообщение # 12
Нет аватара
 
Сообщений: 4
Награды: 0
Репутация: 0
Статус: Offline
Первая проверка осталась случайно , так как сначала обьект должен был не просто удалится , а со взрывом , вот и проверка для того чтобы взрыв не повторялся после смерти обьекта каждый раз как я по нему попаду.
hp = hp - damage это от отчаяния , так то я знаю сокращение , на матмоде в универе учил.
Ничего так и не помогло , SendMessageUpwards из скрипта взрыва так и не работает. Я подумал вдруг версия юнити глюканутая , потому что качал не с оф. сайта , и переустановил , заодно и самую новую версию получил. Решил делать пока без урона от взрыва , потом посмотрим. Спасибо за желание помочь.
 
СообщениеПервая проверка осталась случайно , так как сначала обьект должен был не просто удалится , а со взрывом , вот и проверка для того чтобы взрыв не повторялся после смерти обьекта каждый раз как я по нему попаду.
hp = hp - damage это от отчаяния , так то я знаю сокращение , на матмоде в универе учил.
Ничего так и не помогло , SendMessageUpwards из скрипта взрыва так и не работает. Я подумал вдруг версия юнити глюканутая , потому что качал не с оф. сайта , и переустановил , заодно и самую новую версию получил. Решил делать пока без урона от взрыва , потом посмотрим. Спасибо за желание помочь.

Автор - Tramplex
Дата добавления - 17 Авг 2015 в 19:31
QNicolyaДата: Пн, 17 Авг 2015, 21:07 | Сообщение # 13
God gave Rock'N'Roll to you
 
Сообщений: 3369
Награды: 3
Репутация: 352
Статус: Offline
Твой код:
hit.rigidbody.SendMessageUpwards("Damage", damage, SendMessageOptions.DontRequireReciewer);
Правильный код
hit.rigidbody.SendMessageUpwards("Damage", damage, SendMessageOptions.DontRequireReciever);

Попробуй.


Если человек вас обманул - он мошенник, если он вас обманул дважды - вы дурак.
 
СообщениеТвой код:
hit.rigidbody.SendMessageUpwards("Damage", damage, SendMessageOptions.DontRequireReciewer);
Правильный код
hit.rigidbody.SendMessageUpwards("Damage", damage, SendMessageOptions.DontRequireReciever);

Попробуй.

Автор - QNicolya
Дата добавления - 17 Авг 2015 в 21:07
Форум Игроделов » UNITY3D » СКРИПТИНГ » Проблема со скриптом на урон обьектам
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024