Wie der Titel schon sagt, entwickle ich ein Top-Down-Weltraumspiel.
Ich möchte keine Newtonsche Physik mit dem vom Spieler kontrollierten Schiff verwenden. Ich versuche ein Kontrollschema zu erreichen, das dem von FlatSpace 2 (fantastisches Spiel) ähnelt. Ich kann nicht herausfinden, wie ich dieses Gefühl mit Tastatursteuerungen im Gegensatz zu Maussteuerungen erreichen kann. Irgendwelche Vorschläge?
Ich verwende Unity3d und C # oder JavaScript (UnityScript oder was auch immer der richtige Begriff ist) funktioniert gut, wenn Sie einige Codebeispiele löschen möchten.
Bearbeiten: Natürlich sollte ich das Steuerungsschema von FlatSpace 2 beschreiben, sorry. Sie halten die Maustaste gedrückt und bewegen die Maus in die Richtung, in die sich das Schiff bewegen soll. Aber es sind nicht die Bedienelemente, die ich nicht weiß, sondern das Gefühl einer Mischung aus Autofahren und Flugzeugfliegen. Es ist wirklich gut gemacht. Youtube-Link: FlatSpace2 auf dem iPhone
Ich entwickle kein iPhone-Spiel, aber das Video zeigt das Prinzip des Bewegungsstils.
Bearbeiten 2
Da ein geringes Interesse zu bestehen scheint, werde ich die Version des Codes veröffentlichen, mit dem ich fortgefahren bin. Es funktioniert gut genug. Manchmal reicht gut genug!
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);
}
}