Como sugiere el título, estoy desarrollando un juego espacial de arriba abajo.
No estoy buscando usar la física newtoniana con la nave controlada por el jugador. Estoy tratando de lograr un esquema de control algo similar al de FlatSpace 2 (juego increíble). Sin embargo, no puedo entender cómo lograr esta sensación con los controles del teclado en comparación con los controles del mouse. ¿Alguna sugerencia?
Estoy usando Unity3d y C # o javaScript (unityScript o el término correcto) funciona bien si desea colocar algunos ejemplos de código.
Editar: Por supuesto, debería describir el esquema de control de FlatSpace 2, lo siento. Mantenga presionado el botón del mouse y mueva el mouse en la dirección en que desea que se mueva la nave. Pero no son los controles los que no sé cómo hacer, sino la sensación de una combinación de conducir un automóvil y volar un avión. Está muy bien hecho. Enlace de Youtube: FlatSpace2 en iPhone
No estoy desarrollando un juego para iPhone, pero el video muestra el principio del estilo de movimiento.
Editar 2
Como parece haber un ligero interés, publicaré la versión del código que he usado para continuar. Funciona lo suficientemente bien. ¡A veces lo suficientemente bueno es suficiente!
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);
}
}