Я не совсем понимаю, как их использовать в данном случае? Единственное применение, которое я им вижу, это соблюдение дополнительных условий. Например, эпическое не должно выпадать раньше, чем, например, персонаж подберет 10 предметов других видов. Или каждый раз при спавне лута проверять, чтобы предметы высокого уровня не превышали определенное количество или процентное соотношение. Предложенный в видео способ универсален, прост в реализации, имеет понятную логику и позволяет вносить изменения в баланс предметов изменением всего лишь одного массива. Это намного, проще, быстрее, интуитивно понятнее, чем менять код. А если вместо массива взять файл с текстурой, так еще и очень упростит задачу мододелам, в случае, если проект будет доступен и интересен сторонней аудитории.
@@3D-Lesson простой пример : int chance = getRandom(); if(chance >70){ //получи обычное } else if (chance > 40) { //получи синее } else if(chance > 20) { //получи фиолетовое } else { //получи рыжее } Это самый простой пример что может прийти в голову, его можно чуток упростить или оптимизировать, порог можно задать константами или переменными, чтоб менять вероятность получения. Если размышлять вашим способом, то в UE4 можно использовать кривую (curve), ее редактировать гораздо удобнее чем массив - зашел, передвинул точку и все. Надо добавить новую градацию? Просто добавь точку. Может есть и более изящные методы, но это первое что приходит на ум
@@raidgameru Если getRandom() умеет выдавать нелинейное распределение, то такое возможно. В противном случае всех предметов будем получать примерно поровну. Или я что-то не понял? Надо поэкспериментировать. Но и в этом случае получаем более длинный, а, значит, и труднее обслуживаемый код. По поводу curve - наверно можно и так. Как-то вообще про это не думал. Надо изучить вопрос. Я просто не в курсе как там с получением дискретных значений. Округление в Blueprint - еще та задачка - лишние несколько узлов.
@@raidgameru Проверил, таки работает и с if. Но! При написании кода очень важно отделять данные от кода, т.е. данные от реализации. Можно цифры в условии заменить на заранее определенные константы. Но так придется менять сразу четыре значения, отвлечься и одно не заменить, потом долго и нудно искать причину дисбаланса. А вот такие вот данные - это первые кандидаты на изменение после альфа, бета-теста и релиза. В случае же массива все меняется в одном месте. Мне самому не нравится идея инициализировать это в коде. В идеале это должен быть внешний файл, изменения в котором не требуют перекомпиляции, по крайней мере на дорелизном этапе. Теперь еще один момент. Предположим, что есть разные уровни сложности и на одном из них надо исключить эпические предметы. В случае массива достаточно подсунуть другой массив в котором отсутствуют необходимые цифры. В случае с if - надо два варианта кода (если я опять ничего не напутал). Независимость кода от изменения данных очень важна в проектах, которые планируется поддерживать.
Неизвестно какой именно результат нужен? Можно настроить на анимацию бега как звуки шагов, можно как рассказано тут: ruclips.net/video/aSf63vyK7Aw/видео.html
@@chelog548 Я не помню, чтобы встречал в игре такое. Но можно попробовать привязать к персонажу обычный wav. Но ведь при беге это другие звуки должны быть и т.д. Поэтому все равно надо писать какую-то логику. Не знаю, не сталкивался с таким.
О, очередной годный материал! Спасибо, Игорь!
Пожалуйста!
Игорь, заметил что уже *666* подписчиков ! :)
:)
А почему нельзя просто использовать операторы сравнения?
Я не совсем понимаю, как их использовать в данном случае? Единственное применение, которое я им вижу, это соблюдение дополнительных условий. Например, эпическое не должно выпадать раньше, чем, например, персонаж подберет 10 предметов других видов. Или каждый раз при спавне лута проверять, чтобы предметы высокого уровня не превышали определенное количество или процентное соотношение. Предложенный в видео способ универсален, прост в реализации, имеет понятную логику и позволяет вносить изменения в баланс предметов изменением всего лишь одного массива. Это намного, проще, быстрее, интуитивно понятнее, чем менять код. А если вместо массива взять файл с текстурой, так еще и очень упростит задачу мододелам, в случае, если проект будет доступен и интересен сторонней аудитории.
@@3D-Lesson простой пример :
int chance = getRandom();
if(chance >70){
//получи обычное
} else if (chance > 40) {
//получи синее
} else if(chance > 20) {
//получи фиолетовое
} else {
//получи рыжее
}
Это самый простой пример что может прийти в голову, его можно чуток упростить или оптимизировать, порог можно задать константами или переменными, чтоб менять вероятность получения.
Если размышлять вашим способом, то в UE4 можно использовать кривую (curve), ее редактировать гораздо удобнее чем массив - зашел, передвинул точку и все. Надо добавить новую градацию? Просто добавь точку. Может есть и более изящные методы, но это первое что приходит на ум
@@raidgameru Если getRandom() умеет выдавать нелинейное распределение, то такое возможно. В противном случае всех предметов будем получать примерно поровну. Или я что-то не понял? Надо поэкспериментировать. Но и в этом случае получаем более длинный, а, значит, и труднее обслуживаемый код. По поводу curve - наверно можно и так. Как-то вообще про это не думал. Надо изучить вопрос. Я просто не в курсе как там с получением дискретных значений. Округление в Blueprint - еще та задачка - лишние несколько узлов.
@@raidgameru Проверил, таки работает и с if. Но! При написании кода очень важно отделять данные от кода, т.е. данные от реализации. Можно цифры в условии заменить на заранее определенные константы. Но так придется менять сразу четыре значения, отвлечься и одно не заменить, потом долго и нудно искать причину дисбаланса. А вот такие вот данные - это первые кандидаты на изменение после альфа, бета-теста и релиза. В случае же массива все меняется в одном месте. Мне самому не нравится идея инициализировать это в коде. В идеале это должен быть внешний файл, изменения в котором не требуют перекомпиляции, по крайней мере на дорелизном этапе. Теперь еще один момент. Предположим, что есть разные уровни сложности и на одном из них надо исключить эпические предметы. В случае массива достаточно подсунуть другой массив в котором отсутствуют необходимые цифры. В случае с if - надо два варианта кода (если я опять ничего не напутал). Независимость кода от изменения данных очень важна в проектах, которые планируется поддерживать.
@@3D-Lesson по вашему лучше переписывать массив из 100 чисел?😂
как добавить звуки дыхания персонажу?не догоняю просто
Неизвестно какой именно результат нужен? Можно настроить на анимацию бега как звуки шагов, можно как рассказано тут: ruclips.net/video/aSf63vyK7Aw/видео.html
@@3D-Lesson но не так что бы когда ты ходил звуки дыхания были
а вообще всегда типо
когда стоишь,ходишь и т.д
я прост не понимаю чёт как их добавить
@@3D-Lesson но спасибо за тутор
@@chelog548 Я не помню, чтобы встречал в игре такое. Но можно попробовать привязать к персонажу обычный wav. Но ведь при беге это другие звуки должны быть и т.д. Поэтому все равно надо писать какую-то логику. Не знаю, не сталкивался с таким.