Nicht eingeloggt
Registrieren

Normaler Emitter zu Emitterklasse konvertieren

Kurztutorial - Normalen Emitter zu Emitterklasse konvertieren


In diesem Kurztutorial erläutere ich an einem Beispiel, wie man aus einem normalen Emitter eine Emitterklasse erstellt, mit der man in Scripten und anderen Actoren arbeiten kann. Zum Beispiel kann man für diverse Pickups einen alternativen Emitter angeben, der in einer Klasse existieren muss.

emittertoclasstut_01.jpg

Um eine Klasse zu werden, muss der Emitter nun erstmal in ein Script kommen. Keine Angst, das ist nicht viel. Mehr als ein wenig Copy&Paste müsst ihr hierzu nicht können

Der erste Schritt ist, den erschaffenen Emitter zu kopieren. (Rechtsklick -> Edit -> Copy) Dem Emitter sind an Komplexität keine Grenzen gesetzt, er kann aus sovielen Unteremittern bestehen wie gebraucht werden.

Als nächstes öffnen wir uns einen Texteditor und fügen alles aus der Zwischenablage hinein. Wir bekommen einen Text, der in meinem Fall so aussieht:

Code:
Begin Map
Begin Actor Class=Emitter Name=Emitter0
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
FadeOut=True
FadeIn=True
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
FadeOutStartTime=2.100000
FadeInEndTime=2.000000
SpinsPerSecondRange=(X=(Min=-0.100000,Max=0.100000))
SizeScale(0)=(RelativeSize=2.000000)
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=0.100000)
StartSizeRange=(X=(Min=30.000000,Max=50.000000))
DrawStyle=PTDS_Darken
Texture=Texture'AW-2004Particles.Fire.BlastMark'
LifetimeRange=(Min=2.000000,Max=3.000000)
End Object
Emitters(0)=SpriteEmitter'myLevel.SpriteEmitter0'
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
UseDirectionAs=PTDU_Scale
FadeOut=True
FadeIn=True
SpinParticles=True
UniformSize=True
BlendBetweenSubdivisions=True
FadeOutStartTime=0.100000
FadeInEndTime=0.100000
MaxParticles=3
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=50.000000)
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=10.000000,Max=20.000000))
Texture=Texture'AW-2004Particles.Energy.ElecPanelsP'
TextureUSubdivisions=2
TextureVSubdivisions=2
LifetimeRange=(Min=0.200000,Max=0.500000)
End Object
Emitters(1)=SpriteEmitter'myLevel.SpriteEmitter1'
Begin Object Class=SpriteEmitter Name=SpriteEmitter2
FadeOut=True
FadeIn=True
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
Opacity=0.500000
FadeOutStartTime=1.500000
FadeInEndTime=0.500000
MaxParticles=5
SpinsPerSecondRange=(X=(Min=-0.200000,Max=0.200000))
SizeScale(0)=(RelativeTime=0.300000,RelativeSize=1.000000)
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=3.000000)
SizeScale(2)=(RelativeTime=0.700000,RelativeSize=1.000000)
SizeScaleRepeats=1.000000
StartSizeRange=(X=(Min=10.000000,Max=20.000000))
DrawStyle=PTDS_Darken
Texture=Texture'AW-2004Particles.Fire.MuzzleSplash'
LifetimeRange=(Min=2.000000,Max=2.000000)
End Object
Emitters(2)=SpriteEmitter'myLevel.SpriteEmitter2'
Begin Object Class=SpriteEmitter Name=SpriteEmitter3
SpinParticles=True
UniformSize=True
Opacity=0.250000
SpinsPerSecondRange=(X=(Min=1.000000,Max=1.000000))
StartSizeRange=(X=(Min=40.000000,Max=80.000000))
DrawStyle=PTDS_Darken
Texture=Texture'AW-2004Particles.Fire.AuraSpray'
End Object
Emitters(3)=SpriteEmitter'myLevel.SpriteEmitter3'
bLightChanged=True
Level=LevelInfo'myLevel.LevelInfo0'
Region=(Zone=ZoneInfo'myLevel.ZoneInfo0',iLeaf=128,ZoneNumber=1)
Tag="Emitter"
PhysicsVolume=DefaultPhysicsVolume'myLevel.DefaultPhysicsVolume2'
Location=(X=-80.000000,Y=544.000000,Z=-300.000000)
bSelected=True
End Actor
Begin Surface
End Surface
End Map
Das was wir bekommen haben, ist wie eine Art "Bauanleitung" für den Editor, der anhand dieser Informationen ausgehend von einem Emitter mit Standardeinstellungen weiß, welche Änderungen vorgenommen werden müssen, damit der Emitter rauskommt, den man Anfangs erstellt hat.

So, nun werden wir erst mal alles unnötige entfernen.

Die ersten zwei Zeilen "Begin Map" und "Begin Actor Class=Emitter Name=Emitter0" brauchen wir nicht, da diese den Emitteractor erstellen, in dem dann die Emitterobjekte eingefügt werden. Die Emitteractoren sind als "Container" zu verstehen, die die Emitterobjekte in sich tragen. Der neue Container wird aber unsre Weaponbase, weshalb wir den Emitteractor also nicht brauchen.
Am Ende kommt alles ab "bLightChanged=True" weg, da dies nur Variablen des Emitteractors sind, den wir ja nicht brauchen. Falls ihr das "bLightChanged=True" nicht findet, nehmt einfach alles unter "Emitters(#)= ..." weg, wobei # für den jeweils letzten Indexwert der Emitteractoren steht. In meinem Fall ist das 3, da ich 4 Emitterobjekte habe, wobei bei 0 angefangen wird zu zählen.

Somit ist der Text auf eine etwas geringere Größe geschrumpft:

Code:
    Begin Object Class=SpriteEmitter Name=SpriteEmitter0
FadeOut=True
FadeIn=True
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
FadeOutStartTime=2.100000
FadeInEndTime=2.000000
SpinsPerSecondRange=(X=(Min=-0.100000,Max=0.100000))
SizeScale(0)=(RelativeSize=2.000000)
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=0.100000)
StartSizeRange=(X=(Min=30.000000,Max=50.000000))
DrawStyle=PTDS_Darken
Texture=Texture'AW-2004Particles.Fire.BlastMark'
LifetimeRange=(Min=2.000000,Max=3.000000)
End Object
Emitters(0)=SpriteEmitter'myLevel.SpriteEmitter0'
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
UseDirectionAs=PTDU_Scale
FadeOut=True
FadeIn=True
SpinParticles=True
UniformSize=True
BlendBetweenSubdivisions=True
FadeOutStartTime=0.100000
FadeInEndTime=0.100000
MaxParticles=3
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=50.000000)
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=10.000000,Max=20.000000))
Texture=Texture'AW-2004Particles.Energy.ElecPanelsP'
TextureUSubdivisions=2
TextureVSubdivisions=2
LifetimeRange=(Min=0.200000,Max=0.500000)
End Object
Emitters(1)=SpriteEmitter'myLevel.SpriteEmitter1'
Begin Object Class=SpriteEmitter Name=SpriteEmitter2
FadeOut=True
FadeIn=True
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
Opacity=0.500000
FadeOutStartTime=1.500000
FadeInEndTime=0.500000
MaxParticles=5
SpinsPerSecondRange=(X=(Min=-0.200000,Max=0.200000))
SizeScale(0)=(RelativeTime=0.300000,RelativeSize=1.000000)
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=3.000000)
SizeScale(2)=(RelativeTime=0.700000,RelativeSize=1.000000)
SizeScaleRepeats=1.000000
StartSizeRange=(X=(Min=10.000000,Max=20.000000))
DrawStyle=PTDS_Darken
Texture=Texture'AW-2004Particles.Fire.MuzzleSplash'
LifetimeRange=(Min=2.000000,Max=2.000000)
End Object
Emitters(2)=SpriteEmitter'myLevel.SpriteEmitter2'
Begin Object Class=SpriteEmitter Name=SpriteEmitter3
SpinParticles=True
UniformSize=True
Opacity=0.250000
SpinsPerSecondRange=(X=(Min=1.000000,Max=1.000000))
StartSizeRange=(X=(Min=40.000000,Max=80.000000))
DrawStyle=PTDS_Darken
Texture=Texture'AW-2004Particles.Fire.AuraSpray'
End Object
Emitters(3)=SpriteEmitter'myLevel.SpriteEmitter3'
Jetzt fangen wir ein Script an.
Der Grundaufbau ist folgender:

Code:
class MeinNeuerWeaponBaseEffekt extends Emitter;
defaultproperties

emittertoclasstut_04.jpg

Zwischen die wird der Text der Emitter eingefügt und das wird als "MeinNeuerWeaponBaseEffekt.uc" in das Verzeichnis "./UT2004/MeinNeuerWeaponBaseEmitter/Classes/" abgespeichert.

Nun müssen wir noch den Pfad für die neuen Emitter angeben. Momentan stehen sie alle auf 'myLevel.SpriteEmitter0' aber hinterher haben wir ja kein myLevel mehr, sondern wir haben ein Package mit Namen "MeinNeuerWeaponBaseEmitter". Der Pfad setzt sich nun folgendermaßen zusammen: "MeinNeuerWeaponBaseEmitter.MeinNeuerWeaponBaseEffekt.SpriteEmitter#" Wobei das # für den Index des Emitters steht.

Außerdem müssen wir mit angeben, welche Packages wir benutzt haben. Da ich in meinem Fall nur Texturen aus AW-2004Particles verwendet habe, muss ich deshalb nur eine Zeile hinzufügen. Die sieht so aus:

Code:
#exec OBJ LOAD FILE=AW-2004Particles.utx
Jenachdem aus welchen Packages dein Emitter besteht, muss für jedes beteiligte Package eine solche Zeile ganz am Anfang der Datei erstellt werden.

Das Script sieht nun so aus:

Code:
#exec OBJ LOAD FILE=AW-2004Particles.utx
class MeinNeuerWeaponBaseEffekt extends Emitter;
defaultproperties
So, jetzt muss das ganze noch kompiliert werden. Dazu wird ein Eintrag in der UT2004.ini benötigt. Öffne sie und suche nach dem mehrfachen Aufkommen der Zeilen "EditPackages=" worunter du die Zeile "EditPackages=MeinNeuerWeaponBaseEmitter" schreibst. Achte darauf, dass sie am Ende steht.

Nach dem auch das geschafft ist, öffnest du die Eingabeaufforderung (Start > Ausführen... > "cmd") und wechselst in das ./UT2004/System Verzeichnis. Dann führst du "ucc make" aus und wartest, bis der Vorgang abgeschlossen wurde. Der Log gibt folgendes aus:

Code:
C:\Dokumente und Einstellungen\Radon>g:
G:\>cd UT2004/System
G:\UT2004\System>ucc make
----------------------------Core - Release----------------------------
---------------------------Engine - Release---------------------------
----------------------------Fire - Release----------------------------
---------------------------Editor - Release---------------------------
--------------------------UnrealEd - Release--------------------------
---------------------------IpDrv - Release----------------------------
----------------------------UWeb - Release----------------------------
--------------------------GamePlay - Release--------------------------
-------------------------UnrealGame - Release-------------------------
--------------------------XGame_rc - Release--------------------------
--------------------------XEffects - Release--------------------------
------------------------XWeapons_rc - Release-------------------------
------------------------XPickups_rc - Release-------------------------
--------------------------XPickups - Release--------------------------
---------------------------XGame - Release----------------------------
--------------------------XWeapons - Release--------------------------
-------------------------XInterface - Release-------------------------
---------------------------XAdmin - Release---------------------------
-------------------------XWebAdmin - Release--------------------------
--------------------------Vehicles - Release--------------------------
-------------------------BonusPack - Release--------------------------
-----------------------SkaarjPack_rc - Release------------------------
-------------------------SkaarjPack - Release-------------------------
-------------------------UTClassic - Release--------------------------
------------------------UT2k4Assault - Release------------------------
-------------------------Onslaught - Release--------------------------
---------------------------GUI2K4 - Release---------------------------
----------------------UT2k4AssaultFull - Release----------------------
-----------------------OnslaughtFull - Release------------------------
--------------------------xVoting - Release---------------------------
------------------------StreamlineFX - Release------------------------
--------------------------UTV2004c - Release--------------------------
--------------------------UTV2004s - Release--------------------------
------------------------OnslaughtBP - Release-------------------------
-----------------MeinNeuerWeaponBaseEmitter - Release-----------------
Analyzing...
Parsing MeinNeuerWeaponBaseEffekt
Compiling MeinNeuerWeaponBaseEffekt
Importing Defaults for MeinNeuerWeaponBaseEffekt
Success - 0 error(s), 0 warning(s)...
G:\UT2004\System>
Man findet nun im ./UT2004/System Verzeichnis eine "MeinNeuerWeaponBaseEmitter.u" Datei, worin dieser Effekt als Klasse gespeichert ist!

Um ihn zu benutzen, öffnet man die .u Datei im ActorclassBrowser. Die Klasse erscheint daraufhin im ACB

emittertoclasstut_02.jpg

Und in der Weaponbase ist sie ebenfalls zu finden.

emittertoclasstut_03.jpg

Abschließend sieht das Ergebnis so aus:

emittertoclasstut_05.jpg

Es kann sein, dass ihr den Effekt noch in der Höhe verschieben müsst, in diesem Fall müsst ihr leider nochmal fast von vorne anfangen, und im Emitter unter Location den Startpunkt in der Y-Achse verschieben, bis ihr die gewünschte Höhe gefunden habt. Oder ihr ändert einfach die Spawnhöhe der Waffe, unter SpawnHeight zu finden von default 50 auf einen Wert, damit es mit dem Effekt hinkommt.

Viel Spaß damit!