我对Unity和C#很陌生,并一直在努力解决这个问题!
我希望我的船逐渐加速,然后慢慢停下来,好像没有引力一样,因为它将成为太空游戏!
如果有人可以帮助我,甚至指导我参加这个主题的教程,我将不胜感激! :)
这是我目前的太空船代码......
using UnityEngine;
using System.Collections;
using UnityStandardAssets.CrossPlatformInput;
public class PlayerMovement : MonoBehaviour {
public float maxSpeed = 6f;
public float rotSpeed = 180f;
void Start ()
{
}
void Update () {
Quaternion rot = transform.rotation;
float z = rot.eulerAngles.z;
z -= CrossPlatformInputManager.GetAxis ("Horizontal") * rotSpeed * Time.deltaTime;
rot = Quaternion.Euler (0, 0, z);
transform.rotation = rot;
Vector3 pos = transform.position;
Vector3 velocity = new Vector3 (0, CrossPlatformInputManager.GetAxis("Vertical") * maxSpeed * Time.deltaTime, 0);
pos += rot * velocity;
transform.position = pos;
}
}
如何做到这一点?
答案 0 :(得分:2)
与Unity中的任何内容一样,有一百种方法可以做到这一点,但我认为使用物理将是最简单的。
现在你正在直接操纵变换。这很好,但实际上比让Unitys物理为你做数学要复杂得多。
您需要做的就是将一个Rigidbody组件(或2D游戏的Rigidbody2D)附加到您的船上。
然后,通过向刚体添加力,您将获得良好的逐渐加速,并且通过在检查器中调整Rigidbodys线性和角度阻力,您将获得非常平滑和自然的减速感觉。
以下是使用物理的官方文档:https://docs.unity3d.com/Manual/class-Rigidbody.html
利用物理学是Unity开发中非常有趣和重要的一部分,所以如果你刚刚开始我强烈建议你现在就学习它,这是用它解决的完美问题。
答案 1 :(得分:0)
你可以试试这个:
Vector3 velocity = transform.forward * CrossPlatformInputManager.GetAxis("Vertical") * maxSpeed * Time.deltaTime;
pos += velocity;
transform.position = pos;
我希望它有用。