게임 개발에 관한 책을 읽고 있는데 루아에서 게임 스크립트를 작성하는 방법을 보여줍니다. 그들은 Lua를 프로그래밍하고 C ++에서 사용하지만 C #에서 Lua를 사용하는 라이브러리 또는 API가 있는지 궁금합니다. 특히 XNA에서 PC 및 XBox 360 용 게임을 개발 합니까?
게임 개발에 관한 책을 읽고 있는데 루아에서 게임 스크립트를 작성하는 방법을 보여줍니다. 그들은 Lua를 프로그래밍하고 C ++에서 사용하지만 C #에서 Lua를 사용하는 라이브러리 또는 API가 있는지 궁금합니다. 특히 XNA에서 PC 및 XBox 360 용 게임을 개발 합니까?
답변:
이것은 내가 당신을 지적했을 것이지만 (http://www.xnua.com/xna_lua_xnua), 오랫동안 업데이트되지 않았습니다.
C #은 훌륭한 언어이며 어떤 의미에서는 C # 게임 내에서 스크립팅 언어로 사용될 수 있습니다. Nick Gravelyn은 타일 엔진 (http://blog.nickgravelyn.com/downloads/#tileengine)에 대한 유용한 자습서를 만들었으며 사용자 지정 스크립팅 엔진을 사용하여 대화 상자를 시작했습니다. 또한 "yield"키워드에 대해 배울 때 기본적인 예를 가지고 있습니다. http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/
C #에서 스크립팅을 찾고 있다면 IronPython을 살펴보십시오 . C # 용 Python API 일뿐 만 아니라 실제로 C #과 동일한 CLR 어셈블리 (동일한 성능으로)로 컴파일되지만 스크립팅 언어로 인터페이스 할 수있는 완전히 별도의 Python 구현입니다. C #에 대한 Lua 래퍼는 Marshalling의 오버 헤드로 인해 훨씬 느려집니다.
Sean이 말했듯이 IronPython은 가치가 있습니다. IronPython은 실제로 DLR (Dynamic Language Runtime)을 대상으로하는 .NET에 대한 몇 가지 동적 언어 구현 중 하나입니다. 이 (같은 DLR에 루아를 구현하기위한 적어도 하나 개의 오픈 소스 프로젝트 인 이 하나 ), 그러나 확실 완료 근처의 모든 구현이 있는지 모르겠어요. Lua에 대해 잘 구현 된 DLR 바인딩 세트는 IronPython 및 IronRuby와 동등한 성능을 제공해야하며 Lua 래퍼보다 훨씬 빠릅니다. 비교를 위해 IronPython은 일반적으로 CPython보다 성능이 우수합니다 (때로는 크게 향상됨).
참고 : 로 ElementCy 아래 상태는 DLR 언어는 일반적으로 그러나, X 박스 360에서 지원되지 않는 것입니다 DLR에있는 "해석 모드". 확실하게 말할 수는 없지만, Xbox 360에서 IronPython (또는 다른 DLR 언어 구현)을 해석 모드로 실행하면 성능이 확실히 저하 될 수 있습니다. DLR 팀의 누군가에게 이것이 가능한지 알고 있는지 물어볼 가치가 있습니다. 그렇지 않은 경우 Xbox 360 은 다음 Silverlight 지원의 일부로 Reflection.Emit 지원을 받아야합니다 . 이런 일이 발생하면 Xbox 360에서 DLR을 설치하고 실행해도 문제가되지 않습니다.
내가 줄 수있는 가장 좋은 해결책은 C #으로 스크립트하는 것입니다. 창을 대상으로 할 때 런타임에 컴파일하고 xbox에 대해 미리 컴파일 할 수 있습니다. (dll로)
이것이 가장 쉬운 해결책이 될 것입니다. VB.NET 또는 .NET 언어로도 할 수 있습니다. (스크립팅에 대해서는 확실하지 않습니다.) 기본적으로 스크립트를 자체 dll에 저장하려고합니다. Windows에서 런타임에 컴파일하도록 할 수 있습니다. (정말로 xbox 360에서이 작업을 수행하고 싶습니까? 적어도 거기에서는 게임을 업데이트 할 수 없습니다.)
나는 당신의 좌절감을 이해할 수 있습니다. Lua도 사용하고 싶었습니다.
요약하자면 : 1) Windows에서 런타임시 빌드 2) Xbox 360 용으로 미리 빌드
그것이 내가 추천하는 것입니다.
Lua 인터프리터는 AFAIK로 관리되지 않으므로 XNA를 사용하여 Xbox에서 작동하지 않습니다.
DLR에 의존하지 않고 Xbox에서 작동 하는 Jint라는 Javascript 인터프리터 를 사용할 수 있습니다 ( http://jint.codeplex.com/ )
기술적으로 귀하의 질문에 대답하지는 않지만 (xbox에서는 작동하지 않음) LuaInterface를 사용하면 Lua와 C #의 통합이 비교적 수월 합니다.