|
Форум - Russian Tournament » Игры » UnrealED » Просьбы, подсказки, помощь. |
Просьбы, подсказки, помощь. |
481, 30 Декабря 15 17:37
|
482, 30 Декабря 15 17:45
|
483, 04 Января 16 06:08
simulated function PostRender( canvas Canvas ) { local PlayerPawn P; local float Scale; Super.PostRender(Canvas); P = PlayerPawn(Owner); if ( (P != None) && (P.DesiredFOV != P.DefaultFOV) ) { bOwnsCrossHair = true; Scale = Canvas.ClipX/640; Canvas.SetPos(0.5 * Canvas.ClipX - 128 * Scale, 0.5 * Canvas.ClipY - 128 * Scale ); if ( Level.bHighDetailMode ) Canvas.Style = ERenderStyle.STY_Translucent; else Canvas.Style = ERenderStyle.STY_Normal; Canvas.DrawIcon(Texture'RReticle', Scale); Canvas.SetPos(0.5 * Canvas.ClipX + 64 * Scale, 0.5 * Canvas.ClipY + 96 * Scale); Canvas.DrawColor.R = 0; Canvas.DrawColor.G = 255; Canvas.DrawColor.B = 0; Scale = P.DefaultFOV/P.DesiredFOV; Canvas.DrawText("X"$int(Scale)$"."$int(10 * Scale - 10 * int(Scale))); } else { Canvas.DrawColor = 15 * ChallengeHUD(P.myHUD).CrosshairColor; Canvas.Style = ERenderStyle.STY_Translucent; Canvas.SetPos(0.5 * Canvas.ClipX - 32, 0.5 * Canvas.ClipY - 32); Canvas.DrawIcon(Texture'CHair8', 1); } bOwnsCrossHair = true; } |
484, 05 Января 16 00:47
ГП, вопрос появился, ответ на него я догадываюсь, но все равно спрошу.
По поводу скайбокса, когда в снайперский прицел или вообще камеру приближаешь то скай не отдаляется, а остается на месте, таким методом скай становится видно как землю под ногами. Так вот, можно ли устранить как то проблему или это уже не лечится? Infinite War v5.0.2 construction UIP 2.0 - UIPP(UIP 2.1) |
485, 05 Января 16 12:52
Ну зум сделан через FOV, так-что сам понимаеш.
Но нагородить конечно можно : Поместить в скайбокс-зоне полу-сферо-изогнутый "экран", и рендерить с помощбю "скриптед текстуре" на него реальный оформленый скайбокс, через вторичную "камеру" . Собственно поворачивать эту камеру и экран относительно локального игрока, при этом изменять FOV вторичной "камеры" обратно-пропрцыонально FOV игрока. Даже сети не надо. Но оно того стоит? |
486, 05 Января 16 16:20
Та хз, если не тяж делать и не будет жрать ресурсы, то как мелкая приятная фитча довольно таки не плохо впишется, при том что во многих играх это так и не реализовано.
(Ну и конечно же для более грамотной процеуры, можно сделать что бы он все таки чуть чуть приблежался в соотношении если по стандарту 100%, то тут 5-10%) Кстати по поводу паралакс ская, который якобы немного двигается вместе с павном как в UT3 я чет так и не заметил или я не допедрил просто как он грамотно делается. Infinite War v5.0.2 construction UIP 2.0 - UIPP(UIP 2.1) |
487, 05 Января 16 21:03
Это риторический вопрос был. Ресурсов естественно жрать будет прилично - текстура понадобитса не меньше 2k, ну и рендерить ее желательно с 30 фпс не меньше... А паралакс есть смысл юзать если в скайбоксе есть что-то типа "слоев" декораций, небоскребы в городе например, деревья что-ли. Ближний и дальний план короч. А так плоская текстурка конечн не знаметно.
|
488, 06 Января 16 14:48
GP, еще вопрос, что вписать в эмитере что бы он спавнился всегда в одном направлении от выстрела, вот рисунок, думаю понятно будет.
Открою сразу секрет для чего это, хочу сделать такую вещь: Когда танк к примеру стреляет по земле то снаряд (сделанный эмитером) отрекашечивает от земли и летит от взрыва в сторону "Х" как показано на рисунке. Если есть более простой и интересный способ, то слушаю. Тут просто для меня самый наверно простой способ, т.к. иметеры мне делать просто. Думаю сделать рикошет как второй эмитер с кодом на приатаченный поворот, т.е. проектиль -> спавнит 2 эмитера, взрыв и рикошет по отдельности. (куда будет указан х или у или z неважно, главное что бы они были постоянными, а не как по стандарту рандомными, а в эмитере можно уже указать куда лететь.) Infinite War v5.0.2 construction UIP 2.0 - UIPP(UIP 2.1) |
489, 06 Января 16 17:19
Ну, вопервых что-бы не спавнилось, место где оно спавнитса и поворот указываетса. Если при спавне не указано, значит оно по дефолту беретса такое-же как у того актора, который его спавнит. Дословно чет не уверен как я понял. Тоесть место его спавна уже предопределено, а кто его спавнит, танк или снаряд? Чет напутано слишком
способ отрекошечивающего снаряда это сделать по аналогии с гранатой ассаулта - добавить критический угол (чтоб не рекошетило обратно в танк если стрелять в стену), и взрывы при рекошете. Вот на примере снаряда танка (ONSRocketProjectile): При контакте снаряда исполняетса функцыя ProcessTouch, смотриш что в ней после проверки запускаетса Explode. Функцыя Landede (приземлилось) тоже запускает Explode. Смотрим Explode - в нем после звуков и эффектов идет BlowUp и Destroy. В BlowUp прописан радиальный урон HurtRadius. А Destroy уничтожает проэктиль. Значит если просто убрать Destroy то проэктиль не пропадет (у него конечно еще lifespan надо увеличить), надо будет просто в этом месте изменить его направление, скорость и прочее. Вектор движения задаетса сразу (обобщенно) после спавна в PostBeginPlay один раз, поэтому менять прийдетса его (у тебя может быть другое поведение снаряда, в следствии чего и совсем другие действия). Короче это все печеньки, для начала попробуй просто рекошэтить до безконечности - для этого сначала убери Destroy. В ProcessTouch нормаль не передаетса, поэтому чтоб тебя не обтяжывать ее просчетом, вставляеш подчищеный код из гранаты ассалт-рифлы Код simulated function HitWall( vector HitNormal, actor Wall ) { local Vector VNorm; VNorm = (Velocity dot HitNormal) * HitNormal; Velocity = -VNorm + (Velocity - VNorm) ; SetRotation(Rotator(Velocity)); } |
490, 06 Января 16 19:55
Ну да, начал рикошетится проектиль, об все что можно.
Цитата а кто его спавнит, танк или снаряд? Я хотел так: Танк выстреливает -> летит проектиль (снаряд) -> далее все как в стандарте, ударяется об землю и исчезает, но спавнит 2 эффекта, а не 1 (1 эффект - взрыв, 2 - трасер) При всем этом 2 эффект должен спавнится в заданной заранее ротации или как там... короче говоря должно получится так: Поч именно эффектом? (можно взять пример от флаки но....) Рикошет не должен наносить урона. Так же плюс к этому можно сделать проверку (если можно конечно) если цель получила повреждение от этого проектиля (снаряда), то эффект 2 не спавнится. ( якобы пробился и не отрекошетился) Добавлено (06 Января 16, 22:55) Infinite War v5.0.2 construction UIP 2.0 - UIPP(UIP 2.1) |
491, 07 Января 16 01:20
Ну тогда просто Destroy переносиш в конец этого HitWall, ну а перед ним вместо изменения собственных параметров (проэктиля) считаш угол второго эфекта и спавниш его с этим углом
Код simulated function HitWall( vector HitNormal, actor Wall ) { local Vector VNorm; local Rotator NewRotation; VNorm = (Velocity dot HitNormal) * HitNormal; NewRotation = rotator(-VNorm + (Velocity - VNorm) ); Spawn( {class} , , , location, NewRotation): Destroy(); } |
492, 07 Января 16 09:09
Да, превосходно все работает. Можно ли проверку на урон сделать? Если урон нанесся, то эффект 2 не спавнится.
Infinite War v5.0.2 construction UIP 2.0 - UIPP(UIP 2.1) |
493, 07 Января 16 20:04
Ну посмотри насколько у тебя изменен порядок что за чем происходит. По идее должно роботать просто с HitWall без Destroy() в конце (возвращаеш его обратно в Explode). Таким образом дополнительный эффект спавнитса только если запускаеса HitWall, а он от попадания в павн не запускаетса, вот тебе и проверка.
Но вот если в радиусе взрыва есть танк получившый урон, но прямого попадания нет, то все-равно отрикошетит. |
494, 07 Января 16 20:12
Цитата а он от попадания в павн не запускаетса Нужно именно что бы павн получил уменьшение хп. По логике типа в таке дамаге прописать: (если получить какое либо урон от 1 до 100000, то эффект 2 не спавнится) Так вот в том то и вопрос я задал исходя из моей системы повреждения и для чего я вообще это придумал то, вот график-картинка на понятие пробития для моих танков на данный момент в версию 2.1: Только на бронебойные снаряды, для фугасных рикошетов не предусмотрено ибо они дитонируют при соприкосновении. Надеюсь система понятна, если нет, то я еще более подробно обресую ее. З.Ы. на будующее: (Карма физика жрет видеопамять, для моей техники меньше чем 512 не играбельно, проверенно) Infinite War v5.0.2 construction UIP 2.0 - UIPP(UIP 2.1) |
495, 08 Января 16 12:41
GP,
Здраствуйте! Посмотрите пожалуйста мой код снайперки, может Вы сможете мне помочь... function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) if (Other == Level) { Spawn(class'Explosion',,, HitLocation); Spawn(class'WallHit',,, HitLocation+HitNormal, Rotator(HitNormal)); } else if ( (Other != self) && (Other != Owner) && (Other != None) ) { if ( Other.bIsPawn ) Other.PlaySound(Sound 'ChunkHit',, 4.0,,100); Other.TakeDamage(50, Pawn(Owner), HitLocation, 60000 * X, MyDamageType); Игрок при значении демиджа =50 получает 41 единицы урона от ста. Бот при этом же значении получает 75 единицы урона от ста единиц здоровья. Как-то можно ли подправить мой код, чтобы игрок и бот получали одинаковый урон от одного выстрела? А то как-то несправедливо получается. |
496, 08 Января 16 14:47
вместо последней строчки в коде из вашего сообщения
Код if (Pawn(Other).Health > 50) { Pawn(Other).Health = Pawn(Other).Health - 49; Other.TakeDamage(1, Pawn(Owner), HitLocation, 60000 * X, MyDamageType); } else { Pawn(Other).Health = 1; Other.TakeDamage(1000, Pawn(Owner), HitLocation, 60000 * X, MyDamageType); } |
497, 08 Января 16 19:19
GP, А для меня есть вариант или передумывать систему?
Infinite War v5.0.2 construction UIP 2.0 - UIPP(UIP 2.1) |
498, 08 Января 16 20:11
GP,
Cпасибо за код! Но могли вы обьяснить как ваш код рассчитывает урон для бота и игрока.? Я вот например четвертую и восьмую строку вообще не понимаю. Понял что если у игрока здоровья в результате выстрела больше 50, то принимает значение 49. На самом деле, если я с щитом (150 единиц) и со здоровьем(100), то в результате выстрела бота остается 150 брони и здоровья 51. Почему не 49? И почему не убавилась броня? Без Вашего кода было 0 брони и 93 здоровья. Обьясните пожалуйста, я возможно буду тысячу раз переписывать код мутатора и не хотелось бы каждый раз спрашивать, хотелось бы понять. Кстати, дамидж снайперки у меня теперь не 1000, а 150. Это достаточно для убийства одним выстрелом, но недостаточно, если противник с щитом. Я ввел рендомные щиты в свой мутатор. |
499, 08 Января 16 20:56
Ну если-бы урон наносилса так просто, то не нужно было-бы отдельной функцыи, уменьшали-бы просто здоровье. А функцыя видать роботает не так как хочетса. По поводу кода -
вы хотели наносить чесно 50 урона, собственно вот мы сначала проверяем, если у игрока больше 50, значит можно их снимать: 49 снимаем вручную и 1 через функцыю, чтоб там эффекты и остоальное запустилось как положено. Если НЕ больше 50, значит он гарантировано сдохнет, поэтому уменшаем здоровье до 1, а потом через функцию снимаем как можно больше, чтоб гарантировано со всеми косяками этот 1 сняло. Вручную поставить 0 нельзя, потому-что тогда ничего не произойдет, это раз, а два то, что тогда здоровье пойдет в минуса и игрок стант бессмертным (так как до нуля надо уже прибавлять а не отнимать). Это короч "брут форс" так сказать. Если стандартный TakeDamage криво роботает то ничего не поделаеш, ведь его запускать прийдетса, даже если учесть щиты. Не роботает? |
500, 08 Января 16 21:33
GP,
Кстати в function Timer() снайперки можно сделать ток чтобы здоровье восстанавлилось. Я написал так: if (P.Health >= 20) { P.Health = 100; } А можно ли добавить сюда функцию SetTimer? Чтобы здоровье восстанавливалось до ста не сразу, а скажем каждую секунду по 5 единиц? |
| |||||||||||||||
| |||||||||||||||