|
|
|
|
|
Please take note! For mod developers working with Unreal Tournament 2003, this documentation is meant to be a starting point for your own explorations into UT2003, not a definitive guide. There will be differences between the documentation here and the product in your hands, and you may have to figure out quite a bit for yourself. Check out the Unreal Tournament 2003 page in the Unreal Powered area for links to community sites if you're having problems. UDN is a licensee support site, and cannot provide technical support or game-specific assistance to end users.
|
|
|
|
VolumesTutorial |
|
|
|
|
|
Licensees can log in.
Interested in the Unreal engine? Check out the licensing page.
Questions about UDN itself? Contact the UDN Staff.
|
|
|
|
|
|
|
|
|
Last updated by Jason Lentz (DemiurgeStudios) to update for the 2110 build. Original author was Lode Vandevenne (UdnStaff).
Volumes are invisible brushes that "know" when actors or players enter or leave it. PhysicsVolumes are a more advanced version of Volumes, you can enter a lot of settings that have to do with physics in them. PhysicsVolumes replace almost all the things you could do with zones in older versions of the Unreal Engine. Zones are now only used to partition your level for the speed enhancements, the Reverb settings, AmbientLighting, SkyZones, WarpZones, and to enable terrain, fog, etc... You have to use the PhysicsVolumes for Water, Friction and Gravity settings, Velocity settings, PainCausing, LocationNames, Ladders, etc... This is completely zone-independent, so you can for example make some water and some lava that live together in the same zone. This way, the problem where you can't see the terrain when you're under water doesn't exist anymore, because the water and land can be placed in the same TerrainZone.
You can give PhysicsVolumes any shape you can give normal brushes, and the engine will always know when you're inside or outside the Volume. Only when you're inside the Volume, its physics properties are applied (for example if you have a donut shaped PhysicsVolume and its set to bWaterVolume, there'll be water inside the donut, but not outside of it.)
To add a PhysicsVolume, first give your red brush the shape and location you want, then press the Volume Button in the left toolbar. Then you get a list where you can choose what Volume you want to add. The Volume and the PhysicsVolume are the motherclasses, the others are subclasses of the PhysicsVolume, some of them with extra features added in the script, others are only PhysicsVolumes with modified properties. Depending on what you need, you have to choose one of the PhysicsBrush classes from the list, for example if you want a ladder, you have to choose the LadderVolume. A detailed description of every class will follow soon.
When you add one of them in the editor and moved away the red brush, it looks like a pink brush.
After you added the PhysicsVolume, you may freely rotate, resize and relocate it.
PhysicsVolumes are invisible in the game, so for things like water you have to use them in combination with a translucent sheet brush for the watersurface.
A BlockingVolume is simply an invisible, blocking, brush. A blocking volume blocks players and other actors, but it allows zero extent traces (projectiles, rockets, ...) to go through. Players will be able to walk on this invisible staircase, but you can shoot through it:
BlockingVolumes provide faster and better collision than Static Meshes: they add BSP to the map, but they won't cut any other BSP from the level and they can't create BSP-holes because they aren't rendered.
To use a BlockingVolume around a Static Mesh, just add a BlockingVolume around it, and then in the properties of the Static Mesh, in Collision, set bBlockNonZeroExtendTraces to False: now the Static Mesh will stop bullets, but will let players walk through. Now, the players are blocked by the BlockingVolume instead.
This is the motherclass of the PhysicsVolume. Basically, the only thing you can use it for, is to give a location a LocationName, if this location doesn't need the properties of the PhysicsVolume.
The LadderVolume is an enhanced PhysicsVolume, with a script that allows players to climb a ladder. To make a ladder, first make a wall with a laddertexture, and then make a LadderVolume brush that has the same height and width as the laddertexture, and is big enough to contain the player, but not too big or the player will start climbing in the air. If you make it 64 units thick, it should be just fine, so if the laddertexture is 1024 units high and 256 units wide, make the PhysicsVolume a 1024*256*64 cube and add it in front of the ladder texture. The pink lines on the screenshot represent the LadderVolume.
Select the LadderVolume and look at it in the Top View: you should see an arrow. This arrow has to point towards the wall you will be climbing. To change the direction, open the properties of the LadderVolume, go to LadderVolume and use the Yaw setting in WallDir. Set Yaw to 49152 for North, 0 for East, 16384 for South, 32768 for West or any value between these for other directions.
After you did this, rebuild and play, and you can climb the ladder already. When you stand in front of it, use the Up arrow to move up and the Down arrow to move down. If you stand on top of the ladder, trying to use it to climb down may be tricky.
When you rebuilt the map, the editor automatically added two AutoLadders at the bottom and top of the ladder. These are path nodes used by the AI.
If you want, you can also add these actors manually. First, set bAutoPath to False in the LadderVolume Properties. Then, in the Actor Class Browser go to NavigationPoint --> SmallNavigationPoint and select Ladder. Add one on top and one at the bottom of the ladder, and rotate them so their arrows point towards the wall. Now bots will be able to climb the ladder.
The LadderVolume, PressureVolume, WaterVolume, LavaVolume, SlimeVolume, and VacuumVolume are all subclasses of the PhysicsVolume. The PhysicsVolume has a lot of properties that have to do with the physics inside the PhysicsVolume. All its subclasses have these properties as well, so you can for example fill a ladder with water.
An explanation for all its properties will follow later in this tutorial.
This volume is should never be placed. It exists so that the engine can put it over everything that does not already have a PhysicsVolume.
This should be able to kill players inside the volume if another player hits a trigger, but it doesn't seem to work.
If you add this Volume, inside of it will be water. The player can swim in it, and there'll be a blue foggy effect. There will also appear splash rings and sounds when he enters or leaves the water. If the player remains too long under water, the player's life will incrementally decrease until they die. All of this is done by setting some of the properties of the PhysicsVolume, so you can also make the water yourself if you want to. There are more details about these properties further in this tutorial.
For the water, you probably want a watersurface texture as well. To get this, add a Special Brush with exactly the same shape as the WaterVolume around the water. To make the red brush have the same shape as the WaterVolume, right click on the WaterVolume, expand "Polygons" and choose "To Brush".
Of course, you don't have to do this if the red brush is there already. After you have your brush ready, select an appropriate shader texture in the Texture Browser. Then to add the Special Brush, press the Add Special Brush button in the left tool bar, and in the window that appears check "Non Solid" (also selectable through the pull down menu) and "Zone Portal" (for better world optimization).
If you move away the red brush, you'll see a green brush around the grey WaterVolume brush now. This brush is visible in the 3D view when you selected it in a 2D view.
Because you added the Special Brush after the WaterVolume, the Special Brush will be the one visible in the 2D views, so it overlaps the WaterVolume. If you want to open the properties of the WaterVolume, you have to move the green brush away a bit before you can right click on it. Solutions are to add the WaterVolume after you added the Special Brush, or to set the order of the WaterVolume to Last (right click on it, choose "Order" and choose "To Last").
This subclass of the PhysicsVolume option is still available in the latest 2110 build, but it is obsolete.
This subclass of the PhysicsVolume is filled with slime. When the player falls in it, he'll lose health and die soon. This option is still available in the latest 2110 build, but it is obsolete.
This subclass of the PhysicsVolume is filled with lava. This kills the player as well, and also creates explosions when the player enters it. This option is still available in the latest 2110 build, but it is obsolete.
This Volume is probably not in the build you are using, and if it is, it may not work It is used to indicate to bots where they should stand in order to snipe targets.
This volume will set up an area that will instantly kill any player that enters into it with the message "Player left a small crater." When setting up levels that have bottomless pits or are set so high in the air that a fall would be lethal, these volumes are handy for speeding up the respawn process. Just make one large enough to encompass the foot print of the entire level and set it below any point that is intended to be accessible and it will obliterate any players that enter it.
By playing with the PhysicsVolume properties, you can get cool effects such as low gravity areas, conveyor belts, pain, fluid friction, fog, slippery floors, etc... To open the properties, right click on the PhysicsVolume you added, and choose PhysicsVolume Properties. There expand PhysicsVolume.
This is a brief explanation of what the -working- properties do:
- bMoveProjectiles: if there is ZoneVelocity and bMoveProjectiles is False, this velocity affects players, but not projectiles. However, if you set bMoveProjectiles to True, projectiles such as rockets, grenades, ..., will also move with the ZoneVelocity. There's more info about this ZoneVelocity in the section Gravity & Velocity.
- bNeutralZone: if this is True, the player can't be killed in this zone. Not even by the redeemer.
- bNoInventory: if True, in a multiplayer game, the players won't drop weapons inside of this PhysicsVolume when killed.
- bPainCausing: if True, the player will get damage if DamagePerSec is larger than 0. More details about this are in the section Pain.
- bWaterVolume: this property probably isn't in your editor, because for some reason it was hidden in the script. Info on enabling this property and what it does is in the section Fluid.
- DamagePerSec: how many damage points per second the player takes, if bPainCausing is True. More details about this are in the section Pain.
- DamageType: this determinates the message that appears when the player is killed by the DamagePerSec. More details about this are in the section Pain.
- EntryActor, EntrySound, ExitActor, ExitSound: these only work if bWaterVolume is True, more about this in the section Fluid.
- FluidFriction: if bWaterVolume is True, this option makes the difference between water, quicksand or butter. More about this in the section Fluid.
- Gravity: with this, you can change the direction and amount of gravity. More about this in the section Gravity & Velocity.
- GroundFriction: with this, you can set how slippery the floor is. More about this in the section Slippery Floors.
- Priority: if two or more PhysicsVolumes overlap each other, the one with the highest Priority will rule, so if you have a WaterVolume inside a PhysicsVolume with low gravity, and you want the player to be able to swim when he enters the WaterVolume, you have to give the WaterVolume a higher Priority setting than the PhysicsVolume with low gravity. If you would have given the low gravity PhysicsVolume a higher priority, the WaterVolume would just be ignored inside the PhysicsVolume. Then only the parts of the WaterVolume that are not inside of the PhysicsVolume would be filled with water.
- TerminalVelocity: changes the speed you get when falling. More about this in the section Gravity & Velocity.
- ZoneVelocity: a speed the player will get when entering this PhysicsVolume. You can for example use it for conveyor belts. More about this in the section Gravity & Velocity.
You can give all of the Volumes a LocationName. Enter it in the Volume Properties --> Volume --> LocationName.
You can use this LocationName for example to appear next to the player's name when he gives a team message while he's inside this Volume, so the other players know where he is. This is the only useful property you can give the basic Volume class, and also all its subclasses. So if you want an area in your map to have a name, but the area doesn't need any of the physics properties, you better use the normal Volume class.
For example to give a blue effect under water, or the red or green effect in lava or slime, you can use VolumeFog. This fog works exactly the same way as the DistanceFog, but is only visible when you're inside of the Volume. You can't see the fog when you're outside of it. The VolumeFog settings are in the PhysicsVolume Properties --> VolumeFog.
To enable the VolumeFog, you have to set bDistanceFog to True. Then the following properties will determinate how your fog will be looking:
- DistanceFogColor: the color of the fog. If you press the "Pick" button, you get a dropper tool, so you can pick any color in any of the 3D or 2D views. With the "..." button, you get the Windows Color Picker. You can also enter a RGB value manually when you press the button.
- DistanceFogEnd: This is the max distance you will be able to see (in map units), everything behind this is completely covered by the fog.
- DistanceFogStart: From this distance, the fog will start. Everything closer to the player isn't covered by fog, everything between DistanceFogStart and DistanceFogEnd fades from no fog to 100% fog. Obviously, DistanceFogStart has to be smaller than DistanceFogEnd. If you do the opposite, there will be fog in the beginning and no fog at the end, which looks unrealistic and weird.
To make your PhysicsBrush to cause pain, you have to set bPainCausing to True, and to enter a value in DamagePerSec. When the player is inside the PhysicsVolume, he'll lose every second the number of health points you entered in DamagePerSec. When he lost all his health points, he'll die.
You can also set a DamageType, this determinates the death message of the player and several other things. The DamageTypes are in the Actor Class Browser --> DamageType. Select a DamageType there, and then select DamageType in the PhysicsBrush Properties and press the Use button, so the name of the DamageType appears there. For example, for a LavaVolume, you probably want to use the DamageType Burned.
Inside the Default Properties of the DamageType you can view the text messages that will appear when the player dies, settings for the ScreenFlashes, and more. However it is not sure this is all working.
There are a lot of settings to make PhysicsVolumes filled with a fluid the way you want it, for example the sound that plays when the player enters or exits the fluid, the fluidfriction, etc...
To fill the PhysicsVolume with a fluid, bWaterVolume has to be set to True. However, for some reason, this property was hidden in the script. If you don't want to change the script, the best way to add a PhysicsVolume with bWaterVolume set to True already: these are the WaterVolume, the SlimeVolume or the LavaVolume. However, if you want the property to show up in the PhysicsVolume Properties, you have to change a small thing in the script. In the Actor Class Browser --> Brush --> Volume, double click on PhysicsVolume so you see its script. There change the line (it's line number 29) "var bool bWaterVolume;" to "var() bool bWaterVolume;", then open the menu Tools of the script editor and choose "Compile Changed".
Now the property bWaterVolume will be visible in the PhysicsBrush properties as long as the editor is open, so you can set it to True (or if you have a LavaVolume, a WaterVolume or a SlimeVolume, you can set it to False if you want that). For this section, set it to True. Now the player can swim in this Volume.
To change the friction of the fluid, use FluidFriction. This value determinates if the fluid will be like water, quicksand, butter or even close to solid mass.
- If you set this value very low, for example to 0.5 or 0, the players velocity will hardly or not get reduced, so when he swims up and released the up button, he'll stay moving up.
- The default value of the WaterVolume, 2.4, is the most realistic setting for normal water
- If you make the value higher, for example 8 or 64, the player will move slower in the fluid. The higher, the harder it becomes to move around
- If you make this value too high (for example 50000), the fluid will become some sort of inversed mass, and if the player manages to get inside it, he'll move to the left when he strafes right, he'll move backwards when he presses forward, etc... Also, when you shoot a projectile in this, it'll bounce onto the surface of the fluid and returns to the player.
You can let the Volume create an actor on the surface of the fluid when the player, or another actor, enters or leaves it. You can for example use it for rings on the surface on the water, or for explosions on the lava. First, select the actor you want in the Actor Class Browser, then in the PhysicsVolume properties click on EntryActor or ExitActor and press the Use button, so the name of the selected actor appears there. EntryActor is the actor that will appear when the player enters the fluid, the ExitActor appears when the player exits it. This only works if bWaterVolume is True. Waterrings are in the Actor Class Browser --> Effects --> WaterImpact. A flame effect for lava is at Effects --> AnimSpriteEffect --> UT_FlameExplosion.
You can also let a sound play when the player enter or leaves the Volume, for example a splash sound for the water. Select the sound you want in the Sound Browser, then in the PhysicsVolume properties click on EntrySound or ExitSound and press the Use button, so the name of the selected sound appears there.
You only have to care about the properties described above if you're not happy with the built-in WaterVolume, SlimeVolume or LavaVolume, these have all the necessary settings enabled already.
By default, the players and objects move downward with acceleration until they reach the ground, like the gravity of a planet. There are three different settings that can affect this inside a PhysicsVolume: Gravity, ZoneVelocity and TerminalVelocity.
ZoneGravity will work like the real gravity of planets: it will move you with acceleration. In UnrealEd, the Gravity is expressed in something that gets close to the cm/s2. If you go to PhysicsVolume --> Gravity in the PhysicsVolume Properties, you'll see there are three values: X, Y and Z.
By default, X and Y are 0 and Z = -950. This lets the player fall to the ground. If you assume that the upper part of the Top View is the North, here's what the settings do:
- If X > 0, the player will be pulled towards the East by the gravity
- If X < 0, he'll be pulled towards the West
- If Y > 0, he'll be pulled towards the South
- If Y < 0, he'll be pulled towards the North
- If Z > 0, the player will fall to the ceiling (reversed gravity)
- If Z < 0, he'll fall to the floor
The total gravity is the sum of these 3 components, so if X = 425, Y = -950 and Z = -950, the gravity will take you to the South-East and down. It will take you to the South with more force than it will take you to the East. If you want to make a low gravity part in your map, set Z to for example -300. You can make very high jumps then, and you'll fall down slowly. If you want a very heavy gravity, use for example Z = -2000. The player will then hardly be able to jump, and lose health more quickly when falling from high ledges.
Remark: The gravity setting only changes the direction and amount of gravity, but doesn't change the direction of your feet. If you really want to make a rotating space wheel, you can fake the changing gravity by using sloped WarpZones.
The ZoneVelocity also has an X, Y and Z value.
These have the same directions as the X, Y and Z of the Gravity, but the ZoneVelocity is a constant speed, while gravity is acceleration. This can create interesting effects, for example if the Z value of Gravity is -950 and the Z value ZoneVelocity is +950, and the player jumps, he'll first fly up with the speed 950. But the negative acceleration of the gravity will reduce the positive velocity, and after a few seconds, the player will start moving downwards, because the speed created by the gravity has become for example -1900 while the constant speed of the velocity is still +950, which results in a speed of -950. You can use the ZoneVelocity for example for conveyor belts, wind effects, or for strong currents in a river that take the player with them.
The TerminalVelocity setting changes the speed when you fall down. You can still jump at normal height, but you will fall down very slow when TerminalVelocity is lower than 2500, or very fast when it's higher than 2500. You can walk normally in PhysicsVolumes with a changed TerminalVelocity, it's only after you jump up that you can see the effect of it.
You can change the friction of the player's feet on the floor by using the property PhysicsVolume --> GroundFriction. When you make this setting very low he'll be able to slide on the floor, so he'll continue moving after he released the move buttons.
- A setting of 0.3 or lower will make the player slide really, really long after he released the move buttons
- A setting lower than 3 will make the player slip noticeable
- 8 is the default value, but there is almost no difference between for example 7 and 8. Also, making the value higher than 8 makes no sense, because the player will not slip anyway.
- If you make the value too high, for example 500, the player will "shake" a little while walking, and he'll make weird jumps.
AntiPortalActors act like AntiPortal surfaces, but they're invisible. AntiPortal surfaces occlude everything that is behind them, this means geometry that isn't visible for you isn't rendered. This is great for speed optimizations. More info is here: LevelOptimization.
But, AntiPortal surfaces only occlude an object (for example a StaticMesh, a terrain sector or a BSP surface) if the object is covered COMPLETELY by the surface from your point of view. This means, if there are two different AntiPortal surfaces next to each other, and the object is partially behind the one and partially behind the other surface, the object won't be occluded by any of the AntiPortal surfaces. The following series of screenshots shows an example. There is an object, and there are two AntiPortal surfaces: a white one and a green one. On the first screenshot, you can see the object because it's not completely behind the white surface. On the second screenshot, you can see it because it is completely behind the white surface. However, on the third screenshot you can see the object again, even though the green surface is also an AntiPortal.
Note: normally, translucent surfaces aren't meant to be AntiPortal of course because you want to see things behind them, but for testing purposes it's great.
Note: you can only see the occlusion in the game, not in the editor.
Luckily, there exist AntiPortalVolumes: instead of flagging both surfaces AntiPortal, you can add one big AntiPortalVolume sheet on the surfaces, this way you get a much larger occlusion area. So then the third screenshot from the last series would look like this (the object is behind there, really!):
To add the AntiPortalActor in the editor, create a sheet brush, add it around the surfaces you want to be occluding, and then hit the Add Antiportal button. This adds an AntiPortalActor with the shape of the red brush.
Note: the AntiPortalActor may be invisible in the editor, if it's not selected. If it's selected, it'll look yellow (orange). If it's invisible, try to select it by drawing a red selection box around it (use CTRL+ALT+left mouse button and drag the mouse), and you should see the yellow AntiPortalActor.
For example, here the AntiPortalActor is placed around both BSP surfaces from the previous example:
It's also great to place AntiPortalActors inside of mountains and hills of terrain, because the terrain doesn't occlude. For example the AntiPortalActor inside this mountain proves to be really useful, because it occludes everything behind the mountain, unlike the mountain itself:
Note: make sure the player can never get inside an AntiPortalActor. If he gets inside, he's completely surrounded by the occluding brush and he'll see nothing, or a HOM-effect!
|
|