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
}
Так естественно у вас не так как в моем примере, не даром я сказал непонятно как у вас сделано, у вас перебор всех Акторов, которые коснулись вашего Актора, в указанной вами области, таким образом у вас может быть и не класс NPC это во первых, соответственно NameOffset Будет пустой, и во вторых он будет крепиться к позиции этого объекта, но этого может конечно и не быть. Во вторых вы используйте позицию от вашего актора для установки/вызова эффекта, а должны для того объекта которого коснулись(т.е NPC , т.е так - MyEmitter = TargetActor.Spawn(class'BIT_TargetEffect', TargetActor, , TargetActor.Location, rot(0, 0, 0)); ) , далее вы устанавливайте базу, но не добавляйте смешение как я показал(т.е вместо MyEmitter.SetBase(TargetActor); , вот так MyEmitter.SetBase(TargetActor,vect(0.00,0.00,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; }
GetTargetInfo(info);Так естественно у вас не так как в моем примере, не даром я сказал непонятно как у вас сделано, у вас перебор всех Акторов, которые коснулись вашего Актора, в указанной вами области, таким образом у вас может быть и не класс NPC это во первых, соответственно NameOffset Будет пустой, и во вторых он будет крепиться к позиции этого объекта, но этого может конечно и не быть. Во вторых вы используйте позицию от вашего актора для установки/вызова эффекта, а должны для того объекта которого коснулись(т.е NPC , т.е так - MyEmitter = TargetActor.Spawn(class'BIT_TargetEffect', TargetActor, , TargetActor.Location, rot(0, 0, 0)); ) , далее вы устанавливайте базу, но не добавляйте смешение как я показал(т.е вместо MyEmitter.SetBase(TargetActor); , вот так MyEmitter.SetBase(TargetActor,vect(0.00,0.00,Pawn(TargetActor).NameOffset)); .
Дальше вы зачем то используйте StartLocationOffset для установки смешения , не знаю зачем вы это сделали, но это как минимум не правильно поскольку во первых StartLocationOffset может быть не значением относительно объекта(который вам нужен),(точно не скажу),во вторых вы не добавляйте Значение Позиции вашего объекта + со значением смещения имени (т.е вот так MyEmitter.Emitters[2].StartLocationOffset.Z = TargetActor.Location.Z+Pawn(TargetActor).NameOffset; ) . //( Если что TargetActor.Location это опять таки стандартная позиция кости Bip01 )
Это как минимум, но вообще если хотите как и выше предложили можно добавить эффект не к стандартной кости bip01, а к головной bip01_head, и сместить как вам нужно, т.е вот так.
TargetActor.AttachToBone(MyEmitter,'Bip01_head'); / либо TargetActor.AttachToBone(MyEmitter,HeadBone);
MyEmitter.SetRelativeLocation(vect(0,0,Pawn(TargetActor).NameOffset)); - Так на 99% сработает .
Там 3 эффекта 1 подсветка моба и остальные эффект над головойДальше вы зачем то используйте StartLocationOffset для установки смешения , не знаю зачем вы это сделали, но это как минимум не правильно поскольку во первых StartLocationOffset может быть не значением относительно объекта(который вам нужен),(точно не скажу),во вторых вы не добавляйте Значение
Там 3 эмиттера , а не эффекта, в адекватном мире нужно выносить все в отдельные эффекты и использовать стандарт, и не играться так .Там 3 эффекта 1 подсветка моба и остальные эффект над головой
Возможно, вы считаете, что создавать множество классов с эмиттерами и массивами — это нормальное решение. Я не уверен, но я использую один класс, в котором уже реализован как я понимаю динамический массивы с эмиттерами в моем случае этого достаточно!Там 3 эмиттера , а не эффекта, в адекватном мире нужно выносить все в отдельные эффекты и использовать стандарт, и не играться так .
В Любом случае рабочий вариант без непонятно какой коллизии и непонятных значений я вам дал.
var Emitter MyEmitter;
Я буду разбираться с этим! еще вопрос я задавал выше как перевернуть эмиттер на 180 граусов что бы картинка была правильно расположена так как я ее загрузил в игру а не верх ногами)Там 3 эмиттера , а не эффекта, в адекватном мире нужно выносить все в отдельные эффекты и использовать стандарт, и не играться так .
В Любом случае рабочий вариант без непонятно какой коллизии и непонятных значений я вам дал.
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
UseDirectionAs=PTDU_Up
Acceleration=(Z=0.004)
MaxParticles=1
UseRegularSizeScale=false
UseSizeScale = true
ZTest=False
UniformSize = false
SizeScale(0)=(RelativeSize=0.03478)
SizeScale(1)=(RelativeTime=2.000000,RelativeSize=0.03478)
InitialParticlesPerSecond=1.000000
AutomaticInitialSpawning=False
DrawStyle=PTDS_AlphaBlend//PTDS_Regular//PTDS_AlphaBlend
Texture=None
LifetimeRange=(Min=10.000000,Max=10.000000)
FadeOutStartTime=9.8000
FadeOut=True
RespawnDeadParticles=False
WarmupTicksPerSecond=100.000000
RelativeWarmupTime=0.9750
Name="SpriteEmitter1"
End Object
Emitters(1)=SpriteEmitter'SpriteEmitter1'
Я пробовал так но у меня не выходило(я как то так делал, через небольшое ускорение по Z, по-другому вроде не выходило
Я брал твой код у меня почему то он не правильно работал я тогда тебе и писал так и не смог твой код приспособить сделал новый а недавно не знаю зачем удалил проект в котором все было реализовано(Ну у меня эффект с иконками дебаффов именно так работал
Это стандарт, можете посмотреть в другом классе LineageMonster.antaras это реализовано, удобно и понятно( 1 Класс 2 Переменные и 2 Эмиттера Актора ) , а у вас костыль, кривой( у вас именно 3 эмиттера, которые должны быть отдельно объявлены, каждый со своей текстурой и вызваны и установлены на объект используя свои отдельные координаты (как по стандарту), ибо вам это надо , вы не Эффект делайте(т.е совокупность эмиттеров, образующих задуманный концепт художником эффект ), а просто 2 или 3 "светящейся/двигающийся" при желании текстуры для разных частей объекта(монстра или нпц без разницы, у них разные точки крепления)- это как раз эмиттер и называется, но не Эффект,то что это Эмиттер Актора имеет внутри себя Массив Эмиттеров(разного типа - Sprite, Mesh,...) не делает из них Эффект, никак это не стандарт и не задумывалось так использоваться, со всеми вытекающими что у вас якобы не получается (при желании то что вы сделали можно и в саму модель вбить в виде нового слоя модели) и не удобный в понимании для кого-то кроме вас, т.е это не масштабируемо.Возможно, вы считаете, что создавать множество классов с эмиттерами и массивами — это нормальное решение. Я не уверен, но я использую один класс, в котором уже реализован как я понимаю динамический массивы с эмиттерами в моем случае этого достаточно!
C++:var Emitter MyEmitter;
Я ещё раз проверил твой код, немного его настроил, и всё заработало!Ну у меня эффект с иконками дебаффов именно так работал
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?