PC 및 XBox 360 개발 용 C #에서 작동하는 Lua API가 있습니까? [닫은]


18

게임 개발에 관한 책을 읽고 있는데 루아에서 게임 스크립트를 작성하는 방법을 보여줍니다. 그들은 Lua를 프로그래밍하고 C ++에서 사용하지만 C #에서 Lua를 사용하는 라이브러리 또는 API가 있는지 궁금합니다. 특히 XNA에서 PC XBox 360 용 게임을 개발 합니까?


5
일종의 작은 이쑤시개이지만, 그것은 LUA가 아닌 루아 (이름)입니다 (약어, 그 또는 당신이 외치고 있습니다)
RCIX

Lua "About"페이지에서 : "Lua는 C 및 C ++뿐만 아니라 ... C # ...로 작성된 프로그램을 확장하는 데 사용되었습니다." "lua in C #"에 대한 Google의 첫 번째 결과는 GameDev.net ( gamedev.net/reference/articles/article2275.asp ) 의 흥미로운 기사로 Using Lua with C #입니다.
reverbb

많은 .net 개발자는 스크립팅에 ironpython 또는 ironruby를 사용합니다.
찢어

답변:


6

이것은 내가 당신을 지적했을 것이지만 (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/


3
여기에 좋은 점이 있습니다. 한 가지 생각할 점은, 게임이 C #으로 작성 될 때 왜 스크립트 언어를 원하십니까? C ++ 엔진은 일반적으로 컴파일 시간이 오래 걸리므로 스크립팅 언어를 사용하여 많은 민첩성을 얻을 수 있습니다. 이와 관련하여 C #은 매우 빠릅니다. 어떤 이유로 런타임에 스크립트를 컴파일하려는 경우 항상 CodeDom (또는 다른 코드 생성 방법)을 사용하여로드시 CS 파일을 컴파일 할 수 있지만 PC에서만 작동합니다. 책 "Game Engine Toolset Development"
Cubed2D에 이에 관한 장이 있습니다.

^^ 게임 엔진 툴셋 개발 은 좋은 책입니다 :). 조금 구식이지만 개념은 여전히 ​​튼튼합니다. .NET 스크립팅 언어 바인딩의 문제점은 Xbox 360에서 실행하려면 거의 해석해야한다는 것입니다. System.Reflection.Emit이 없으면 코드 생성 방식으로 많은 것을 할 수 없습니다. 가까운 미래에 이러한 기능이 Xbox 360에 제공 될 것이라는 인상을 받았지만 아래 답변에 대한 의견 토론을 바탕으로 한 경우에는 그렇지 않습니다. 따라서 Xbox 360의 스크립트 성능은 그리 좋지 않을 것입니다. (.
Mike Strobel

@ Cubed2D : Lua는 스크립팅 게임에 대한 일종의 업계 표준이며 비전문가 프로그래머도 이해하기 쉽습니다.
RCIX

@ 오른쪽으로, 360에서 코드를 컴파일하거나 생성 할 수 있습니다. 이것을 구현하려는 경우 360에서 C # 스크립트를 지원하지 않고 PC 툴셋 기능으로 사용하십시오. 360 빌드에 scripts 폴더를 포함하도록 vs 프로젝트를 조정하고 pc에서는 무시하십시오. @RCIX는 다른 모든 사람들이 그렇게하기 때문에 그렇게해야한다는 의미는 아닙니다. Xna를 사용하려면 가치보다 문제가 더 많습니다. lua를 구현하려고 시도하는 .net 세계의 비 프로그래머에게 조정 가능한 매개 변수를 노출시키는 더 좋은 방법이 있습니다 (프로 프로그래머가 아닌 의견으로 얻는 것)
Cubed2D

@ Cubed2D : 좋은 지적이지만 실제로 대상 플랫폼에 따라 다릅니다. PC 용으로 작성하는 경우 LuaInterface 및 기본 lua dll을 사용할 수 있으며 구현을 작성할 필요가 없습니다. 게다가 게임 개발 세계에서 다음과 같은 특징이 있기 때문에 자연스럽게 해당 환경에 적합한 기능을 개발했습니다. 또한, 나는 Lua를 통해 프로그래밍을 시작했으며 많은 사람들이 그랬기 때문에 사람들이 왜 그것을 사용하고 싶어하는지 이해할 수 있습니다.
RCIX

2

C #에서 스크립팅을 찾고 있다면 IronPython을 살펴보십시오 . C # 용 Python API 일뿐 만 아니라 실제로 C #과 동일한 CLR 어셈블리 (동일한 성능으로)로 컴파일되지만 스크립팅 언어로 인터페이스 할 수있는 완전히 별도의 Python 구현입니다. C #에 대한 Lua 래퍼는 Marshalling의 오버 헤드로 인해 훨씬 ​​느려집니다.


2

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을 설치하고 실행해도 문제가되지 않습니다.


4
IronPython의 문제 만 xbox360에서 실행되지 않습니다. PC에만 사용하는 것이 좋습니다. IronPyton은 System.Reflection.Emit을 많이 사용하며 Xbox의 .net Framework에서는 사용할 수 없습니다.
ElementCy

아주 좋은 지적입니다. 업데이트되었습니다.
Mike Strobel

2
winPhone에 xna와 silverlight가 모두 있고 해당 네임 스페이스를 지원하지 않으므로 xbox에서 Reflection을 곧받을 수 있습니다.
Cubed2D

1
당신이 옳을 수 있습니다. WP7은 실제로 Silverlight를 실행하지 않지만 .NET 대신 .NET CF를 기반으로하는 "Silverlight Mobile Compact Framework"입니다. Xbox 360도 전체 .NET Framework 대신 .NET CF를 실행하므로 WP7과 유사한 구현으로 끝날 것입니다. 오 잘
Mike Strobel

2

내가 줄 수있는 가장 좋은 해결책은 C #으로 스크립트하는 것입니다. 창을 대상으로 할 때 런타임에 컴파일하고 xbox에 대해 미리 컴파일 할 수 있습니다. (dll로)

이것이 가장 쉬운 해결책이 될 것입니다. VB.NET 또는 .NET 언어로도 할 수 있습니다. (스크립팅에 대해서는 확실하지 않습니다.) 기본적으로 스크립트를 자체 dll에 저장하려고합니다. Windows에서 런타임에 컴파일하도록 할 수 있습니다. (정말로 xbox 360에서이 작업을 수행하고 싶습니까? 적어도 거기에서는 게임을 업데이트 할 수 없습니다.)

나는 당신의 좌절감을 이해할 수 있습니다. Lua도 사용하고 싶었습니다.

요약하자면 : 1) Windows에서 런타임시 빌드 2) Xbox 360 용으로 미리 빌드

그것이 내가 추천하는 것입니다.


1
  1. Lua 인터프리터는 AFAIK로 관리되지 않으므로 XNA를 사용하여 Xbox에서 작동하지 않습니다.

  2. DLR에 의존하지 않고 Xbox에서 작동 하는 Jint라는 Javascript 인터프리터 를 사용할 수 있습니다 ( http://jint.codeplex.com/ )


여기에 Lua <-> C #가있는 몇 개의 링크가 있기 때문에 첫 번째 요점이 사실이 아니라고 말했을 것입니다.
공산주의 오리

Xbox에서만 관리 코드를 실행할 수 있습니다. Lua <-> C # 브리지는 관리 코드에서 Lua를 호출 할 수있는 관리되지 않는 코드입니다. MS가 XNA 또는 Xbox 360 OS에 포함 할 때까지는 실행할 수 없습니다.

0

기술적으로 귀하의 질문에 대답하지는 않지만 (xbox에서는 작동하지 않음) LuaInterface를 사용하면 Lua와 C #의 통합이 비교적 수월 합니다.


0

이 질문을 업데이트하기 위해 마지막 날에 광범위한 검색을 수행했으며 UniLua (유일하고 순수한 C # 구현과 함께 사용)를 사용하는 것이 Xbox에서 Lua를 얻는 데 가장 효과적이고 효과적인 옵션이라는 것을 알았습니다. 나는 그것을 없애고 모든 Unity 자료를 꺼내었고 훌륭하게 작동했습니다.

또한 LuaState에 대한 [] 연산자를 오버로드하여 LuaInterface에있는 일부 기능을 추가했습니다.

CFWLua

이것이 도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.