UDK 3 and Rigid Body Physics Headache

I have been experimenting with UDK for the first time, and wanted to share my experiences with basic physics.


Problem: Add a static mesh Actor, start the level, and it's just floating mid air until you shoot it.
Solution: Convert to KActor to get the 'Wake On Level Start' property, or roll your own UnrealScript to call .WakeRigidBody();


Problem: Start the level, watch the KActor placed in the sky fall down through the floor and disappear.
Solution: The default map 'Kill Z' is stupidly set exactly level with the floor. The falling velocity makes the KActor briefly go lower than the floor, causing it it to be destroyed before the collision physics take effect. View the World Properties and set the Kill Zone to something like -9999.


Problem: You want to prevent players from being able wake scripted physics events or use Kismet to wake KActor physics.
Solution: Set wake on start, but set Physics=PHYS_None then use UnrealScript or Kismet to set Physics=PHYS_RigidBody on demand.


Problem: Create a StaticMeshComponent class that extends Actor, you cannot walk through it, but it will Move() through you.
Solution: Along with bCollideActors=true and bBlockActors=true, you must also have CollisionComponent=YourMeshName for it to collide properly.

Dyn SLA Update Alternative

Long time ago I got a DynDns.org address, as it was the only thing my Linksys router supported. They then stopped the free service for new users, but allowed existing users to remain free. To their credit they have kept their promise for a number of years, but this week I got an e-mail informing me I must log into their website every 30 days to keep the domain.


This is obviously just a polite way to get rid of free users, as I doubt anyone will want to log in that often. So I made the switch over to freedns.afraid.org (http://freedns.afraid.org) who I have been using as a free secondary DNS on my websites. At home my dynamic address is updated by my DD-WRT based router, and for my parents home, where the router is more basic, I use a free client that sits in the tray at logon (http://freedns.afraid.org/scripts/freedns.clients.php).

Experiencing the Oculus Rift

When I saw the Oculus Rift on KickStarter, my gut instantly told me to back it, and so was lucky enough to be around order 4700. I’ve had my Rift for a couple of weeks, it gives a great sense of scale, and my first reaction was wow! Shortly followed by, oh wow I feel incredibly sea sick…


The head tracking is very responsive, but currently not being able to lean does confuse your brain, so I found keeping a strict upright posture helps reduce the motion sickness. The biggest problem for me is the resolution, things at close range look good, but in the distance it’s like a scaled up NES game. The result is less detailed worlds work better, lots of lush foliage like in Far Cry and any on screen text ends up a pixelated mess. While I knew this when backing, my concern is the consumer version is going to need a truly amazing DPI screen for regular usage.


At the moment I am using my spare time to look at various foot control methods for the Rift, as standing in an immersive world but navigating with your hands just… feels wrong. Ultimately I have high hopes, the Rift does show that VR headsets can take gaming to the next level, and at the very least I hope developers pay more attention to 3D support so the alternatives like NVidia 3D Vision, will also work better 'out the box' for more games.

32Feet Under

I have been using InTheHand 32Feet.NET Bluetooth Library (http://32feet.codeplex.com) and wanted to post a solution that took me far too long to find.


To get callback working for pairing authentication, use NULL for a pin when calling PairRequest(Address, Pin);



new BluetoothWin32Authentication(Win32AuthCallbackHandler);
var btDiscoveredList = btClient.DiscoverDevices(255, false, false, true);
foreach (var btItem in btDiscoveredList)
{
BluetoothSecurity.PairRequest(btItem.DeviceAddress, null);
btItem.SetServiceState(BluetoothService.HumanInterfaceDevice, true);
}

FOOTER TO GO HERE!