Difference between revisions of "UDKOSC"
m |
m |
||
Line 1: | Line 1: | ||
UDKOSC is an implementation of the Unreal3 engine built using the Unreal Development Kit(UDK) with an integrated OscPack Windows dll linked to custom UnrealScript classes. | UDKOSC is an implementation of the Unreal3 engine built using the Unreal Development Kit(UDK) with an integrated OscPack Windows dll linked to custom UnrealScript classes. | ||
− | By linking UDKOSC's UnrealScript classes to a customized oscpack Open Sound Control c++ implementation, actions and motions taken by virtual actors in the Unreal3 game engine are encapsulated as OSC messages over UDP and used to control dynamic music and sound synthesis systems in a manner similar to [http://www.q3osc.org q3osc]. | + | By linking UDKOSC's UnrealScript classes to a customized oscpack Open Sound Control c++ implementation, actions and motions taken by virtual actors in the Unreal3 game engine are encapsulated as OSC messages over UDP and can be used to control dynamic systems - music and sound synthesis systems or any other OSC-enabled system - in a manner similar to [http://www.q3osc.org q3osc]. |
− | UDKOSC takes OSC input as well, allowing external OSC control of Pawns, the player Camera and projectile targeting as well. | + | UDKOSC takes OSC input as well, allowing external OSC control of the main Player, "Bot" Pawns, the player Camera and projectile targeting as well. |
[[File:ut3osc_seeking_projectiles.jpg|300px|thumb|right|UDKOSC Seeking projectiles tracking Target projectiles]] | [[File:ut3osc_seeking_projectiles.jpg|300px|thumb|right|UDKOSC Seeking projectiles tracking Target projectiles]] |
Revision as of 15:42, 15 June 2013
UDKOSC is an implementation of the Unreal3 engine built using the Unreal Development Kit(UDK) with an integrated OscPack Windows dll linked to custom UnrealScript classes.
By linking UDKOSC's UnrealScript classes to a customized oscpack Open Sound Control c++ implementation, actions and motions taken by virtual actors in the Unreal3 game engine are encapsulated as OSC messages over UDP and can be used to control dynamic systems - music and sound synthesis systems or any other OSC-enabled system - in a manner similar to q3osc.
UDKOSC takes OSC input as well, allowing external OSC control of the main Player, "Bot" Pawns, the player Camera and projectile targeting as well.
Contents
- 1 Installer
- 2 Overview
- 3 Projects & Papers
- 4 Custom Functionalities
- 5 Custom Classes and Files
- 6 Helpful Console Commands
- 7 UDKOSC Exec Methods
- 8 OSC Output and Input
- 9 Getting Started
- 10 Timeline
- 10.1 12/20/2012
- 10.2 12/20/2012
- 10.3 11/24/2012
- 10.4 11/18/2012
- 10.5 10/21/2012
- 10.6 9/19/2012
- 10.7 9/07/2012
- 10.8 9/04/2012
- 10.9 9/03/2012
- 10.10 9/02/2012
- 10.11 8/25/2012
- 10.12 07/12/2012
- 10.13 05/19/2012
- 10.14 08/29/2010
- 10.15 08/28/2010
- 10.16 08/27/2010
- 10.17 08/26/2010
- 10.18 8/22/2010
- 10.19 8/19/2010
- 10.20 8/18/2010
- 10.21 8/17/2010
- 10.22 8/16/2010
- 10.23 8/15/2010
- 10.24 8/14/2010
- 10.25 8/13/2010
- 10.26 8/12/2010
- 10.27 8/11/2010
- 10.28 8/10/2010
- 10.29 8/09/2010
- 10.30 8/08/2010
- 10.31 8/03/2010
- 10.32 8/01/2010
- 10.33 7/31/2010
- 10.34 7/27/2010
- 10.35 6/13/2010
- 10.36 6/1/2010
- 11 random notes
- 12 Links
- 13 OSCControl Gestures
Installer
The 2012-12 UDKOSC installer package and the udkosc .dll can be downloaded from:
Source for UDKOSC and helper applications can be downloaded from github:
Overview
UDKOSC is the fourth project in a lineage of integrating virtual worlds and environments with interactive audio and music servers with a common goal of creating shared and distributed musical performance spaces. Like our custom Sirikata implementation for the 2009 MiTo festival, q3osc and Maps & Legends before, UDKOSC combines a game-based virtual world implementation (in this case the Unreal Development Kit or UDK) with customized classes to stream game-data to interactive sound-servers using Open Sound Control messages over UDP. In this manner, gestures, motions and actions from actors in virtual space can be transformed in real-time into control messages for complex audio and musical software systems.
While the UDK offers only free access to the engine's UnrealScript programming layer (leaving the core C++ engine accessible only through significant financial investment) UnrealScript has a provision for binding Windows Win32 .dll's to UnrealScript classes, enabling code such as a C++ implementation of Open Sound Control (in this case, Ross Bencina's OSCPack) to provide bi-directional communication between game engine and sound-server. By then creating mirrored data structures both in UnrealScript classes and in the Windows .dll, data can be passed back and forth between the UDK and any OSC-enabled control system or software, including ChucK, Supercollider, Pure Data (PD) and Max/MSP.
For UDKOSC, a custom Windows oscpack_1_0_2.dll was compiled with specific extern methods and mirrored data structures to communicate with the game engine, both to stream specific game data out as OSC over UDP (including Pawn XYZ coordinate positioning, XYZ coordinate tracking for in-game projectiles, state and XYZ coordinate info for Static Mesh and Interp actor classes) and to send control data from iPad controllers and from the audio-engine itself back into the game to control Global GameInfo parameters such as world Gravity and GameRate, as well as specific positioning information for projecties and static actors.
Currently, OSC output from game engine includes:
- User XYZ coordinate data
- fired projectile coordinate data
- Static mesh objects XYZ coordinate data
- Static mesh bump event
- Static mesh takedamage event
UDKOSC can receive OSC control input in the following ways:
- Player X, Y, Z movement vector data
- Player Speed
- Player Jump + Jump Height
- Player teleport coordinates (X, Y, Z)
- Camera X, Y, Z movement vector data
- Camera Pitch, Yaw, Roll control data
- Camera Speed
- "Large" Projectile homing-target coordinates
Custom engine features include:
- Player and Camera motion control over OSC
- bouncing projectiles (customized OSCProj_ShockBall and OSCProj_LinkPlasma)
- global projectile destructor exec command
- homing/seeking projectiles (OSCProj_SeekingShockBall and OSCProj_SeekingRocket)
- projectiles tracking projectiles
- projectiles tracking OSC Input vector coordinates
- OSC Interp Actor and Trigger classes to send OSC on move and trigger events
Projects & Papers
UDKOSC was first used in performance at the 2010 September 7,8 performances of Tele-Harmonium and Perkussionista in Milano, Italy at the 2010 MiTo (Milano-Torino) Festival.
- Teleharmonium: http://vimeo.com/15792555
- Procedural Audio demo by Graham Gatheral: http://designingsound.org/2011/06/audio-implementation-greats-11/
An overview of UDKOSC and its usage at the MiTo festival can be found in this Springer Journal paper: https://ccrma.stanford.edu/~rob/papers/springer_jmui_hamilton.pdf
ICMC 2011 UDKOSC paper: https://ccrma.stanford.edu/~rob/papers/udkosc-an-immersive-musical-environment.pdf
Custom Functionalities
- Player Pawn outputs location, landed, crouch events over OSC
- Homing projectiles (ShockBalls, SeekingShockBalls)
- Can be assigned to track other projectiles (ShockBalls), UTVolumes or targeted locations (via left-mouse fire trigger)
- Can be resized; size param is sent over OSC
- Bounce and Destroyed events tracked over OSC
- Instance numbering and class name/type tracked over OSC
- ShockBall projectiles can target XYZ coordinates input via OSC
- InterpActors track position deltas over OSC
- takeDamage, bump and touch events output OSC
- Triggers fire triggeron, triggeroff events over OSC
- Gravity and GameSpeed can be set via OSC
- OSC can be used to control player movement (X, Y, Z vector directions, Speed and Jump)
- OSC can be used to control camera movement (X, Y, Z, Pitch, Yaw, Roll, Speed)
Custom Classes and Files
UDK\UDK-2010-07\Binaries\Win32\UserCode
oscpack_1_0_2.dll
UDK\UDK-2010-07\UDKGame\Config
DefaultGame.ini DefaultOSC.ini DefaultUT3OSC.ini DefaultEngine.ini DefaultInput.ini
NOTE: Default .ini files generate UDK*.ini files when the engine runs. As such, make sure to delete UDK*.ini files after an svn update.
UDK\UDK-2010-07\Development\Src\UT3OSC\Classes
ActorFactoryOSCInterpActor.uc ActorFactoryOSCKActor.uc ActorFactoryOSCKActorFromStatic.uc ActorFactoryOSCStaticMeshActor.uc DefaultGame_QT3OSC.ini OSCInterpActor.uc OSCKActor.uc OSCKActorFromStatic.uc OSCParams.uc OSCPawn.uc OSCPlayerController.uc OSCPlayerControllerDLL.uc OSCProj_LinkPlasma.uc OSCProj_ShockBall.uc OSCProj_SeekingShockBall.uc OSCProj_SeekingRocket.uc OSCSeekingShockBallLight.uc OSCStaticMeshActor.uc OSCTrigger.uc OSCWeap_LinkGun.uc OSCWeap_ShockRifle.uc OSCWeap_RocketLauncher_Content.uc OSCWeap_SeekingShockRifle.uc OSCWorldInfo.uc ut3osc.uc
Helpful Console Commands
From: http://udn.epicgames.com/Three/ConsoleCommands.html
- ToggleScreenShotMode
- SetRes 1920x1080w (w=windowed, f=fullscreen)
- reald togglestereo (from http://forums.epicgames.com/threads/909651-RealD-3D-Support-Thread)
- spawnpawnbot
- OscCheckPawnBots
- OscPawnMove
UDKOSC Exec Methods
Exec methods can be run from the UDK command-line in-game. The command-line can be accessed by pressing "~" for the full drop-down terminal window or by pressing "TAB" for the single-line window-bottom command-line. These are the custom UT3OSC exec methods that have been implemented to this point:
- setAudioGroupVolume Master 0
- behindview
- changeplayermesh <1-4>
- sidetrace <float distance>
- pawntrace <float distance>
- behindviewset 15 0 -90
- spawnpawnbot
- OscCheckPawnBots
- OscPawnMove
destroyAllProjectiles destroyAllShockBalls (optional bool) destroyShockball (#, optional bool)
OSCStartOutput OSCStopOutput OSCStartInput OSCSendDeltas setOSC [string, int] setOSCHostname [string] setOSCPort [int] getOSC getOSCHostname getOSCPort
setLockHomingTargets
setSpeedSeekingShockBall setSpeedSeekingRocket setSpeedShockBall freezeShockBall
setGroundSpeed [float] getGroundSpeed setAirSpeed [float] default:440.0 getAirSpeed
initOSCFingerTouches [bool]
setSeekingShockBallTargetClassName [int] (1=ShockBalls, 2=UTVolumes) increaseSizeSeekingShockBall [float] decreaseSizeSeekingShockBall [float]
setSeekingTurnRate [float] ~ 1.0 -> 30.0
*setSpeedSeekingRocket [float] *setRadiusSeekingRocket *setRangeSeekingRocket *=doesn't work
Key Binds
moveallprojectiles 0 0 3000
setSpeedSeekingShockBall 0, 300, 700, 1000 [map to number-pad horizontals]
setProjectileTargets X Y Z
Adding key-bindings to UDKGame\Config\DefaultInput.ini:
;----------------------------------------------------------------------------------------- ; UDKOSC Bindings ;----------------------------------------------------------------------------------------- .Bindings=(Name="one",Command="OSCStartOutput",Control=False,Shift=False,Alt=True) .Bindings=(Name="two",Command="OSCStopOutput",Control=False,Shift=False,Alt=True) .Bindings=(Name="three",Command="OSCStartInput",Control=False,Shift=False,Alt=True) .Bindings=(Name="four",Command="OSCSendDeltas",Control=False,Shift=False,Alt=True) .Bindings=(Name="nine",Command="DestroyAllShockballs True",Control=True,Shift=False,Alt=True) .Bindings=(Name="nine",Command="DestroyAllShockballs",Control=False,Shift=False,Alt=True) .Bindings=(Name="zero",Command="DestroyAllProjectiles",Control=False,Shift=False,Alt=True) .Bindings=(Name="F",Command="FlyWalk",Control=True,Shift=False,Alt=False) .Bindings=(Name="seven",Command="freezeShockBall",Control=False,Shift=False,Alt=True) .Bindings=(Name="BackSlash",Command="setSeekingShockBallTargetClassName 2",Control=False,Shift=False,Alt=True) .Bindings=(Name="BackSlash",Command="setSeekingShockBallTargetClassName 1",Control=True,Shift=False,Alt=False) .Bindings=(Name="Equals",Command="increaseDrawScaleSeekingShockBall .01",Control=False,Shift=False,Alt=True) .Bindings=(Name="Underscore",Command="decreaseDrawScaleSeekingShockBall .01",Control=False,Shift=False,Alt=True)
OSC Output and Input
Pawn output:
/pawn 1 85.474144 -48.000000 -479.850006 0
<tag> <player-id> <X float> <Y Float> <Z float> <crouch int>
Player output:
/player "bob" 85.474144 -48.000000 -479.850006 [True]
<tag> <player-name> <X float > <Y float > <Z float> <crouch bool>
Projectile output:
/projectile "OSCProj_ShockBall_3" "shockball" 0 -1830.275513 -19.010612 1.015289 1 0 <projectile-name_instanceCount string> <projectile-type string> <instance-count int> <X float> <Y float> <Z float> <Bounce int> <Destroyed int> current projectile-names: OSCProj_LinkPlasma, OSCProj_SeekingRocket, OSCProj_ShockBall current projectile-types: "plasma", "seekingrocket" "shockball" "seekingshockball" /gameGravity <value float> /gameSpeed <value float>
iPad finger targeting for ShockBall homing OSC Input
/fingers <X1 float> <Y1 float> <Z1 float> <on1 float> ... <X5...
Static Mesh/Interp Actor output:
/mesh "OSCInterpActor_2" "mesh" "touch" 202.886230 -111.999939 -543.306702
Trigger output (name is set as "Tag" in editor
/trigger "Trigger"
OSC INPUT Coding Notes:
- OSCProj_ShockBall.uc executes code where incoming OSC messages are polled from the oscpack dll - OSCPawn.uc contains the calls for incoming OSC - struct OSCFingerController is a 20 value (float) struct that is populated from the dll for FingerTouch data - dll import calls for input made in OSCPawn: dllimport final function OSCFingerController getOSCFingerController(); dllimport final function initOSCReceiver(); dllimport final function OSCGameParams getOSCGameParams(); dllimport final function float getOSCGameSpeed(); dllimport final function float getOSCGameGravity(); - game speed is polled each tick from getOSCGameSpeed() - in osc.cpp of the oscpack .dll, gravity is set with: __declspec(dllexport)float getOSCGameGravity() { return OSCGameParamsStruct.gameGravity; } - value is set with: }else if( strcmp( m.AddressPattern(), "/gameGravity" ) == 0 ){ osc::ReceivedMessageArgumentStream args = m.ArgumentStream(); float a1; args >> a1 >> osc::EndMessage; OSCGameParamsStruct.gameGravity = a1; - struct is defined in osc.h struct OSCGameParams { float gameGravity; float gameSpeed; };
To Turn on OSC Input:
- Alt+3 - prints Testing messages and Hello World to Terminal for confirmation - initOSCFingerTouches [bool] will start osc data streaming in (port 7001) to IP from iPad controller
Maybe can repurpose getOSCGameGravity in OSCPawn.uc and dll:
- comment out gravity use in OSCPawn:
if( localOSCGameParamsStruct.gameGravity != lastGameGravity ) { setGrav(localOSCGameParamsStruct.gameGravity); }
Getting Started
Install UDK
- Install July version of the UDK from: July 2010 UDK Beta (777 MB .exe)
Install UDKOSC
- Follow the Subversion installation instructions below to install files to the correct locations.
There are only 4 locations where files need to be instlled:
- UDK-2010-07\Development\Src\UT3OSC: these are the custom OSC UnrealScript classes
- UDK-2010-07/Binaries/Win32/UserCode: the oscpack windows dll
- UDK-2010-07/UDKGame/Config: the custom default config files
- UDK-2010-07/UDKGame/Content/Maps: custom maps go here
Open UnrealFrontend to compile UT3OSC
- ?game=UT3OSC.UT3OSC should be pasted into the "Extra Options" field
- check the "show log" check box to see debug messages in the console
- in 2012-05 sometimes baking is required to run project (not sure why)
Launch UDKOSC
- DETAILS COMING SOON
Launch Map
- DETAILS COMING SOON
Supercollider
- Default input port 57120
SETUP OSC CLIENT FOR MONITORING
- DETAILS COMING SOON
Timeline
12/20/2012
Created installer package and uploaded to ccrma servers. Users can just install UDKOSC from the windows installer now, though the udkosc .dll must be manually added to the project's Binaries/Win32/UserCode/ directory.
12/20/2012
- updated master branch with V1 working versions of OSC input control for Pawns and functional OSC output for Pawns
- added branch 'dev' to github repo for dev changes, master will remain (relatively) stable and dev will be for ongoing work
- added documentation to 'docs'
11/24/2012
- Annoying Steam-based errors with spawned playercontrollers
- Trying to disable Steam server in DefaultGame.ini with:
[Engine.AccessControl] IPPolicies=ACCEPT;* bAuthenticateClients=False bAuthenticateServer=False bAuthenticateListenHost=False MaxAuthRetryCount=3 AuthRetryDelay=5
- DefaultEngineUDK.ini & DefaultEngine.ini:
[OnlineSubsystemSteamworks.OnlineSubsystemSteamworks] bEnableSteam=false
11/18/2012
- Added low-latency OSCPawnBot control with each PawnBot controller polling OSC structs for each pawn's own struct (stored in a std::map in the dll)
- Sorted out rotations and slewed rotation calls in osccontrol.rb under /Scripts/
- Finished all movement calls to OSCPawnBots.
- params for Unreal Frontend "Launch Options": -wxwindows -remotecontrol -log
10/21/2012
- Added OSCPawnBot as the primary 3rd party pawn actor. Still hooking up OSC.
"spawnPawnBot" will spawn OSCPawnBot with a unique ID and attach it to a OSCPawnController controller instance.
- Added OSCBot as standard AI unit. Still hooking up OSC. Can respond to MoveTo commands.
- Added rotation to OSCControl.rb and to OSCPawn; still wonky.
9/19/2012
Version 1.0 of OSCControl has been added to the project. Documentation on getting started with OSCControl and remote control of UDKOSC camera and actors can be found at:
https://github.com/robertkhamilton/udkosc/blob/master/Scripts/getting_started.txt
9/07/2012
Added a proper stop call in .dll as well as fixed jumping
9/04/2012
Now actor speed is reset after manual stop is called (before next player move X,Y,Z call)
9/03/2012
Added much needed "playermove stop 1" call as actors set upon a given vector would not ever stop. whoops.
Currently can only be manually called outside of a block.
Should reset actor speed when next playermove is called.
9/02/2012
Scripting Overview:
playermove - playermove calls require method, param, val, (slewtime in ms), userid e.g. "playermove x 100 1000 1"
- actor motion can be stopped by calling "playermove stop 1" at any time outside of a block = STOP calls don't reset the currentval of PLAYERSPEED
cameramove - cameramove calls don't require userid e.g. "cameramove pitch 360 10000"
cameramove pitch, yaw and roll values are all scaled to allow degree input (i.e. 0-360) through use of the UDK scaling factor of 182.044403
Console commands: useable console commands are defined in the script generator and can be called with the method call "console" e.g. - "console behindview"
OSC bundles
- OSC bundles are created by creating block commands, started with "[" and ended with "]" - all slew values for each block command are created and sorted before generation
wait
- the message "wait" will call a ms Sleep command in Ruby
Comments
- comments are any lines prefaced with a "#" followed by a space
EXAMPLE SCRIPT:
[ cameramove pitch -90 100 cameramove x -300 5000 cameramove z 300 500 ] console behindview # This is a test [ cameramove pitch 90 1000 cameramove yaw -130 1000 ] [ playermove speed 500 20 1 playermove x 5000 3000 1 ] playermove stop 1
8/25/2012
Created scripting language for creating UDKOSC movement gestures and Ruby OSC generating code.
Download from https://github.com/robertkhamilton/udkosc in the Scripts directory
Currently supports basic movement gestures:
PlayerMove (X,Y,Z, Jump, Speed, UserID, time slew) CameraMove (X,Y,Z,Speed, time slew) Wait Block Messages - i.e. gestures to be created simultaneously as OSC bundles
Time slews for gestures generate streams of OSC messages or bundles
07/12/2012
Camera Control by OSC enabled:
behindview OSCMove OSCSetFreeCamera OSCStartInput
Camera Pitch, Yaw, Roll + Relative (to Pawn.Location) and Absolute (to 0.0, 0.0, 0.0 World Coordinates) - OSCSetFreeCamera toggles between Relative and Absolute coordinates - OSCMove toggle between standard control and OSCControl (both for PlayerController/Pawn and for Camera)
Using "behindview" makes Pawn visible as 3rd-Party actor
05/19/2012
Bumping up to UDK-2012-03 version
Had to add line to DefaultEngine.ini
"+NonNativePackages="
08/29/2010
Added Scaling code for iPad control OSC values
setOSCFingerWorldMax x y z setOSCFingerWorldMin x y z setOSCFingerOffsets x y z initOSCFingerTouches True setOSCFingerSourceMin x y z setOSCFingerSourceMax x y z OSCSendDeltas
08/28/2010
added setAirSpeed,setSeekingTurnRate methods
modded setSeekingShockBallTargetClassName to differentiate between "energy_post" and "counterweight" named objects; bound each combo to numPad
setProjectileTargets will direct projectiles to a given X Y Z coordinate; can be bound
TOGGLEHUD DISABLEALLSCREENMESSAGES
08/27/2010
Added left-fire location tagging for projectiles
Started modding MiTo Supercollider code from 2009 for Tele-Harmonium structure
Got multi-player working via FrontEnd; exact copies of compiled code will connect without a hitch. Replication is still an issue, will reference basics from http://mutualdestruction.net/udk-networking-tutorial/
08/26/2010
http://forums.epicgames.com/showthread.php?t=742470
Networking error madness:
Downloading Entire UDKGame > Script directory
Receiving Core Receiving Engine Receiving 'Game Framework' Receiving 'UnrealEd' Receiving 'IPDrv' Receiving 'GfxUI' Receiving UDKBase Receiving 'UTGame'
8/22/2010
Added ability to toggle seekingShockBalls seekTarget between OSCProj_ShockBall and UTVolume objects.
Set ctrl-F to call WalkFly exec to toggle pawn state between Fly and Walk
8/19/2010
Added OSCProj_SeekingShockBall, and OSCWeap_SeekingShockRifle for glowing balls with seeking properties, taken from the OSCProj_SeekingRocket code
Added media/ScreenShots dir to svn for archiving ingame snaps
8/18/2010
Cleanup on UDK-side of multi-touch control; now shockballs don't explode on collision with other shockballs and when initOSCFingerTouches is TRUE, will seek out the next available finger touch location currently being received.
Created Max/MSP test patch for control testing.
8/17/2010
Added initial OSC Input to control seeking of ShockBalls to be used as controlled by 5 iPad finger touches.
/fingers X Y Z on/off (all floats, for fingers 1-5)
8/16/2010
Smoothed out homing functionality for SeekingRockets; now make nice smooth arcs.
8/15/2010
Added basic homing functionality for SeekingRockets to track ShockBalls. Added helper functions:
setLockHomingTargets setRadiusSeekingRocket setRangeSeekingRocket setSpeedSeekingRocket setSpeedShockBall
with LockHomingTargets, we can set if seeking projectiles will automatically search for the closest target (expensive) or stay locked to the initial target the first seek.
8/14/2010
Committed Full svn
post svn:
- added setGroundSpeed (float), and getGroundSpeed() exec functions to OSCPawn to set player speed.
8/13/2010
Added exec functions for setting OSC params from within game terminal: setOSC(ip, port) setOSCHostname(ip) and setOSCPort(port) which all save values to UDKOSC.ini after edit.
Added getOSCHostname, getOSCPort and getOSC methods to display current OSC settings to in-game user.
Initial homing rocket code started with limited results; rockets home in on ShockBalls but after tracking them successfully, don't update their direction to follow again.
8/12/2010
Successful network (LAN, local) testing with 3 connected clients Added OSCTrigger class to send message on Trigger event
8/11/2010
Added crouch tracking in OSCPawn output, and OSCStartInput, OSCStartOutput, OSCStopOutput, and OSCSendDeltas exec functions.
Working on extending "Use" function:
http://forums.epicgames.com/showthread.php?t=717602&highlight=PerformedUseAction
found in PlayerController.uc
/** * Entry point function for player interactions with the world, * re-directs to ServerUse. */ exec function Use() { if( Role < Role_Authority ) { PerformedUseAction(); } ServerUse(); }
/** * Player pressed UseKey */ unreliable server function ServerUse() { PerformedUseAction(); }
8/10/2010
added initOSCReceiver function to OSCPawn to initiate OSC input polling from the dll.
updated Max/MSP gui OSC sender applet for testing global gameGravity and gameSpeed params over OSC
8/09/2010
Mapped incoming OSC test floats to GameSpeed and Gravity successfully.
Can access WorldInfo and current Game vars and methods stored in ut3osc.uc:
UT3OSC(WorldInfo.Game).fingerTouchArray[0].X=val;
8/08/2010
Code re-written to access OSC params in OSCParams.uc class. Now Hostname and Port can be set through the DefaultOSC.ini
Updated code checked into SVN
8/03/2010
Successful test of OSC messages being sent into UDK via OSCPack dll listener, operating on its own thread.
Pawn motion:
http://www.etc.cmu.edu/projects/coyote210/Docs/undox/Engine.Pawn.html
MoveTo and MoveToward methods
void MoveTo(vector NewDestination, optional float) // Latent Movement. Note that MoveTo sets the actor's Destination, and MoveToward sets the actor's MoveTarget. Actor will rotate towards destination void MoveToward(Actor NewTarget, optional float)
UDKProjectile
/** Currently tracked target - if set, projectile will seek it */ var actor SeekTarget;
Projectile
Can target be changed just by setting Velocity (Speed * Direction vector)? /* Init() initialize velocity and rotation of projectile */ function Init( Vector Direction ) { SetRotation(Rotator(Direction)); Velocity = Speed * Direction; }
Actor (projectiles inherit from Actor)
// The actor's position and rotation. /** Actor's location; use Move or SetLocation to change. */ var(Movement) const vector Location; /** The actor's rotation; use SetRotation to change. */ var(Movement) const rotator Rotation;
Added "MoveAllProjectiles X Y Z" as exec function: instantly moves all projectiles to a specific location.
Working on
exec function setAllProjectileSpeed(int speed) { local UTProjectile pUT; ForEach AllActors(class'UTProjectile', pUT) { pUT.Speed = speed; } }
8/01/2010
Checked in modifications to July UDK to svn at ccrma. Note only modified files/custom files were checked in, including the source for the oscpack windows dll, and these should be checked out into a 2010-07 install of the UDK.
7/31/2010
OSCInterpActor class
- outputs position data on move, bump and damage as well - Kismet script tested successfully to spit out position data while object moves
7/27/2010
- Moved to July UDK
Current Feature List
- OSC dll in place - Tracking XYZ data in customized player controller sending OSC data - Bouncing Projectiles - Tracking projectile XYZ data sending OSC data - customized Actor class for OSC on bump and touch events (not tested yet)
6/13/2010
First Words: ?game=UT3OSC.UT3OSC needs to be passed in "Extra Options" in Unreal FrontEnd
OSC message is being sent from Terminal on typing "Test1"
- first impressions are that it's a bit slow... lag/latency maybe UnrealScript?
[COMMANDLET 'UDK.exe make -full' STARTED IN ] June 13, 12:23 AM Init: Version: 6522 Init: Epic Internal: 0 Init: Compiled (32-bit): Apr 9 2010 12:14:06 Init: Command line: -full -DEFENGINEINI=..\..\UDKGame\Config\DefaultEngineUDK.ini Init: Base directory: C:\UDK\UDK-2010-04\Binaries\Win32\ Init: Character set: Unicode Log: Executing Class UnrealEd.MakeCommandlet --------------------Core - Release-------------------- Analyzing... Scripts successfully compiled - saving package 'C:\UDK\UDK-2010-04\Binaries\Win32\..\..\UDKGame\Script\Core.u' --------------------Engine - Release-------------------- Analyzing... Scripts successfully compiled - saving package 'C:\UDK\UDK-2010-04\Binaries\Win32\..\..\UDKGame\Script\Engine.u' --------------------GameFramework - Release-------------------- Analyzing... Scripts successfully compiled - saving package 'C:\UDK\UDK-2010-04\Binaries\Win32\..\..\UDKGame\Script\GameFramework.u' --------------------UnrealEd - Release-------------------- Analyzing... Scripts successfully compiled - saving package 'C:\UDK\UDK-2010-04\Binaries\Win32\..\..\UDKGame\Script\UnrealEd.u' --------------------IpDrv - Release-------------------- Analyzing... Scripts successfully compiled - saving package 'C:\UDK\UDK-2010-04\Binaries\Win32\..\..\UDKGame\Script\IpDrv.u' --------------------OnlineSubsystemPC - Release-------------------- Analyzing... Scripts successfully compiled - saving package 'C:\UDK\UDK-2010-04\Binaries\Win32\..\..\UDKGame\Script\OnlineSubsystemPC.u' --------------------UDKBase - Release-------------------- Analyzing... Scripts successfully compiled - saving package 'C:\UDK\UDK-2010-04\Binaries\Win32\..\..\UDKGame\Script\UDKBase.u' --------------------UTEditor - Release-------------------- Analyzing... Scripts successfully compiled - saving package 'C:\UDK\UDK-2010-04\Binaries\Win32\..\..\UDKGame\Script\UTEditor.u' --------------------UTGame - Release-------------------- Analyzing... Scripts successfully compiled - saving package 'C:\UDK\UDK-2010-04\Binaries\Win32\..\..\UDKGame\Script\UTGame.u' --------------------UTGameContent - Release-------------------- Analyzing... Scripts successfully compiled - saving package 'C:\UDK\UDK-2010-04\Binaries\Win32\..\..\UDKGame\Script\UTGameContent.u' --------------------UnrealOsc - Release-------------------- Analyzing... Scripts successfully compiled - saving package 'C:\UDK\UDK-2010-04\Binaries\Win32\..\..\UDKGame\Script\UnrealOsc.u' Success - 0 error(s), 0 warning(s) Execution of commandlet took: 22.67 seconds [COMMANDLET 'UDK.exe make -full' SUCCEEDED] June 13, 12:23 AM
6/1/2010
basic testing of Windows Oscpack dll writes message successfully over OSC from test app
__declspec(dllexport) double returnDouble(double a); __declspec(dllexport) void sendOSCmessageTest();
random notes
Shortcuts
Link to Disable Windows key:
http://support.microsoft.com/?id=216893
Hide HUD and Weapon: togglescreenshotmode
http://udn.epicgames.com/Three/CharactersTechnicalGuide.html#Inventory and Weapons: WeaponFired [weapon] [bViaReplication] [hitLocation] http://www.moddb.com/games/unreal-tournament-3/tutorials/unreal-learning-1-my-first-unreal-tournament-3-mutator
default gravity (game specific) - set in defaultgame.ini Default value: -520.0
ProjectileList http://wiki.beyondunreal.com/UE3:WorldInfo_internal_variables_(UDK)
Moving to July UDK
Add UT3OSC references to UDKGame\Config\DefaultGame.ini
[Engine.GameInfo] DefaultGame=UT3OSC.UT3OSC DefaultServerGame=UT3OSC.UT3OSC PlayerControllerClassName=UT3OSC.OSCPlayerControllerDll DefaultGameType="UT3OSC.UT3OSC";
Add ModEditPackages line to section in UDKGame\Config\DefaultEngineUDK.ini
[UnrealEd.EditorEngine] +EditPackages=UTGame +EditPackages=UTGameContent +EditPackages=CastleGame ModEditPackages=UT3OSC
Exposed OSC Methods
Adding Hostname and Port param to structs to allow for multiple/dynamic OSC targets
sendOSCPlayerState(PlayerStateStruct)
- OSCPawn::Tick
- Hostname (string) - Port (int) - PlayerName (string) - Location X (float) - Location Y (float) - Location Z (float) - Crouch (bool)
sendOSCpointClick(PointClickStruct)
- Hostname (string) - Port (int) - TraceHit (string) - TraceHit_class (string) - TraceHit_class_outerName (string) - Location X (float) - Location Y (float) - Location Z (float) - HitInfo_material (string) - HitInfo_physmaterial (string) - HitInfo_hitcomponent (string)
DLL Binding
"A single UnrealScript class can bind to only a single DLL. The DLL to bind to is specified with the DLLBind directive, and the DLL name to bind to is specified in parentheses. Do not include a path or .DLL extension. DLLs can only be loaded from the Binaries\Win32\UserCode folder." - http://udn.epicgames.com/Three/DLLBind.html
Also TCP/IP Link:
http://forums.epicgames.com/showthread.php?t=740321
Network Latency overview from Valve
http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
http://blogs.valvesoftware.com/abrash/latency-the-sine-qua-non-of-ar-and-vr/
My Posts
http://forums.epicgames.com/showthread.php?p=27580921#post27580921
http://forums.epicgames.com/showthread.php?p=27580950#post27580950
http://forums.epicgames.com/showthread.php?t=742848
Scripting
http://okita.com/alex/?page_id=474
http://forums.epicgames.com/showthread.php?t=736141
http://forums.epicgames.com/forumdisplay.php?f=367&order=desc&page=19
Trace location distance (Pawn to surface/object)
http://forums.epicgames.com/threads/893500-Trace-length
Graphic Settings:
http://forums.epicgames.com/showthread.php?t=721052&highlight=Video+settings+menu
UDK dev environment
http://udn.epicgames.com/Three/ExecFunctions.html#Debugging
http://forecourse.com/unreal-tutorials/
http://forecourse.com/unreal-tutorials/#UnrealScript%21
http://wiki.pixelminegames.com/index.php?title=Tools:nFringe
http://forums.epicgames.com/showthread.php?t=722792
http://forums.beyondunreal.com/showthread.php?p=2405761
SKELETON/BONES w/Unrealscript (for Kinect):
http://udn.epicgames.com/Three/UsingSkeletalControllers.html
BOTS/AI:
http://www.moug-portfolio.info/udk-ai-pawn-movement/
VIDEO CAPTURE:
http://udn.epicgames.com/Three/CapturingCinematicsAndGameplay.html
SPAWNING: http://forums.epicgames.com/threads/884933-Placing-Static-Mesh-Actor-into-map-via-UnrealScript
REPLICATION:
http://forums.epicgames.com/showthread.php?t=743111&highlight=class+member+function
http://forums.epicgames.com/showthread.php?t=741953&highlight=replication
http://udn.epicgames.com/Three/GameStateReplication.html
http://udn.epicgames.com/Three/NetworkingOverview.html#Projectiles
Overview:
http://www.theballthegame.com/tutorialudk.htm
http://www.hourences.com/book/tutorialsindex.htm
Adding Classes to World Editor:
http://forums.epicgames.com/showthread.php?t=715530
Windows Multithreading c++:
http://www.cppgameprogramming.com/cgi/nav.cgi?page=multithreading
http://www.devarticles.com/c/a/Cplusplus/Multithreading-in-C/
Weapon Modding:
http://forums.epicgames.com/showthread.php?t=716665
http://udn.epicgames.com/Three/WeaponsTechnicalGuide.html
http://forums.epicgames.com/showthread.php?t=708422
Unreal Script calling Windows dll:
http://udn.epicgames.com/Three/DLLBind.html
OSC dlls:
http://www.frieder-weiss.de/OSC/OSC-DLL.htm
http://www.bespokesoftware.org/wordpress/?page_id=69
http://www.3dvia.com/forums/topic/opensoundcontrol-osc-bb-s-released-under-gpl/page/3
Windows OSC utilities:
http://www.frieder-weiss.de/OSC/
Creating Windows C++ dlls:
http://msdn.microsoft.com/en-us/library/1ez7dh12.aspx
http://www.tutorialspoint.com/dll/dll_writing.htm
UDK Tutorials (video):
http://www.3dbuzz.com/vbforum/sv_videonav.php?fid=292838127fecccd8b151c72003546386
http://utmapping.wikidot.com/how-to-build-a-simple-cube-map
Basic Level Building Tutorials:
Windows VS2010 stuff:
http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/ea11890e-247b-4640-82a9-d6f657c36afa
http://social.msdn.microsoft.com/forums/en-US/vclanguage/thread/d8c0ba83-a619-443f-b194-20a1fbbf7bd7
http://msdn.microsoft.com/en-us/library/28d6s79h(VS.80).aspx
Linker Settings for VS2010 (necessary to compile):
http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/ea11890e-247b-4640-82a9-d6f657c36afa
http://www.gamedev.net/community/forums/topic.asp?topic_id=185053
(right-click project > Properties > Linker > Input > add to "Additional Dependencies" Ws2_32.lib;WINMM.lib; )
Homing Missles:
http://board.flashkit.com/board/archive/index.php/t-175556.html
Packaging:
http://forums.epicgames.com/showthread.php?t=734728&highlight=PACKAGE+GAME&page=2
Overall Process:
http://developer.download.nvidia.com/udk/Whizzle_Creation_Document_1_2.pdf
Keyboard input overview:
class reference:
http://forums.epicgames.com/showthread.php?t=739124&highlight=actor+tag+instance
general location:
vectors:
http://chimeric.beyondunreal.com/tutorials/vectors.php
http://chortle.ccsu.edu/VectorLessons/vectorIndex.html#01
http://wiki.ioquake3.org/Vectors
http://wiki.beyondunreal.com/Legacy:UnrealScript_Vector_Maths
http://wiki.beyondunreal.com/Legacy:Useful_Maths_Functions
ShuttlePro Drivers:
http://retail.contourdesign.com/?/products/23
MOUSE LOOK (for smoothing):
http://utforums.epicgames.com/showthread.php?t=743907
ROTATION IN WORLD SPACE:
http://forums.epicgames.com/archive/index.php/t-763361.html
http://forums.epicgames.com/archive/index.php/t-929612.html
http://allarsblog.com/blog/2010/03/31/creating-a-third-person-camera/
Links
UDKOSC on github: https://github.com/robertkhamilton/udkosc
Chris Platz's website: http://www.chrisplatz.com
Gram Gatheral interview about his work with UDKOSC: http://designingsound.org/2011/06/audio-implementation-greats-11/
Grahm Gatheral's website: http://www.gatheral.co.uk/
OSCControl Gestures
# Single-pawn circle playermove teleport 0 1000 1 0 playermove x 1 0 playermove yaw 0 0 0 playermove speed 400 0 playermove yaw 360 2000 0 playermove stop 0
# Single-pawn square playermove teleport 0 1000 1 0 playermove x 1 0 playermove yaw 0 0 playermove speed 400 0 wait 1000 playermove yaw 90 0 wait 1000 playermove yaw 90 0 wait 1000 playermove yaw 90 0 wait 1000 playermove yaw 90 0 playermove stop 0
#37 pawn "NIME" playermove teleport 2000 600 1000 36 playermove teleport 2000 700 1000 35 playermove teleport 1850 600 1000 34 playermove teleport 1850 700 1000 33 playermove teleport 1700 600 1000 32 playermove teleport 1700 700 1000 31 playermove teleport 1700 800 1000 30 playermove teleport 1800 800 1000 29 playermove teleport 1900 800 1000 28 playermove teleport 2000 800 1000 27 playermove teleport 1700 1000 1000 26 playermove teleport 1800 1000 1000 25 playermove teleport 1900 1000 1000 24 playermove teleport 2000 1000 1000 23 playermove teleport 1750 1050 1000 22 playermove teleport 1800 1100 1000 21 playermove teleport 1850 1150 2000 20 playermove teleport 1800 1200 1000 19 playermove teleport 1750 1250 1000 18 playermove teleport 1700 1300 1000 17 playermove teleport 1800 1300 1000 16 playermove teleport 1900 1300 1000 15 playermove teleport 2000 1300 1000 14 playermove teleport 1700 1500 1000 13 playermove teleport 1800 1500 1000 12 playermove teleport 1900 1500 1000 11 playermove teleport 2000 1500 1000 10 playermove teleport 1700 1700 1000 9 playermove teleport 1800 1700 1000 8 playermove teleport 1900 1700 1000 7 playermove teleport 2000 1700 1000 6 playermove teleport 1900 1800 1000 5 playermove teleport 1800 1900 1000 4 playermove teleport 1700 2000 1000 3 playermove teleport 1800 2000 1000 2 playermove teleport 1900 2000 1000 1 playermove teleport 2000 2000 1000 0
Gesture Notes
- "playermove teleport" won't succeed if Z value is "0"; needs to be at least 1 to avoid collision with floor (in simple demo room map).
- Thread on programmatically moving limbs: http://forums.epicgames.com/threads/734592-Making-a-Skeletal-Control-to-move-an-arm
- Skeletal Mesh and sockets: http://udn.epicgames.com/Three/SkeletalMeshSockets.html#Using sockets
- Windows multitouch example: http://msdn.microsoft.com/en-us/windows7trainingcourse_win7multitouchmfc_topic2.aspx
- Windows multitouch home: http://msdn.microsoft.com/en-us/gg464993
- Sample Code from Intel: http://software.intel.com/en-us/articles/touch-samples
- UDK Gesture tracking example: http://forums.epicgames.com/threads/949758-Source-Guide-Gesture-Recognition
http://research.microsoft.com/en-us/um/people/hoppe/proj/dance/
OSC Notes
- /oscplayer.rb localhost 57120 false < ./yml/pawn_0_spiral.yml
- ./sendOSC -h 127.0.0.1 57120 '/udkosc/script/playermove,.1,.2,.3,.4'
Oculus Rift UDK Integration Notes