Крепление emitor над ником?

  • Автор темы Автор темы BIT_hack
  • Дата начала Дата начала

BIT_hack

Знающий
Участник
Сообщения
254
Розыгрыши
0
Решения
2
Репутация
79
Реакции
158
Баллы
485
Когда-то я устанавливал Emitor над ником или над костью головы — сейчас уже не помню точно. Но сейчас я не могу вспомнить, как это сделать, а в интернете не могу найти нужную информацию, хотя раньше она была доступна. Если кто-то знает, как это сделать, пожалуйста, подскажите!

Сейчас креплю по фиксированным координатам StartLocationOffset=(Z=45)
Код:
defaultproperties
{
 // Эффект над головой
    Begin Object Class=SpriteEmitter Name=SpriteEmitterHead
        FadeOutStartTime=2.46
        FadeOut=true
        MaxParticles=1
        StartLocationOffset=(Z=45)
        SpinParticles=true
        SpinCCWorCW=(Y=1)
        UseSizeScale=true
        UseRegularSizeScale=false
        UniformSize=true
        StartSizeRange=(X=(Min=50,Max=50),Y=(Min=50,Max=50),Z=(Min=50,Max=50))
        InitialParticlesPerSecond=10
        AutomaticInitialSpawning=true
        LifetimeRange=(Min=1.0,Max=1.5)
        Name="SpriteEmitterHead"
    End Object
    Emitters(1)=SpriteEmitterHead
    bRotEmitter=true
    bUnlit=false
    bDirectional=true        
    bLightChanged=true
    bNoDelete=false
}
1733308418576.webp
 
Если я правильно понял, то вот:
Код:
native final function bool  AttachToBone( actor Attachment, name BoneName, optional int Type );
native final function bool  AttachToBoneWithIndex( actor Attachment, int BoneIndex, optional int Type);
 
Если я правильно понял, то вот:
Код:
native final function bool  AttachToBone( actor Attachment, name BoneName, optional int Type );
native final function bool  AttachToBoneWithIndex( actor Attachment, int BoneIndex, optional int Type);
я помню что брал Location.z "nickname" или "HeadBone" но не помню как я это делал(
 
Код:
native final function coords  GetBoneCoordsWithBoneIndex(   int BoneIndex );

native final function coords  GetBoneCoords(   name BoneName );
Значит была не кость так как голова двигается емитор думаю тоже будет двигаться(
 
@BIT_hack, Pawn.CollisionHeight? В чем суть хотелки, что на вьіходе должно бьіть и чем плох статичньій отступ? )
 
@BIT_hack, Pawn.CollisionHeight? В чем суть хотелки, что на вьіходе должно бьіть и чем плох статичньій отступ? )
В арке мобы высокие есмитор садится ниже ника , CollisionHeight тоже дедал но она местами ниже мешей это хорошо видно в арке на мобах
 
@BIT_hack, ну так а если через GetBoneCoords чекать HeadBone, и ставить офсет по зет исходя из єтой координатьі?
Я попробовал там походу глобальная координата GetBoneCoords().Origin.z она не подходит или я не правильно использую ее
 
@BIT_hack, ну так а если через GetBoneCoords чекать HeadBone, и ставить офсет по зет исходя из єтой координатьі?
Еще пока есть у кого спросить)) как развернуть спрайт "эмиттер" верх ногами - я тоже это делал но блин удалил исходники и теперь никак не могу вспомнить, просто по стандарту он верх ногами приходится заранее текстуру переворачивать в фотошопе(
 
Когда-то я устанавливал Emitor над ником или над костью головы — сейчас уже не помню точно. Но сейчас я не могу вспомнить, как это сделать, а в интернете не могу найти нужную информацию, хотя раньше она была доступна. Если кто-то знает, как это сделать, пожалуйста, подскажите!

Сейчас креплю по фиксированным координатам StartLocationOffset=(Z=45)
Код:
defaultproperties
{
 // Эффект над головой
    Begin Object Class=SpriteEmitter Name=SpriteEmitterHead
        FadeOutStartTime=2.46
        FadeOut=true
        MaxParticles=1
        StartLocationOffset=(Z=45)
        SpinParticles=true
        SpinCCWorCW=(Y=1)
        UseSizeScale=true
        UseRegularSizeScale=false
        UniformSize=true
        StartSizeRange=(X=(Min=50,Max=50),Y=(Min=50,Max=50),Z=(Min=50,Max=50))
        InitialParticlesPerSecond=10
        AutomaticInitialSpawning=true
        LifetimeRange=(Min=1.0,Max=1.5)
        Name="SpriteEmitterHead"
    End Object
    Emitters(1)=SpriteEmitterHead
    bRotEmitter=true
    bUnlit=false
    bDirectional=true    
    bLightChanged=true
    bNoDelete=false
}
Посмотреть вложение 79795
Ну во первых Текст отрисовывается специальным/отдельным устройством/Device (Функция DrawText(device,data) либо Device.DrawText(Data), точно не помню ) и соответственно координаты там Из 3D в 2D , при помощи функции RenderWorldToCamera( по моему эта функция) , которая берет стандартное положение Актора( т.е Bip01 и его XYZ ), и по-моему прибавляет константное значение, с плавающей точкой NameOffset( от Pawn ) и переводит это в координаты для камеры/экрана, и к примеру таким образом текст при отдалении(как и иконка) не меняются никак, а вот моделька при отдалении, становиться менее прорисованной и заметной.
Так что для имени нету специальной кости, а используется стандартная, просто со смешением( его можно настроить) и оно отрисовывается в 2D , а вот моделька и эффекты в том числе отрисовываются в 3D .
 
Я попробовал там походу глобальная координата GetBoneCoords().Origin.z она не подходит или я не правильно использую ее
Вот не помню, может бьіть. :unsure: Ну, можно сравнивать ее с локацией павна, и разница - будет вьісотой. ) Или от бип01, или куда там ефект будет крепиться, по сути нужен же офсет просто.
Ну или какие-то там EyeHeight глянуть.

Еще пока есть у кого спросить)) как развернуть спрайт "эмиттер" верх ногами - я тоже это делал но блин удалил исходники и теперь никак не могу вспомнить, просто по стандарту он верх ногами приходится заранее текстуру переворачивать в фотошопе(
Спрайт перевернуть? По-моему, со статиками такое конает, а спрайтьі я чет не помню чтобьі развернуть можно бьіло, они ж 2д-шньіе и так.
 
Спрайт перевернуть? По-моему, со статиками такое конает, а спрайтьі я чет не помню чтобьі развернуть можно бьіло, они ж 2д-шньіе и так.
Если ее не перевернуть заранее то в игре она будет верх ногами и мне приходится в фотошопе ее перевернуть
1733322601419.webp
 
Ну во первых Текст отрисовывается специальным/отдельным устройством/Device (Функция DrawText(device,data) либо Device.DrawText(Data), точно не помню ) и соответственно координаты там Из 3D в 2D , при помощи функции RenderWorldToCamera( по моему эта функция) , которая берет стандартное положение Актора( т.е Bip01 и его XYZ ), и по-моему прибавляет константное значение, с плавающей точкой NameOffset( от Pawn ) и переводит это в координаты для камеры/экрана, и к примеру таким образом текст при отдалении(как и иконка) не меняются никак, а вот моделька при отдалении, становиться менее прорисованной и заметной.
Так что для имени нету специальной кости, а используется стандартная, просто со смешением( его можно настроить) и оно отрисовывается в 2D , а вот моделька и эффекты в том числе отрисовываются в 3D .
По-моему, я использовал камеру, но код был уже готовый. Сейчас даже не знаю, где его найти, но помню, что еще Playerinfo. Level типа этого дергал(
 
По-моему, я использовал камеру, но код был уже готовый. Сейчас даже не знаю, где его найти, но помню, что еще Playerinfo. Level типа этого дергал(
Повторюсь, Текст отрисовывается в 2D, а эффекты и прочее в 3D координатах, даже получив от Актора матрицу координат от функции RenderWorldToCamera для установки эффекта они будут бесполезны, поскольку используются для текста/иконок . Эффект крепиться по трем координатам XYZ, можно брать стандартные коорданаты хоть, от костей Bip01, либо Bip01_head и добавлять, к этому значение смешение Имени по Z, в любом случае эффекты не будут, "вести себя" как текст/ник или иконки. Стандартное значение Имени можно взять из переменной NameOffset Класса Pawn, я не знаю каким образом вы крепите эффект, но если до этого вы использовали Level, то скорее всего вы перебирали всех Акторов(Npc), и используя переменную nickname, находили нужного вам NPC и "костыльным образом", присваивали к его координатам + смешению(NameOffset) ваш эффект (Все гораздо проще если бы вы крепили эффект, используя тело класса NPC,т.е к примеру LineageNpc.alive_castle_aden_controltower_jewel PostBeginPlay() { tempClass = Class<Emitter>(DynamicLoadObject("Lineageeffect.aden_controltower_master_a",Class'Class')); ViewEmitter = Spawn(tempClass,self,'None',Location,Rotation); ViewEmitter.SetBase(self,vect(0.00,0.00,NameOffset+someYourOffsetValue)); }, к примеру так,но могу ошибаться. ).
 
Повторюсь, Текст отрисовывается в 2D, а эффекты и прочее в 3D координатах, даже получив от Актора матрицу координат от функции RenderWorldToCamera для установки эффекта они будут бесполезны, поскольку используются для текста/иконок . Эффект крепиться по трем координатам XYZ, можно брать стандартные коорданаты хоть, от костей Bip01, либо Bip01_head и добавлять, к этому значение смешение Имени по Z, в любом случае эффекты не будут, "вести себя" как текст/ник или иконки. Стандартное значение Имени можно взять из переменной NameOffset Класса Pawn, я не знаю каким образом вы крепите эффект, но если до этого вы использовали Level, то скорее всего вы перебирали всех Акторов(Npc), и используя переменную nickname, находили нужного вам NPC и "костыльным образом", присваивали к его координатам + смешению(NameOffset) ваш эффект (Все гораздо проще если бы вы крепили эффект, используя тело класса NPC,т.е к примеру LineageNpc.alive_castle_aden_controltower_jewel PostBeginPlay() { tempClass = Class<Emitter>(DynamicLoadObject("Lineageeffect.aden_controltower_master_a",Class'Class')); ViewEmitter = Spawn(tempClass,self,'None',Location,Rotation); ViewEmitter.SetBase(self,vect(0.00,0.00,NameOffset+someYourOffsetValue)); }, к примеру так,но могу ошибаться. ).
Да похоже я таким способом и креплю эмиттер как вы описали Интерфейс хф + исходники
 
Ну так в чем проблема брать значение переменной NameOffset от Pawn, и использовать его для расположения эффекта над ником ?
Я пробовал но похоже я делаю что то не так у меня по центру моба выводится эфект, если даже добавляю координаты от персонажа или коллизии Z ничего не происходит так как там хранится число flout и оно там маленькое

C++:
    MyEmitter.Emitters[2].StartLocationOffset.Z = Pawn(TargetActor).NameOffset;
 
Я пробовал но похоже я делаю что то не так у меня по центру моба выводится эфект, если даже добавляю координаты от персонажа или коллизии Z ничего не происходит так как там хранится число flout и оно там маленькое

C++:
    MyEmitter.Emitters[2].StartLocationOffset.Z = Pawn(TargetActor).NameOffset;
так вы чушь делайте
, код весь покажите как у вас есть .
 
так вы чушь делайте
, код весь покажите как у вас есть .

Я думаю этого достаточно

C++:
foreach MyActor.CollidingActors(class'Actor', TargetActor, 1, info.Loc) {

    MyEmitter = TargetActor.Spawn(class'BIT_TargetEffect', TargetActor, , info.Loc, rot(0, 0, 0));
    MyEmitter.SetBase(TargetActor);
    MyEmitter.Emitters[0].Disabled = true;
    MyEmitter.Emitters[0].Texture = TargetTexture;
    MyEmitter.Emitters[0].AutoDestroy = true;
    MyEmitter.Emitters[0].StartLocationOffset.Z = TargetActor.CollisionRadius * 10;


    MyEmitter.Emitters[1].Texture = LogoTexture;
    MyEmitter.Emitters[1].StartLocationOffset.Z = TargetActor.CollisionHeight+20;


    MyEmitter.Emitters[2].Texture =Texture(DynamicLoadObject("LineageEffectsTextures.Particles3.fx_m_t4030", class'Texture'));



    MyEmitter.Emitters[2].StartLocationOffset.Z = Pawn(TargetActor).NameOffset;

    return;
    }
C-подобный:
   // Эффект вокруг NPC
    Begin Object Class=SpriteEmitter Name=SpriteEmitterAround
        MaxParticles=1
        StartSizeRange=(X=(Min=20,Max=20),Y=(Min=20,Max=20),Z=(Min=20,Max=20))
    //    StartLocationOffset=(Z=45)
        SpinParticles=true
        SpinCCWorCW=(Y=1)
        LifetimeRange=(Min=1.0,Max=1.5)
        Name="SpriteEmitterAround"
    End Object
    Emitters(2)=SpriteEmitterAround
 
Назад
Сверху Снизу