Như tiêu đề cho thấy tôi đang phát triển một trò chơi không gian từ trên xuống.
Tôi không muốn sử dụng vật lý newtonian với con tàu do người chơi điều khiển. Tôi đang cố gắng đạt được sơ đồ điều khiển hơi giống với FlatSpace 2 (trò chơi tuyệt vời). Tôi không thể tìm ra cách để đạt được cảm giác này với các điều khiển bàn phím trái ngược với điều khiển chuột. Bất kỳ đề xuất?
Tôi đang sử dụng Unity3d và C # hoặc javaScript (unityScript hoặc bất cứ điều gì là thuật ngữ chính xác) hoạt động tốt nếu bạn muốn bỏ một số ví dụ mã.
Chỉnh sửa: Tất nhiên tôi nên mô tả sơ đồ điều khiển của FlatSpace 2, xin lỗi. Bạn giữ nút chuột xuống và di chuyển chuột theo hướng bạn muốn con tàu di chuyển. Nhưng đó không phải là điều khiển tôi không biết làm mà là cảm giác pha trộn giữa lái xe và lái máy bay. Nó thực sự được thực hiện tốt. Liên kết Youtube: FlatSpace2 trên iPhone
Tôi không phát triển trò chơi iPhone nhưng video cho thấy nguyên tắc của phong cách di chuyển.
Chỉnh sửa 2
Vì dường như có một chút quan tâm, tôi sẽ đăng phiên bản mã tôi đã sử dụng để tiếp tục. Nó hoạt động đủ tốt. Đôi khi đủ tốt là đủ!
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);
}
}