Seperti judulnya, saya sedang mengembangkan game ruang angkasa dari atas ke bawah.
Saya tidak ingin menggunakan fisika newton dengan kapal yang dikendalikan pemain. Saya mencoba mencapai skema kontrol yang agak mirip dengan FlatSpace 2 (game keren). Saya tidak tahu bagaimana mencapai perasaan ini dengan kontrol keyboard dibandingkan dengan kontrol mouse. Ada saran?
Saya menggunakan Unity3d dan C # atau javaScript (unityScript atau apa pun istilah yang benar) berfungsi dengan baik jika Anda ingin memberikan beberapa contoh kode.
Sunting: Tentu saja saya harus menjelaskan skema kontrol FlatSpace 2, maaf. Anda menahan tombol mouse ke bawah dan menggerakkan mouse ke arah yang Anda inginkan kapal bergerak. Tapi itu bukan kontrol yang saya tidak tahu bagaimana melakukannya, melainkan perasaan campuran mengendarai mobil dan menerbangkan pesawat terbang. Ini dibuat dengan sangat baik. Tautan Youtube: FlatSpace2 di iPhone
Saya tidak mengembangkan permainan iPhone tetapi video menunjukkan prinsip gaya gerakan.
Sunting 2
Karena tampaknya ada sedikit minat, saya akan memposting versi kode yang saya gunakan untuk melanjutkan. Ini bekerja dengan cukup baik. Terkadang cukup baik sudah cukup!
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);
}
}
sumber
Jawaban:
Jadi jika saya mengerti dengan benar, Anda ingin panah kiri dan kanan untuk mengubah kapal Anda, dan panah atas dan bawah untuk mengendalikan dorong.
Saya telah menerapkan skema kontrol ini dalam prototipe penembak ruang yang pernah saya buat.
Kode di bawah ini adalah contoh kode khusus non-bahasa yang sangat naif. Jangan menganggapnya terlalu harfiah.
EDIT: OOps, kode tidak membatasi percepatan negatif yang disebabkan oleh gesekan. Jadi kapal akan benar-benar mulai mundur setelah beberapa saat. Jadi, ubah "kode" sedikit.
sumber
saya mengonversi kode psuedo menjadi C #:
Jika ada yang salah dengan ini, silakan tinggalkan komentar.
Terima kasih kepada Nailer untuk menyediakan kode-psuedo
sumber