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

Раздел, посвящённый самому важному - скорости.

Пара вопросов по 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: в первом хранятся несколько переменных и код смерти, во втором голод жажда жизни и подобное, в третьем управление. Эффективно ли использование трех скриптов или лучше всё делать в одном?
Гоша Ватюнга
UNец
 
Сообщения: 22
Зарегистрирован: 28 апр 2016, 21:07

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

Сообщение Paul Siberdt 28 апр 2016, 22:55

Что будет нагружать-то? Вагон железнодорожный? Мозг форумчанина?

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

По поводу количества скриптов - как вам будет удобнее. Как правило, чем скрипт (класс) компактнее и узкозаточеннее , тем он удобнее в использовании и отслеживании ошибок.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

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

Сообщение bwolf88 29 апр 2016, 00:06

В случае с холодом урон идёт каждый update и это наверняка очень сильно будет нагружать и такое нельзя использовать да?
Но очень хочется знать от чего умер игрок, а такой код будет выдовать true если персонаж не пережил урон и можно определить от чего он умер. Можно ли использовать такой код?

Чтобы не обновлять доту каждый кадр создавайте накопительную переменную и обновляйте ее если урон существенный или по таймеру.
Чтобы узнать от чего помер - создайте event и подпишите обработчик текущих жизней [CurrentHealthHandler] на него. При получении damage будет вызываться событие и в обработчик отсылаться информация о том что за damage прошел, а в обработчике после получения damage проверяйте / изменяйте количество health.
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

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

Сообщение llka 29 апр 2016, 06:24

По поводу проверки на смерть можно завести статические переменные, типа "последний атакованный юнит" или "последний убитый юнит". К примеру после смерти записываем в такую переменную убитого юнита и отсылаем событие о том что значение этой переменной изменилось.
llka
UNIверсал
 
Сообщения: 359
Зарегистрирован: 08 янв 2014, 05:00

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

Сообщение seaman 30 апр 2016, 00:45

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

Потому как если это не просто описка - значит Вам еще учиться и учиться...
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение bwolf88 30 апр 2016, 01:20

Думаю рано задавать вопрос об оптимизации. Для начала нужно подумать - а верно ли написано это:

Кстати верно подмечено.
Вы не поленились прочитать неотформатированный код ? :D
Я подобное, или если вывешивают полотно треша больше 15-20 строк тупо пропускаю.
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

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

Сообщение Cr0c 30 апр 2016, 10:26

А почему бы не создать класс с набором данных для дамага с полем владельца и не передавать его получателю дамага? Расширяемость есть, передается ссылкой, обработчик унифицирован, можно ещё добавить поле получателя (в самом получателе назначать при попадании) и передавать в статический обработчик.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81


Вернуться в Оптимизация

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4