AI per spostare astronavi su misura (forma che influenza il comportamento del movimento)


15

Sto progettando un gioco di strategia di combattimento in flotta spaziale 3D-6DOF basato su turni che si basa fortemente sulla personalizzazione della nave. Lasciami spiegare un po 'il gioco, dal momento che devi sapere un po' su di esso per porre la domanda.

Quello a cui mi rivolgo è la capacità di creare la tua flotta di navi con forme personalizzate e moduli collegati (eliche, travi del trattore ...) che darebbero vantaggi e svantaggi a ciascuna nave, in modo da avere molte diverse distribuzioni di flotte. Ad esempio, una nave lunga con due eliche a lato permetterebbe alla nave di girare facilmente attorno a quell'aereo, le navi più grandi si muoverebbero lentamente a meno che non si posizionino molte eliche sul retro (quindi spendendo più punti di "costruzione" ed energia durante lo spostamento, e lo farà andare solo velocemente verso quella direzione.) Ho in programma di bilanciare tutto il gioco attorno a questa funzione.

Il gioco ruoterebbe attorno a due fasi: ordini e fase di combattimento. Durante la fase degli ordini, comandi le diverse navi. Quando tutti i giocatori terminano la fase degli ordini, inizia la fase di combattimento e gli ordini della nave vengono risolti in tempo reale per qualche tempo, quindi l'azione si interrompe e c'è una nuova fase di ordini.

Il problema si presenta quando penso all'input del giocatore. Per muovere una nave, devi attivare o disattivare diverse eliche se vuoi guidare, avanzare, frenare, ruotare in posizione ... Queste eliche non devono lavorare alla loro massima potenza, quindi puoi ottenere più movimento combinazioni con meno eliche.

Penso che questo approccio sia un po 'noioso. Il giocatore non vuole giocherellare con motori o altro, vuoi solo MUOVERSI e UCCIDERE. Il modo in cui intendo che il giocatore impartisca ordini a queste navi è tramite una destinazione e una rotazione , e quindi l'IA calcolerebbe la potenza corretta dell'elica per raggiungere quel movimento e rotazione. La propulsione non deve essere la stessa per tutto il calcolo del turno (dopo che gli ordini sono stati dati), quindi sarebbe bello se le navi reagissero mentre si muovono, regolando la potenza delle eliche per le loro esigenze dinamicamente, ma potrebbe essere troppo difficile da implementare e non è davvero necessario per far funzionare il gioco.

In entrambi i casi, come potrebbe quell'intelligenza artificiale decidere quali eliche attivare per la traiettoria migliore (o almeno non peggiore) da raggiungere?

Ho pensato ad alcuni approcci:

  • Apprendimento dell'intelligenza artificiale: i tipi di nave imparerebbero a conoscere i loro movimenti per tentativi ed errori, adeguando il loro comportamento con più usi e infine diventando "intelligenti". Non voglio essere così coinvolto nella codifica AI e penso che possa essere frustrante per il giocatore (anche se puoi lasciarlo imparare senza giocare).
  • Movimento temporale predeterminato: al momento della creazione della nave, TUTTI i movimenti possibili vengono calcolati per ciascuna configurazione dell'elica e potenza per un dato delta-tempo. Memoria intensa, brutta, cattiva.
  • Traiettorie pre-calcolate: le stesse di cui sopra ma non per ogni delta-tempo ma per l'intera traiettoria, che verrebbe quindi adattata il più possibile. Richiede una configurazione fissa dell'elica per l'intera fase di combattimento ed è ancora ad alta intensità di memoria, brutta e cattiva.
  • Forzatura bruta continua: l'IA controlla continuamente TUTTE le possibili configurazioni dell'elica durante l'intera fase di combattimento, calcola alcuni passi temporali e decide quale sia la migliore in base a quello. Contro: ciò che è buono ora potrebbe non essere così buono in seguito, ed è troppo intenso per la CPU, brutto e anche cattivo.
  • Forzatura singola: come sopra, ma solo forzatura bruta all'inizio della simulazione, quindi ha bisogno di una configurazione dell'elica costante durante l'intera fase di combattimento.
  • Controllo dell'angolo continuo: questo non è un metodo di movimento completo, ma forse un modo per scartare configurazioni di eliche "stupide". Dato il vettore normale dell'elica corrente e quello finale, è possibile approssimare la potenza necessaria per l'elica in base all'angolo. Devi farlo continuamente per tutta la fase di combattimento. L'ho capito di recente, quindi non ci ho pensato troppo. A priori, ha anche lo svantaggio di "ciò che è buono ora potrebbe non esserlo più tardi" e non si preoccupa delle altre eliche che potrebbero agire insieme per creare una migliore configurazione di propulsione.

Sono davvero bloccato qui. Qualche idea?


Hai esaminato i comportamenti di guida?
Stonemetal,

1
@stonemetal sicuro. Il problema qui è che i comportamenti di governo sono di solito modellati assumendo il pieno controllo della posizione e della rotazione dell'oggetto e alcuni vincoli (o almeno questo è quello che ho trovato sul web.) L'intelligenza artificiale qui non ha il pieno controllo sull'entità , ma solo sulle cose (eliche) che fanno muovere l'entità. Ho difficoltà a collegare questi comportamenti di guida con l'effettiva locomozione dell'astronave.
Kaao

è la stessa ragione per cui i comportamenti di guida non funzionano troppo bene sulle macchine da corsa. I comportamenti di guida sono fantastici, ma non sono la soluzione universale a tutto.
tenpn

@haoD Stavo pensando qualcosa sulla falsariga di ciò che ha risposto a Boston. Lascia che costruiscano ciò che mai, quindi traducilo in vincoli per un comportamento di guida. Anche se dalla tua risposta sembra che i comportamenti di guida probabilmente non siano abbastanza flessibili come lo sono.
Stonemetal,

1
So che questo è super vecchio, ma quello che stai cercando si chiama pianificazione cinodinamica del movimento
mklingen

Risposte:


4

Spiacenti, non ho una soluzione comprovata, ma non può essere risolta matematicamente?

Data qualsiasi elica e il suo offset dal centro di massa, è possibile calcolare in quale piano è possibile ruotare.

Per ogni movimento, puoi usare 1 o più eliche. Ogni elica può essere interrogata per vedere se il suo piano può contribuire all'orientamento del bersaglio, quanto sforzo ci vorrebbe dall'elica per contribuire (le eliche lontane dal CoM possono usare meno energia per generare più virate) e quanto vicino sarebbe voi verso l'orientamento target. Quindi A * attraverso lo spazio di ricerca fino a quando non ti viene in mente una soluzione a basso costo, che potrebbe essere meno energia totale utilizzata o movimento più veloce.

Continua a rivalutarlo mentre completi il ​​turno e la potenza moderata mentre ti avvicini al bersaglio, magari con un controller PID.

Per il movimento in avanti, una semplice soluzione ti spingerebbe sempre in avanti, diminuendo la velocità del bersaglio mentre ti avvicini al bersaglio. Dato che hai spazio 3D in cui giocare, puoi evitare complicate routine di virata a 3 punti. Dovresti considerare l'output delle eliche scelte per la velocità in linea retta nei calcoli di virata, come una sorta di stato iniziale.

Questo è molto retro ma non vedo grossi difetti. Solo un sacco di duro lavoro e modifica del numero. :)


Questo è quello che stavo cercando, una soluzione matematica ... grazie! Spero che diventi facile come sembra.
Kaao

7

Dato che vuoi rinunciare a un po 'di controllo del giocatore per la giocabilità usando un'intelligenza artificiale, potresti considerare anche di semplificare l'effetto di virare sulle eliche e di modificare le dimensioni della nave in parametri meno facili da gestire per un algoritmo informatico. Al giocatore è ancora consentito aggiungere eliche su una determinata parte della nave, ma una volta completato questo viene "compresso" in parametri.

Ogni elica influisce sulla velocità di virata della nave o, combinata con un'elica posizionata in parallelo, influenza la velocità di marcia in una dimensione specifica. Combina questi parametri per ogni elica e otterrai la massima velocità di virata e velocità per una nave. Combina questi due parametri per ciascuna elica e set di eliche nella virata massima e nella velocità per l'intera nave, per tutte le dimensioni disponibili (su, giù, sinistra, destra, avanti, indietro).

Usando la velocità di virata e la velocità per ciascuna dimensione, disponi di informazioni sufficienti per consentire effettivamente alla nave di spostarsi verso una destinazione. Il giocatore vedrà l'effetto della sua configurazione dell'elica, ma sotto il cofano il suo input è enormemente semplificato. Potresti elaborare più di una strategia di volo in base alla distanza che la nave deve percorrere, per rendere il volo più naturale e aumentare il senso del giocatore che ha esercitato il controllo sul movimento della nave. Ma alla fine, come hai detto, non importa come la nave arriva a destinazione e se il suo percorso è ottimale, deve solo essere lì e il suo orario di arrivo è influenzato dalla configurazione dell'elica.

Per le dimensioni della nave, è possibile includerle quando si hanno i valori di velocità compressi per un effetto approssimativo o utilizzarli durante il calcolo per un effetto più preciso. Probabilmente vorrai verificare se il metodo preciso vale lo sforzo, perché la differenza potrebbe non influire sul senso di controllo del giocatore.


Non esattamente quello che stavo cercando, ma potrebbe fare il trucco se ne avessi davvero bisogno. Voto per l'idea :)
kaoD

0

Nello spazio, la forma non influisce sul movimento. Non c'è aria da trascinare.

È la nave più la massa totale dei componenti aggiuntivi che conta. È un problema di gravità della spinta di massa più semplice. Quindi puoi fare questi calcoli o dal momento che è un gioco a turni, sviluppare un sistema di movimento come i giochi di ruolo come Traveller.


Benvenuto in GD.SE! Questa domanda ha già una risposta accettata ed è stata posta 2 anni fa - forse potresti rispondere ad alcune delle domande più recenti sul sito.
Polar,

Sì, è vero, ma presumo sempre che altri lo incontreranno più tardi (come ho fatto io) e lo troverò utile. hehe, non sono venuto qui per rispondere a domande ... come la maggior parte, cercando soluzioni ai miei problemi.
gnoll110,

@Pole poster di domande qui. Ho trovato la sua risposta molto interessante! Sono contento che sia tornato per rispondere e penso che aggiungere valore anni dopo sia una delle parti più preziose di SO.
Kaao,

@ gnoll110 Potrei sbagliarmi qui. Non c'è resistenza, ok, ma l'angolo che il vettore di spinta forma con il centro di massa influenza il modo in cui la nave traduce o ruota ... giusto? Ad esempio: un motore in linea con il centro di massa si traduce, mentre spostandolo dal centro di massa si aggiunge un componente rotante alla nave.
Kaao

@kaoD Scusate se è sembrato un po 'duro - ovviamente un sacco di SO sta aggiungendo valore in seguito. Stavo solo suggerendo che potesse anche rispondere a domande più recenti: più risposte rispondono, meglio è!
Polar,
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.