Come suggerisce il titolo, sto sviluppando un gioco spaziale top down.
Non sto cercando di usare la fisica newtoniana con la nave controllata dal giocatore. Sto cercando di ottenere uno schema di controllo in qualche modo simile a quello di FlatSpace 2 (gioco fantastico). Non riesco a capire come ottenere questo feeling con i controlli da tastiera invece dei controlli del mouse. Eventuali suggerimenti?
Sto usando Unity3d e C # o javaScript (unityScript o qualunque sia il termine corretto) funziona bene se si desidera eliminare alcuni esempi di codice.
Modifica: ovviamente dovrei descrivere lo schema di controllo di FlatSpace 2, scusa. Tieni premuto il pulsante del mouse e muovi il mouse nella direzione in cui vuoi che si muova la nave. Ma non sono i comandi che non so come fare, ma piuttosto la sensazione di un mix di guidare un'auto e far volare un aereo. È davvero ben fatto. Link Youtube: FlatSpace2 su iPhone
Non sto sviluppando un gioco per iPhone ma il video mostra il principio dello stile di movimento.
Modifica 2
Poiché sembra esserci un leggero interesse, posterò la versione del codice che ho usato per continuare. Funziona abbastanza bene. A volte è abbastanza buono!
using UnityEngine;
using System.Collections;
public class ShipMovement : MonoBehaviour
{
public float directionModifier;
float shipRotationAngle;
public float shipRotationSpeed = 0;
public double thrustModifier;
public double accelerationModifier;
public double shipBaseAcceleration = 0;
public Vector2 directionVector;
public Vector2 accelerationVector = new Vector2(0,0);
public Vector2 frictionVector = new Vector2(0,0);
public int shipFriction = 0;
public Vector2 shipSpeedVector;
public Vector2 shipPositionVector;
public Vector2 speedCap = new Vector2(0,0);
void Update()
{
directionModifier = -Input.GetAxis("Horizontal");
shipRotationAngle += ( shipRotationSpeed * directionModifier ) * Time.deltaTime;
thrustModifier = Input.GetAxis("Vertical");
accelerationModifier = ( ( shipBaseAcceleration * thrustModifier ) ) * Time.deltaTime;
directionVector = new Vector2( Mathf.Cos(shipRotationAngle ), Mathf.Sin(shipRotationAngle) );
//accelerationVector = Vector2(directionVector.x * System.Convert.ToDouble(accelerationModifier), directionVector.y * System.Convert.ToDouble(accelerationModifier));
accelerationVector.x = directionVector.x * (float)accelerationModifier;
accelerationVector.y = directionVector.y * (float)accelerationModifier;
// Set friction based on how "floaty" controls you want
shipSpeedVector.x *= 0.9f; //Use a variable here
shipSpeedVector.y *= 0.9f; //<-- as well
shipSpeedVector += accelerationVector;
shipPositionVector += shipSpeedVector;
gameObject.transform.position = new Vector3(shipPositionVector.x, 0, shipPositionVector.y);
}
}