Страница 1 из 1

Пара вопросов по C#

СообщениеДобавлено: 28 апр 2016, 21:19
Гоша Ватюнга
Здравствуйте. У меня есть пара вопросов.
В своём проекте я использую вот такой код если игрок замерзает/падает с высоты/его кто то кусает:
playerHealth -= damage * Time.deltaTime;
Это я так понимаю не сильно нагружает и вообщем можно использовать, но я хочу использовать вот так:
public bool SetDamage(float damage,int damageType){
playerHealth -= damage;
if (playerHealth > 0) {
return false;
} else {
return true;
character.characterDeath ();
}
}
В случае с холодом урон идёт каждый update и это наверняка очень сильно будет нагружать и такое нельзя использовать да?
Но очень хочется знать от чего умер игрок, а такой код будет выдовать true если персонаж не пережил урон и можно определить от чего он умер. Можно ли использовать такой код?

Второй вопрос: У меня в проекте на игроке весит три скрипта: character, characterStats, characterController: в первом хранятся несколько переменных и код смерти, во втором голод жажда жизни и подобное, в третьем управление. Эффективно ли использование трех скриптов или лучше всё делать в одном?

Re: Пара вопросов по C#

СообщениеДобавлено: 28 апр 2016, 22:55
Paul Siberdt
Что будет нагружать-то? Вагон железнодорожный? Мозг форумчанина?

Процессор нагружать подобные вычисления не будут совершенно. Другой вопрос - есть ли смысл дамажить покадрово? Я бы для дотов (damage on time), таких, как холод, сделал период, например, секунду и наносил бы определенную дамагу периодически.

По поводу количества скриптов - как вам будет удобнее. Как правило, чем скрипт (класс) компактнее и узкозаточеннее , тем он удобнее в использовании и отслеживании ошибок.

Re: Пара вопросов по C#

СообщениеДобавлено: 29 апр 2016, 00:06
bwolf88
В случае с холодом урон идёт каждый update и это наверняка очень сильно будет нагружать и такое нельзя использовать да?
Но очень хочется знать от чего умер игрок, а такой код будет выдовать true если персонаж не пережил урон и можно определить от чего он умер. Можно ли использовать такой код?

Чтобы не обновлять доту каждый кадр создавайте накопительную переменную и обновляйте ее если урон существенный или по таймеру.
Чтобы узнать от чего помер - создайте event и подпишите обработчик текущих жизней [CurrentHealthHandler] на него. При получении damage будет вызываться событие и в обработчик отсылаться информация о том что за damage прошел, а в обработчике после получения damage проверяйте / изменяйте количество health.

Re: Пара вопросов по C#

СообщениеДобавлено: 29 апр 2016, 06:24
llka
По поводу проверки на смерть можно завести статические переменные, типа "последний атакованный юнит" или "последний убитый юнит". К примеру после смерти записываем в такую переменную убитого юнита и отсылаем событие о том что значение этой переменной изменилось.

Re: Пара вопросов по C#

СообщениеДобавлено: 30 апр 2016, 00:45
seaman
Думаю рано задавать вопрос об оптимизации. Для начала нужно подумать - а верно ли написано это:
Синтаксис:
Используется csharp
else {
return true;
character.characterDeath ();
}

Потому как если это не просто описка - значит Вам еще учиться и учиться...

Re: Пара вопросов по C#

СообщениеДобавлено: 30 апр 2016, 01:20
bwolf88
Думаю рано задавать вопрос об оптимизации. Для начала нужно подумать - а верно ли написано это:

Кстати верно подмечено.
Вы не поленились прочитать неотформатированный код ? :D
Я подобное, или если вывешивают полотно треша больше 15-20 строк тупо пропускаю.

Re: Пара вопросов по C#

СообщениеДобавлено: 30 апр 2016, 10:26
Cr0c
А почему бы не создать класс с набором данных для дамага с полем владельца и не передавать его получателю дамага? Расширяемость есть, передается ссылкой, обработчик унифицирован, можно ещё добавить поле получателя (в самом получателе назначать при попадании) и передавать в статический обработчик.