Esiste un'API Lua che funziona con C # per lo sviluppo di PC e XBox 360? [chiuso]


18

Sto leggendo un libro sullo sviluppo di giochi in cui ti mostrano come creare script per il tuo gioco a Lua. Programmano Lua e lo usano da C ++, ma mi chiedevo se ci fosse una libreria o API per usare Lua da C #: in particolare da XNA per sviluppare giochi per PC e XBox 360?


5
Una specie di piccolo nitpick, ma è Lua (un nome), non LUA (un acronimo, che o stai urlando)
RCIX

Dalla pagina "Informazioni" di Lua: "Lua è stato utilizzato per estendere i programmi scritti non solo in C e C ++, ma anche in ... C # ...". Il primo risultato di Google per "lua in C #" è stato un interessante articolo di GameDev.net ( gamedev.net/reference/articles/article2275.asp ) intitolato Using Lua with C #.
riverbero il

Molti sviluppatori .net usano ironpython o ironruby per gli script.
Strappato il

Risposte:


6

Questo è dove ti consiglierei (http://www.xnua.com/xna_lua_xnua), ma non è stato aggiornato per molto tempo.

C # è un linguaggio eccezionale, e in un certo senso potrebbe essere usato come linguaggio di scripting all'interno del tuo gioco c #. Nick Gravelyn ha creato dei simpatici tutorial sul motore delle tessere (http://blog.nickgravelyn.com/downloads/#tileengine) e ha utilizzato un motore di script personalizzato per attivare la finestra di dialogo. Ha anche avuto un esempio di base quando ha appreso la parola chiave "yield": http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/


3
Alcuni punti positivi qui. Una cosa a cui pensare, è perché vuoi un linguaggio di scripting quando il tuo gioco è scritto in c #? I motori C ++ possono ottenere molta agilità utilizzando un linguaggio di scripting, poiché il C ++ richiede in genere molto tempo per essere compilato. C # è molto veloce in questo senso. Se per qualche motivo desideri che i tuoi script vengano compilati in fase di esecuzione, puoi sempre usare CodeDom (o qualsiasi altro metodo di generazione del codice) per compilare un file CS al momento del caricamento, ma funzionerebbe solo su PC. C'è un capitolo su questo nel libro "Sviluppo del
strumenti del

^^ Lo sviluppo del set di strumenti di Game Engine è un bel libro :). Ora è un po 'obsoleto, ma i concetti sono ancora solidi. Il problema con i collegamenti del linguaggio di scripting .NET è che, per funzionare su Xbox 360, devono essere interpretati praticamente. Senza System.Reflection.Emit, non puoi fare molto in termini di generazione di codice. Avevo l'impressione che queste funzionalità sarebbero arrivate su Xbox 360 nel prossimo futuro, ma sulla base della discussione di commento nella mia risposta di seguito, probabilmente non è così. Pertanto, le prestazioni degli script su Xbox 360 probabilmente non saranno così eccezionali :(.
Mike Strobel,

@ Cubed2D: Lua è una sorta di standard industriale per i giochi di scripting ed è anche più facile da capire per il programmatore non professionista.
RCIX

@Mike alla tua destra, posso compilare o generare codice sul 360. Se avessi intenzione di implementarlo, non avrei supportato gli script c # su 360, e l'avrei solo come una funzionalità del set di strumenti per PC. Basta modificare il progetto vs per includere la cartella script su una build 360 e ignorarla su una PC. @RCIX solo perché lo fanno tutti gli altri, non significa che dovresti. Se vuoi usare Xna, sarà più un problema che un valore. Ci sono modi migliori per esporre parametri modificabili a non programmatori nel mondo .net cercando di implementare lua (quello che presumo tu
stia

@ Cubed2D: questo è un buon punto, ma dipende davvero dalla tua piattaforma di destinazione. se stai scrivendo solo per PC, puoi usare LuaInterface e la lua dll nativa e non devi scrivere un'implementazione. Inoltre, il punto è che dal momento che ha un tale seguito nel mondo dello sviluppo del gioco, è naturalmente sviluppato funzionalità che lo rendono buono per quell'ambiente. Inoltre, ho iniziato a programmare con Lua e scommetto che lo hanno fatto molte persone, quindi è comprensibile il motivo per cui le persone vogliono usarlo.
RCIX,

2

Se stai cercando script in C #, dai un'occhiata a IronPython . Non è solo un'API python per C #, è in realtà un'implementazione python completamente separata che si compila nello stesso assembly CLR (con le stesse prestazioni) di C #, ma può essere interfacciata con un linguaggio di scripting. Qualsiasi wrapper Lua per C # sarebbe molto lento a causa del sovraccarico di Marshalling.


2

Come diceva Sean, vale la pena guardare IronPython. IronPython è in realtà una delle poche implementazioni di linguaggio dinamico per .NET destinate al Dynamic Language Runtime (DLR). Esiste almeno un progetto open source volto a implementare Lua sul DLR (come questo ), ma non sono sicuro che ci siano implementazioni in fase di completamento. Un set ben implementato di attacchi DLR per Lua dovrebbe fornire prestazioni alla pari con IronPython e IronRuby e sarebbe molto più veloce di un wrapper Lua. Per motivi di confronto, IronPython generalmente funziona meglio di CPython (a volte significativamente meglio).

Nota: Come ElementCy afferma di seguito, lingue DLR sono generalmente non supportato su Xbox 360. Tuttavia, v'è una "modalità interpretato" nel DLR. Non ne so abbastanza per dirlo con certezza, ma potrebbe essere possibile far funzionare IronPython (o altre implementazioni del linguaggio DLR) su Xbox 360 in modalità interpretata, anche se le prestazioni ne risentirebbero sicuramente. Potrebbe valere la pena di chiedere a qualcuno del team DLR se sanno che questo è possibile. In caso contrario, Xbox 360 dovrebbe ottenere Reflection.Emit supporto come parte del supporto Silverlight imminente. Se e quando ciò accade, immagino che il DLR sia attivo e funzionante su Xbox 360 non sarà un problema.


4
Unico problema con IronPython, non funzionerà su xbox360. Va bene se vuoi usarlo solo per PC. IronPyton utilizza System.Reflection.Emit molto e questo non è disponibile sul .net Framework di Xbox.
ElementCy

Un ottimo punto. Aggiornato.
Mike Strobel,

2
Non pensare che xbox stia ottenendo Reflection. Emetti presto, dato che winPhone ha sia xna che silverlight e non supporta quello spazio dei nomi
Cubed2D

1
Potresti avere ragione. WP7 non esegue effettivamente Silverlight, ma "Silverlight Mobile Compact Framework", che si basa su .NET CF anziché .NET. Credo che Xbox 360 esegua anche .NET CF anziché .NET Framework completo, quindi è probabile che finisca con un'implementazione simile a quella di WP7. Oh bene.
Mike Strobel,

2

La migliore soluzione che potrei darti è semplicemente lo script in C #. È possibile compilarli in fase di esecuzione quando si targetizza Windows e compilarli prima per l'xbox. (come dll)

Questa sarebbe la soluzione più semplice. Puoi anche farlo in VB.NET o in qualsiasi linguaggio .NET. (non sono sicuro di quelli di scripting però) Fondamentalmente, sto dicendo di avere i tuoi script nella loro dll. Puoi farli compilare in fase di esecuzione su Windows. (vuoi davvero che facciano questo su Xbox 360 ?, non puoi aggiornare i tuoi giochi lì, almeno non credo)

Posso capire la tua frustrazione, volevo usare anche Lua.

Per riassumere: 1) Costruiscilo in fase di esecuzione su Windows 2) Costruiscilo prima per Xbox 360

Questo è quello che raccomando.


1
  1. L'interprete Lua non è gestito, AFAIK, quindi non puoi farlo funzionare su Xbox con XNA

  2. È possibile utilizzare l' interprete Javascript chiamato Jint che non si basa su DLR e funziona su Xbox ( http://jint.codeplex.com/ )


Avrei detto che il primo punto è falso, dal momento che ci sono molti link qui che hanno Lua <-> C #.
Il comunista Duck il

È possibile eseguire solo codice gestito su Xbox. Un bridge Lua <-> C # è un codice non gestito che consente di chiamare Lua dal codice gestito; fino a quando MS non lo include in XNA o nel sistema operativo Xbox 360, non è possibile eseguirlo lì.

0

Tecnicamente non risponde alla tua domanda (non funziona su xbox), ma LuaInterface consente l'integrazione Lua con C # relativamente indolore.


0

Solo per aggiornare questa domanda, ho trascorso l'ultimo giorno a fare ricerche approfondite e ho scoperto che l'utilizzo di UniLua (creato per essere utilizzato con unità, pura implementazione C #) è l'opzione migliore e più efficace per ottenere Lua su Xbox. L'ho rimosso, ho rimosso tutto il materiale di Unity e funziona benissimo.

Ho anche aggiunto alcune funzionalità presenti in LuaInterface sovraccaricando l'operatore [] per LuaState e così via.

CFWLua

Spero sia stato utile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.