Dungeon Basics - Daggerfall Workshop
Transcription
Dungeon Basics - Daggerfall Workshop
Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] Dungeon Basics Introduction In this tutorial, we will use the Unity Editor to recreate Daggerfall’s starting dungeon Privateer’s Hold. We will then setup a melee-ready player character with one or two weapons equipped. The player character will also be capable of opening doors, fighting monsters, flipping switches, and riding moving platforms. Getting Started Please create a new project and scene by following the Getting Started tutorial. To summarise: Note: You must be running Unity 5.0.1 or later. Create a New Project and import Custom Package “Daggerfall Tools for Unity.unitypackage”. Empty default scene and add DaggerfallUnity and Player (or PlayerAdvanced) prefabs. Prepare Lighting configuration and set player Rendering Path to Deferred. Set Quality settings to Fantastic. Set Arena2 Path of your local Daggerfall installation. Create Run input binding and optionally invert mouse look. Import Privateer’s Hold Go to the Daggerfall Unity Importer foldout and enter Daggerfall/Privateer’s Hold into Dungeon Name (this field is case sensitive) then click Import. This will take a few seconds to read and convert data from Daggerfall’s files into your Unity scene. When finished, you should have a completed scene like below. Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] Above: Privateer’s Hold. The loose bits of dungeon suspended in mid-air are from “border” blocks which seal off “normal” dungeon blocks from all sides. You can read more about dungeon block layouts on UESP from the following link. http://www.uesp.net/wiki/Daggerfall:Dungeons Player Character During setup, we added a basic player prefab from the Daggerfall Unity/Prefabs/Player folder. If you want to create your own player controller (e.g. using UFPS or similar), you should first study this prefab controller to understand which settings have been made to help player fit to environment. In this tutorial, we will be using the prefab Player as it’s already tuned for Daggerfall’s environments. The prefab player includes a PlayerMotor script capable of riding moving platforms. Select the Player prefab in your Hierarchy panel then set its position to 12.75, 1, 41.8 in Inspector as shown below. This positions our player on top of the Enter marker in Privateer’s Hold. Save your scene with File > Save Scene then click the Play button. You should have a basic player controller capable of moving around with mouse look and W, S, A, D keys for movement. Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] When you’re done experimenting, tap your Esc Key to uncapture mouse and click Play button again to end play mode and return to editing your scene. Player Actions If you ventured out from the starting cave, you would have encountered a door blocking your path. To open this door, we need to add the script responsible for player actions. Inside the Daggerfall Unity/Scripts/Demo folder in Project are several scripts for handling more complicated jobs. We will use one of these to imbue player with the power to open doors. There are many interesting scripts inside this folder for different tasks, and you are encouraged to examine these to learn how certain things are achieved. For now, we just want the player to open doors. Select your Player object in Hierarchy then click Add Component in Inspector. Enter “player activate” in search field then click Player Activate script in search results. Alternatively, you can click Add Component in Inspector (still with Player selected in Hierarchy) and navigate to Scripts > DaggerfallWorkshop.Demo > PlayerActivate. Once the component is added, you should have a single Player Activate (Script) attached to your Player game object in Inspector. Click Play and go exploring. You should now be able to use Fire1 key bind (default is left-click) to open the door out of starting tunnel. If you venture outside the starting area, you will encounter a vicious giant rat. Unfortunately you have no way of fighting back yet. Note: PlayerHealth and ShowPlayerDamage are now a default part of included player prefabs. If you did not start with a prefab, you will need to add these components to your player. Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] Player Weapons Let’s put down that rat! Our first job is to add the WeaponManager script from Scripts/Demo to your Player object, just like we did for the PlayerActivate script above. There are a few properties here that are not immediately clear. Before proceeding, let’s take a minute to study them and understand what they do. Left Hand Weapon and Right Hand Weapon are simple enough. These are the FPSWeapon game objects which handle weapon animations and other details. You can have one per hand for dualwielding. We’ll get to these in a minute. Sheathed is simply a flag used to hide/show weapons. The WeaponManager script uses the Z key to sheath/unsheathe weapons. Sphere Cast Radius is used by the physics system to detect if weapons have struck anything. A sphere cast is used over a ray cast to be more forgiving of target placement. A larger sphere radius will allow the player to hit things at wider angles during combat. Horizontal Threshold and Vertical Threshold are speed values used by the gesture attack system. The mouse must change a minimum of this value (which is best thought of as a speed value from 01) before an attack gesture is registered. If you would like attacks to register with less movement of the mouse, lower this value. Trigger Count is the number of updates in a row the thresholds must be met before an attack gesture fires. This prevents attacks from immediately registering the first direction detected, as this may not be the direction your player is actually trying to gesture in. Increasing this value will make attacks more “laggy”, lowering it will make gestures more “twitchy”. Chance To Be Parried is a fake gameplay stat used to determine how often enemies will deflect your attacks. This would normally be part of true combat mechanics and is here only for example purposes. A successful parry will play one of several parry sound effects and block incoming damage to enemies. Set this to 0 if implementing real gameplay. For now, just leave all the values of WeaponManager as they are. The next step is to create a weapon for the player. Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] Select your Player object in Hierarchy then click GameObject > Create Empty Child. This will create a blank game object under your player. Right-click and rename this child to Right Hand Weapon. With Right Hand Weapon selected in Hierarchy add script FPSWeapon from the Scripts/Demo folder. This will also add required components AudioSource and DaggerfallAudioSource. These components are used to play back weapon sounds. Ignore them for now and let’s have a closer look at the properties of FPSWeapon. Show Weapon toggles weapon visibility on and off. The WeaponManager we setup previously will toggle this based on Sheathed property. Left Hand will flip animations where appropriate to make weapon appear to be in the player’s left hand. Don’t click this option yet, as we’re creating the right hand weapon. Weapon Type and Metal Type determine the animations and palette swaps used to render your weapon. You can change this to any melee weapon combination you like. Avoid hand-to-hand (fists and werecreature) and ranged weapons (bow) for now as these are not fully implemented as of version 1.3.x. Range is the maximum distance the weapon can strike an enemy. This is modified by the Sphere Cast Radius (on WeaponManager above) to prevent weapon gaining extra reach from hit checks. Min Damage and Max Damage represent the damage range transferred to enemies on a successful hit. Unlike the player, enemies have a basic health model and can be killed. Attack Speed Scale will increase or decrease the speed of weapon swings. Draw Weapon Sound is a sound effect enumeration for the sound played when player unsheathes their weapon. Swing Weapon Sound is a sound effect enumeration for the sound played when the player swings their weapon. The pitch of this sound is modulated based on Attack Speed Scale so that slow weapons make a deeper sound and fast weapons make a higher-pitched sound. This is how Daggerfall handles this also. Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] Now that a weapon is created, we need to add it to our player. Go back to WeaponManager (by selecting Player in Hierarchy) and click the little circle to the right of the Right Hand Weapon field in its Inspector. This will allow you to select the Right Hand Weapon game object we just created. Double-click the below to select weapon and close popup. Once this has been selected, your WeaponManager component should resemble below. We have now added a WeaponManager, created a Right Hand Weapon game object, and assigned that game object to your player. Click Play and your weapon should now be visible and have full Daggerfall-styled attacks available. Hold down Fire2 key bind (default is right mouse button) and take a few practice swings. Go kill that rat if you like! Dual Wielding As an added bonus, let’s enable dual-wielding for your player. The first thing we need is a second weapon object. Click on your Player in Hierarchy then click GameObject > Create Empty Child. Rename this game object to Left Hand Weapon and attach FPSWeapon component. Setup your new weapon however you like, but remember to select the Left Hand tick box (see below) so the animations are correct. Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] Next, we need to place this weapon in the player’s left hand. Go back to the WeaponManager component (by selecting Player in Hierarchy again) and click the little circle to the right of the Left Hand Weapon field in Inspector. Double-click the Left Hand Weapon object we just created. Your WeaponManager should now resemble the following with both weapons equipped. Go into play mode and you should now see both weapons equipped like the below screenshot. Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] Above: Player with two Dwarven daggers equipped. Player Footsteps Right now our player just glides around in silence. Frankly it’s kind of creepy. Let’s add some footstep sounds. Select your Player object in Hierarchy and add PlayerFootsteps from Scripts/Demo. This will also add AudioSource and DaggerfallAudioSource components. You can just ignore these and focus on the PlayerFootsteps component below. Walk Step Interval is the number of game units your player must travel (while grounded) before the next footstep sound is played. Walk Run Internal is the same for when player is sprinting/running. This helps you tune footstep intervals independently for each state. Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] Pitch Variance is a random +/- pitch applied to each footstep. This prevents footsteps from sounding too mechanical. Internally, the script creates its own AudioSource for playing footsteps so that other audio on the player is not modulated by footstep pitch. Ground Distance is the height above ground where footsteps stop playing. This needs to be a little higher than expected due to brief moments of controller freefall going down stairs and ramps. Setting this value too low will result in footsteps falling silent on stairs, and setting this too high will result in footstep sounds while jumping. The default setting should be adequate in most cases. Footstep Volume Scale controls the volume of footstep sounds relative to main volume. This is set to 0.7, which means footsteps are played at just below three-quarter volume. Footstep Sound is a sound enumeration for the sound played each footstep. There are sounds for when the player is on a variety of surfaces. Fall Hard Sound is a sound enumeration played when the player falls from a high distance, but not high enough to be hurt. Fall Damage Sound is a sound enumeration played when the player falls from high enough to be hurt. If you go into play mode again now, your player should make footstep sounds while walking, running, and falling from high places. Action Doors An action door is a mobile 3D door which can swing open with a hinged rotation. These doors are different to static doors, which are just painted on the outside of buildings and dungeon exits. If you drill down into the scene via Hierarchy you will find many action doors added per block. These were all setup for you by the importer. Locate the first door leading out of the starting tunnel and select it directly in your scene view, as in the below screenshot. Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] Above: Action door leading out of starting tunnel selected in scene view. While looking at the Inspector, you will see the door is already setup with a mesh, materials, collider, audio source, and a DaggerfallActionDoor script like below. Start Open will start a door in the open position when scene is played. Is Locked will prevent the player or enemies opening the door, but the player can bash the door open by attacking it with their weapons. Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] Is Magically Held is another form of lock which cannot be bashed open. Only a magic spell (which would clear this flag) can unlock this door. Open Angle is the Y rotation used when the door swings open. All action doors are -90 by default. Open Duration is the length of times in seconds for the door to transition between open and close states. Disable Collider When Open changes the collider to a basic trigger when door is opened. This allows player to walk through the mesh once door has been opened, but is still able to close it again. Chance To Bash is the base chance of a successful bash per hit. This could be modified by any number of player statistics, skills, weapon weight and type, etc. Play Sounds will play the default door sounds. Open Sound, Close Sound, Bash Sound are the sounds played when the player open, closes, or attacks the door. Locked Sound is the sound played when the player attempts to open a locked or magically held door. It gives the player some feedback the door needs special handling to open. As an exercise, let’s lock the first door so the player must bash it open to escape the starting tunnel. With the first door selected, tick the Is Locked property in Inspector like below. Once the door is locked, enter play mode and try bashing the door open. You should crack it open within a few swings. Ambient Sounds No Daggerfall dungeon is complete without some creepy sound effects and brooding music. Let’s start with ambient sounds. Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] Click menu Game Object > Create Empty. Rename new object to Ambient Effects Player. The ambient effects use 2D sound, so we don’t need to worry about player position in the world. With Ambient Effects Player object selected in Hierarchy, add the component Scripts > DaggerfallWorkshop.Demo > Ambient Effects Player in Inspector. This will automatically setup any other required components. Min Wait Time is the minimum number of random seconds before next sound effect plays. Max Wait Time is the maximum number of random seconds before next sound effect plays. Presets are available ambient effect presets. More will be added over time, or you can open the script and create your own custom presets. Play Lightning Effect is only valid outdoors. It will flash the sky during storms in time with lightning flashes. Note: This option has been deprecated in 1.3. Sky For Lightning is the sky to flash. Leave this blank. Note: This option has been deprecated in 1.3. Light For Lightning is a light to flash brightly when lightning strikes. Leave this blank. Note: This option has been deprecated in 1.3. All we need to do here is drop down Presets and select the Dungeon preset. Save your scene and play the game to hear creepy dungeon sounds like doors opening, moans, scuttling, and chains jingling. If you want to hear effects more frequently, play with the min/max wait time until happy. Adding Music Now we need some music. Select Player in Hierarchy then click menu GameObject > Create Empty Child. Rename it to Song Player. This object is parented to player so music will travel with player. Ensure Song Player transform is positioned at 0, 0, 0. Now Select Song Player and use Inspector to add component Scripts > DaggerfallWorkshop > Daggerfall Song Player. Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] Show Debug String will show information about the current song. Enable this if you like. Gain will boost the volume of the playing song. Sound Bank is the SoundFont used by MIDI synthesizer. Advanced users can import their own SoundFonts to change how the music sounds. Song Folder is where the .mid songs are located in Resources. Song is the current song. This will be played at startup. Now select track Song_dungeon from the Song list. When you next play the game, our song will start playing automatically if AudioSource > PlayOnAwake is true. If you would like the music to loop, make sure AudioSource > Loop is enabled. If you feel the music is too loud, adjust the Gain until happy. Note: If music does not start playing, try saving your scene then closing and reopening Unity. There is an intermittent problem with MIDI synth and Unity editor. Player Torch The last thing we need to do is give the player a torch to light their way. The Player prefab already has a basic torch light included but it is currently disabled. To enable this, expand the Player object in Hierarchy and select Torch. In the Inspector, click the box to enable the Torch game object. The next time you play the game, your player will carry with them a simple point light to make their immediate area brighter. If you would like more light, increase the Range of your Torch object. Daggerfall Tools for Unity Tutorial Dungeon Basics V1.3.31 [Unity 5.0.1] | 06/08/2015 Devblog Forums Source YouTube Twitter Email dfworkshop.net forums.dfworkshop.net github.com/Interkarma/daggerfall-unity youtube.com/daggerfallworkshop twitter.com/gav_clayton [email protected] Conclusion This concludes the Dungeon Basics tutorial. Have fun exploring your dungeon! If you feel up to it, here are a few enhancements you can make to learn more from the example scripts. Create a player health system. The player should receive damage from enemy hits and falling too far. Handle player death by setting them back to the starting point with full health. Create a basic stats system for both player and enemies which modify attack speeds and damage. Create a simple spell to unlock and open magically held doors. Tip: You can open or close action doors from script using actionDoor.ToggleDoor(). Create a basic inventory system where the player can change weapons while playing. Tip: You can change the properties of FPSWeapon from script at runtime to modify weapon and material type.