Я работаю над оружием метательного ножа, где игрок бесплатно целится, а затем бросает нож. Нож вращается в воздухе, и при столкновении перестает вращаться и привязывается к объекту, с которым столкнулся. Вращение выполняется с помощью анимации, а путь ножа - физикой.
Одна из проблем, с которой я сталкиваюсь, заключается в том, чтобы убедиться, что когда нож сталкивается с врагом, нож будет обращен к ним. В данный момент иногда случается так, что нож первым вонзается в рукоять противника. Что, очевидно, нереально. В то же время, я думаю, что для ножа было бы совершенно неразумно «поражать» врага, только если он столкнулся с лезвием первым, поскольку скорость вращения ножа находится вне контроля игрока.
Я наблюдал много медленных видеороликов с аналогичным оружием, и каждый раз, когда оружие выбрасывалось, оно вращалось в воздухе и волшебным образом всегда заканчивалось тем, что лезвие указывало на его цель. Для игры, в которой расстояние броска будет постоянным, это довольно просто сделать. Но я не совсем уверен, как предсказать это, так как есть много непредсказуемых факторов, например. направление ножа, вращение ножа, положение врага, расстояние от врага и т. д. Если это возможно, я бы предпочел не использовать сложную логику прогнозирования, поскольку игра будет для довольно дешевых устройств. Есть ли способ «дыма и зеркал» решить эту проблему?
источник
Ответы:
Притворяться
Посмотрите видео, которое вы связали, посмотрите его в замедленном режиме ... а что это? Камера прыгает в конце, и нож уже в шлеме цели.
Просто подделайте это. Как только расстояние от ножа до цели небольшое, прыгайте с помощью ножа в цель магическим образом.
Редактировать: вы можете проверить, попадет ли он в цель, используя замысловатый прогноз, а затем притвориться, что он сначала попал в клинок, а затем показать анимацию, когда цель не двигается и нож убивает ее.
Запутанный прогноз
Это верно. Это вне контроля игрока. Тем не менее, не под вашим контролем ...
Если вы можете вычислить расстояние, которое должен пройти нож, вы можете сделать так, чтобы скорость вращения ножа в первую очередь ударила по лезвию.
Теперь не имеет смысла делать это предсказание в середине полета, потому что нож должен был бы приспособиться, если препятствие будет мешать. Таким образом, вы будете делать это, когда вы бросаете.
Тот факт, что вы должны следовать параболическому пути к тесту на попадание, делает его более сложным, чем простой набор лучей. Я бы предложил получить уравнение для параболического движения, которое соответствует метанию ножа, и оценить его с заданными интервалами.
Также можно найти расстояние препятствий до параболы, найдя ближайшую точку в параболе к положению препятствия, а затем выполнить проверку столкновения с этой точкой.
После того, как вы узнаете, сколько ножа должен пройти, вы можете разделить его на целое число оборотов, чтобы он сначала ударил лезвие. Изменить: или целое число 0,5 в зависимости от того, как вы бросаете.
Конечно, препятствия сместились бы к тому моменту, когда туда попадет нож ...
Быть реалистичным
Вы не будете делать первый удар ножом 100% времени, особенно с движущимися целями. Просто примите это, метательный нож не является надежным оружием. Так что имейте альтернативу, чтобы он подпрыгивал, когда он ударяется о ручку первым. Вы можете проверить, ударил ли он сначала по ручке, проверив его ориентацию и сравнив его с направлением на точку столкновения.
источник
Если вы заранее знаете, где приземлится нож - как в тех кадрах, снятых с помощью видеокамер, которые наиболее точно производятся после факта - просто рассчитайте правильную скорость вращения на основе расстояния полета и желаемого количества оборотов. Метательные ножи покидают рукоятку метателя в первую очередь, поэтому ему нужно повернуть N + 0,5 на полные обороты 1 , где N обычно равно по крайней мере 1, но может быть больше в зависимости от уровня мастерства метателя или от того, насколько круто вы хотите, чтобы он выглядел: больше спинов = круче.
Если вы этого не сделаете, то можно обмануть, зафиксировав вращение при ударе, и, возможно, скрыть его с брызгами крови. Как волшебник, если вы сделаете это достаточно быстро, игрок не заметит.
Конечно, все это не реально. В реальной жизни метание ножа очень сложно и требует много практики, если вы хотите, чтобы нож приземлился первым. Метатель должен быть полностью осведомлен о расстоянии и соответственно изменять свой бросок, в противном случае нож попадет сначала в рукоять.
1 : Есть несколько стилей, где нож тоже лезет первым.
источник
Рассчитайте расстояние по прямой до цели.
Каждый кадр устанавливает угол наклона ножа равным 2PI * (остальноеStraightLineDistance) / (originalStraightLineDistance) * DesiredNumRotations.
Коэффициент вращения будет немного отличаться, если вы не двигаете ножом по прямой линии, но никто никогда не заметит.
Если вы не определили цель заранее (то есть вы просто бросаете и используете физику, чтобы увидеть, что она поражает), вам нужно будет ее обмануть, но вы можете использовать тот же принцип, что и цель, на которую она может попасть. регулируя вращение, чтобы быть правильным для этой цели.
источник
Настоящие метательные ножи имеют очень высокую вероятность попадания лезвия первыми. Создайте свои ножи соответственно.
Коллекция метательных ножей из Википедии :
Вы хотите, чтобы центр масс и, следовательно, центр вращения были как можно дальше от кончика лезвия . Это увеличит вероятность того, что лезвие развернется в положение удара, прежде чем конец рукоятки попадет туда.
Лезвие, как правило, длинное и тонкое, выступающее как можно дальше от центра масс при добавлении как можно меньшей собственной массы. Кроме того, на конце рукоятки часто имеется дискообразный или сферический противовес, что интересно, что я не вижу ни в одном из ножей из изображения из Википедии.
Нож отбрасывается, удерживая кончик лезвия и изгибая рукоятку в направлении метания.
источник
Для «дыма и зеркал» вы можете иметь центр вращения ножа (то есть центр масс) рядом с рукояткой (то есть не заостренной частью). Таким образом, если скорость вращения достаточно высока по сравнению со скоростью ножа, можно гарантировать, что конец лезвия столкнется с целью, а не с какой-либо другой частью.
Есть некоторый расчет, чтобы получить минимальную скорость вращения с учетом центра масс и размеров, но она должна быть простой. Обратите внимание, что это ничего не говорит о угле удара.
источник
Идеальный метатель ножей?
В данный момент вы говорите, что крутите нож с помощью анимации. Какой параметр вы используете для управления углом? Номер кадра? Время игры? Масштабируется произвольной скоростью вращения?
Если вместо этого вы используете параметр (расстояние перемещения) / (общее расстояние до цели) с соответствующим масштабированием по пи и (число витков + 0,5), то нож действительно всегда волшебным образом достигнет точки первым.
источник