Tuesday, December 24, 2013

English subtitles in English soundtrack for foreign dialogue using Handbrake

I have backed up most of my video collection to a central server in my house, and I usually use AnyDVD HD and CloneDVDMobile together to do my rips; however, CloneDVDMobile has very limited support for subtitles (which I only noticed after going through dozens of my DVDs and doesn't support BluRay at all.

To get around these two issues I use Handbrake.  Using Handbrake to rip from BluRay is another topic; however, using it to effectively pull subtitles that are supposed to be shown in the English only soundtrack can be a pain, so since I've just re-figured this out again for probably the 3rd time - I'm posting it here so I can find it myself later...

Under subtitles, choose to Add and usually select the first English audio track (you may have to try others), then check 'forced only' and 'burn in' and usually you'll get the results you would get from simply playing the movie in your bluray/dvd player.

Tuesday, December 10, 2013

Unity3D 2D UI Click-Through Issues

I have message box and dialog box classes for use in Unity3D that need to act 'modally' (but not truly modal) at times, and one of the problems I've had was preventing the mouse-clicks/touches from hitting controls under the controls in the message/dialog boxes.

You'd think that the Unity3D system would already take care of this, but apparently there is some behind the scenes issue that is non-trivial to resolve (otherwise the Unity3D devs would have knocked this out a looooong time ago.)

Anyhow, I found a simple solution today that works for me (until I find it fails on iOS - fingers crossed that it doesn't!)

When my OnGUI call gets to my message/dialog box, the message/dialog box simple creates TWO full screen transparent GUI.Window objects.  The first one calls an empty method, the second one calls the method that draws the controls of the message/dialog box.

I'd tried this previously, but only created one GUI.Window - hoping (vainly) that having the window under the message/dialog box would prevent clicks from making it through.  Oddly enough, it sort of worked, it prevented clicks that were on the message/dialog box controls from going through, but you could still click anywhere on the rest of the screen and cause havoc...

Anywho - I'll have to test have badly this affects performance (it shouldn't really as the both windows entire areas have an alpha of 0.0.)

Monday, December 9, 2013

Sharing C# Source Code With A Unity3D Project

I ran into some issues recently trying to share some common networking and data classes between a client application, a middleware ASP.NET server, and a configuration/server management tool.  All three of them needed to be able to serialize/de-serialize the same XML data; however, Unity3D does not currently support (natively) the ability to reference source code files outside of its project directory structure.

The easy solution to this on Windows is to create a symbolic link, and it works nicely.

I'll be revisiting this problem when I go to build on OSX (I presume that I'll be messing with my samba conf) and there are ways you can trick your source control system into accomplishing this (but it's really hacky) - so this isn't a panacea for the issue.

Hopefully the Unity team will introduce its own linking system that handles this (if Mono doesn't already have it...)

Worst case I'll be writing some file synchronization scripts that trigger the Unity editor to copy from the common direct (which is problematic if I make changes in Unity - but hopefully I can avoid that.)

Sigh...

Wednesday, December 4, 2013

Recently converted an ASP.NET Web Site project to a Web Application project...

...because I really need to use shared/common sources for 3 inter-related projects and you need a Web Application to do it (because Web Site projects do not let you link to source files, just copy.)

Anywho - I converted, built, tested, deployed, crashed.  Turned on detailed errors, zilch.  Enabled .NET error page information.  Bingo, "Default.aspx.cs could not be found."  What?

I FTP in, look at the directory structure and see that the bin folder does contain the DLL it should.  Spend a half hour wondering what exotic setting I'd forgotten to configure.  Cursed Microsoft for a little bit.

Suddenly I remembered something rather important.  When you're using a pre-compiled version of your project (as a Web Application generally is), you don't use the CodeFile attribute in your Default.aspx html code.  You use CodeBehind.

CodeFile instructs the webserver serving the page to use the JIT compiler.  CodeBehind instructs the compiler on your dev box where to find the class it needs to shove into the DLL.

So, yet again, it was all my #F$()ing fault.  Sigh...