为什么当使用钥匙“p”为宇宙飞船提供加速功率时它正在做什么?

时间:2017-05-02 07:23:43

标签: c# unity3d unity5

宇宙飞船的速度是一样的。我想要的是给太空船加速效果。因此,每次按下按键p,太空飞船都会获得加速度。

当我点击使用断点的p键时,它到了代码部分。但是在游戏运行时它并没有影响宇宙飞船。

每艘宇宙飞船都有Rigidbody组件,Use Gravity设置为false,Is isKinematic设置为true。

using UnityEngine;
using System.Collections;

public class Control : MonoBehaviour
{
    public int rotationSpeed = 75;
    public int movementspeed = 10;
    public int thrust = 10;

    bool isPKeyDown = false;
    float acceleration = .0f;

    Vector3 previousPosition = Vector3.zero;

    Rigidbody _rigidbody;

    // Use this for initialization
    void Start()
    {

        _rigidbody = GetComponent<Rigidbody>();
        Debug.Log("Acc Speed: " + thrust);
    }

    // Update is called once per frame
    void Update()
    {

        var v3 = new Vector3(Input.GetAxis("Vertical"), Input.GetAxis("Horizontal"), 0.0f);
        transform.Rotate(v3 * rotationSpeed * Time.deltaTime);
        transform.position += transform.forward * Time.deltaTime * movementspeed;

        if (Input.GetKey(KeyCode.Z))
            transform.Rotate(Vector3.forward * rotationSpeed * Time.deltaTime);

        if (Input.GetKey("p"))
        {
            isPKeyDown = Input.GetKey("p");
            float distance = Vector3.Distance(previousPosition, transform.position);
            acceleration = distance / Mathf.Pow(Time.deltaTime, 2);

            previousPosition = transform.position;
            _rigidbody.AddRelativeForce(0f, 0f, thrust, ForceMode.Acceleration);
        }
    }

    void OnGUI()
    {
        if (isPKeyDown)
        {
            GUI.Label(new Rect(100, 100, 200, 200), "Acc Speed: " + acceleration);
        }
    }
} 

1 个答案:

答案 0 :(得分:1)

如果RigidBody设置为isKinematic,您必须直接更改其transform.position,各种AddForce方法将无法正常工作(仅当它不是isKinematic)。

即使您直接更改刚体的velocity适当性,它也不会移动,因为在这些物体上禁用了所有物理。