【问题标题】:How can I change the speed of objects that are spawning in constantly in my game?如何更改游戏中不断生成的对象的速度?
【发布时间】:2020-08-02 05:36:41
【问题描述】:

我正在为班级编辑一款太空射击游戏,并且我正在尝试创建一个“困难模式”,当玩家按下“e”键时该模式会加速小行星。目前使用我的代码,按下该键将加速当前屏幕上的每颗小行星,但生成的新小行星以正常速度运行。我不知道如何解决,并希望得到一些建议。这是我的代码:

 public float speed;

 private Rigidbody rb;

 Vector3 initialForwardVector;

 void Start()
 {
    rb = GetComponent<Rigidbody>();
    initialForwardVector = transform.forward;
    rb.velocity = initialForwardVector * speed;
 }

 void Update()
 {
    if (Input.GetKey (KeyCode.E))
    {
        rb.velocity = initialForwardVector * (2*speed);
    }
 }

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    最快最简单的解决方案:

    public float speed;
    public static float speedModifier = 1f;
    
    private Rigidbody rb;
    
    Vector3 initialForwardVector;
    
    void Start()
    {
        rb = GetComponent<Rigidbody>();
        initialForwardVector = transform.forward;
        rb.velocity = initialForwardVector * speed * speedModifier;
    }
    
    void Update()
    {
        if (Input.GetKey(KeyCode.E))
        {
            speedModifier = 2f;
            rb.velocity = initialForwardVector * (speedModifier * speed);
        }
    }
    

    速度修改器将应用于所有新的射弹,因为该值在类的所有实例之间是共享的(静态的)。对于更健壮的实现,我建议添加一个 Initialize 函数,该函数将为新的小行星设置一个本地速度修改器。

    【讨论】:

    • 我建议将rb.velocity = initialForwardVector * (speedModifier * speed); 更改为rb.velocity = rb.velocity.normalized * (speedModifier * speed); 以避免所有小行星突然改变方向...
    • 没想到那样做,帮了大忙!我现在看到的唯一问题是小行星有时会改变方向。我让它们以-5的速度生成,所以它们从屏幕上下来,所以我认为速度会保持负数,但它似乎是随机的,知道是什么原因造成的吗?编辑:我修好了。当我像评论一样使用rb.velocity.normalized 时,方向有时会混乱,但与我的initialForwardVector 保持一致使其正常工作。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多