Compiling Ruby classes to assemblies for use with Unity3D (which uses Mono 1.2.4)

Hi,

I want to be able to use Ruby code in the Unity3D game engine, which
embeds GNU Mono 1.2.4 to provide support for various languages (a
ECMAScript-based language, Boo, and C# - they don’t upgrade the
ancient Mono version to keep compatibility with games designed for
older versions of Unity3D).

Forgive my use of terminology, I’m new to this .NET/Mono malarky :slight_smile:

I was told that I can product .NET 2 assemblies, plug them into
Unity3D, and the classes will be accessible from the other languages.

Will I be able to use IronRuby to create .NET 2 assemblies in this
manner?

Sorry for asking here, but the Unity3D people don’t seem interested in
Ruby as much, and I just can’t live without coding in BDD style in a
robust environment.

Thanks. Regards,
Asfand

You can’t compile to an assembly with IronRuby at this point. But you
can
reference the ironruby interpreter library and host the ruby engine in
your
application to have it execute ruby files.

http://ironruby.net/Documentation/.NET/Hosting

But I don’t think that will completely solve your issue though because
to
interop with CLR classes their definitions must exist in the CLR so you
would probably have to build some bridges.

the most straightforward way to do that is by defining CLR interfaces
and
adding them to IronRuby classes.

public interface IRobot{
DeathAndDestructionMode ForgetAboutThe3Laws();
}

in Ruby:

require ‘/path/to/interfaces/assembly’

class EvilBot
include IRobot

def forget_about_the_3_laws
DeathAndDestructionMode.world_domination
end
end

a consuming C# class could then get an object you created with your
hosting
code and still talk to it because of the CLR interface.

If you’re after testing then you can use ruby tools like bacon/rspec to
test
your C# code. The only thing that will be weird if you’re going to use
it
this way is that ruby mockers have no clue what to do with CLR objects.
I
created a project that:

a) accepts patches and contributions
b) gives you mocking that knows about the CLR


Met vriendelijke groeten - Best regards - Salutations
Ivan Porto C.
Blog: http://flanders.co.nz
Google Wave: [email protected]
Twitter: http://twitter.com/casualjim
Author of IronRuby in Action (http://manning.com/carrero)

Hey,

On 12/22/09, Asfand Yar Q. [email protected] wrote:

I want to be able to use Ruby code in the Unity3D game engine, which
embeds GNU Mono 1.2.4 to provide support for various languages (a
ECMAScript-based language, Boo, and C# - they don’t upgrade the
ancient Mono version to keep compatibility with games designed for
older versions of Unity3D).

Mono 1.2.4 is most probably too old to support IronRuby and the DLR.

2009/12/22 Jb Evain [email protected]:

Hey,

On 12/22/09, Asfand Yar Q. [email protected] wrote:

I want to be able to use Ruby code in the Unity3D game engine, which
embeds GNU Mono 1.2.4 to provide support for various languages (a
ECMAScript-based language, Boo, and C# - they don’t upgrade the
ancient Mono version to keep compatibility with games designed for
older versions of Unity3D).

Mono 1.2.4 is most probably too old to support IronRuby and the DLR.

Thanks for that, I can now stop chasing a pointless dream :slight_smile:

Asfand yar Qazi wrote in post #875250:

2009/12/22 Jb Evain [email protected]:

Hey,

On 12/22/09, Asfand Yar Q. [email protected] wrote:

I want to be able to use Ruby code in the Unity3D game engine, which
embeds GNU Mono 1.2.4 to provide support for various languages (a
ECMAScript-based language, Boo, and C# - they don’t upgrade the
ancient Mono version to keep compatibility with games designed for
older versions of Unity3D).

Mono 1.2.4 is most probably too old to support IronRuby and the DLR.

Thanks for that, I can now stop chasing a pointless dream :slight_smile:

Well, a long time has passed since I asked the previous question.
Unity3D now uses GNU Mono 2.6, and I hope IronRuby has made progress
too.

Is it now possible to compile Ruby files into assemblies to use with
Unity3D’s Mono 2.6?

Thank you for your help. Regards,
Asfand

We are already targeting Mono 2.10. You can try building with msbuild on
Windows using /p:Configuration=v2Debug and using the resulting binaries
on Mono 2.6.
Mono fixed a bunch of bugs since 2.6 though so it might not quite work.

Tomas