首页 > 解决方案 > 如何统一指挥后退

问题描述

我是统一的新手,试图让立方体在命令下向前和向后移动,一切正常,除了当我试图向后移动它时,它不会向后移动,它只是停止。有人可以帮忙吗?

using UnityEngine;

public class kretanje : MonoBehaviour
{
    public Rigidbody rb; // ime varijable rigidbody koju mozemo kasnije koristiti u programu smo nazvali rb

    public float forwardForce = 0;
    public float sidewayForce = 500f; // to smo stavili da mozemo u inspectoru mijenjati i silu za livo desno 

    // Update is called once per frame
    void FixedUpdate() // dodajemo svaki put kad se zelimo igrat s fizikom (dodavanje sile, gasnje gravitacije...)
    {   // dodaj silu za unaprijed 
        rb.AddForce(0, 0, forwardForce * Time.deltaTime); // da bi islo isto ako razlicita racunala imajj razlicite timeframove

        if (Input.GetKey("d"))
        {
            rb.AddForce(sidewayForce * Time.deltaTime, 0, 0);
        }

        if (Input.GetKey("a"))
        {
            rb.AddForce(-sidewayForce * Time.deltaTime, 0, 0);
        }

        if (Input.GetKey("w"))
        {
            rb.AddForce(0, forwardForce * Time.deltaTime, 0);
        }

        if(Input.GetKey("s"))
        {
            rb.AddForce(0, -forwardForce * Time.deltaTime, 0);
        }
    }
}

标签: c#unity3d

解决方案


您总是在向前施加力(rb.AddForce(0, 0, forwardForce * Time.deltaTime)),即使您按下s,也永远不会在相反方向施加足够的力来克服它。因此,在按下 时增加比这更大的力ss或者,也许更好的是,如果被按下,则不要添加该力:

if (!Input.GetKey("s"))
{
    // da bi islo isto ako razlicita racunala imajj razlicite timeframove
    rb.AddForce(0f, 0f, forwardForce * Time.deltaTime); 
}
else
{
    rb.AddForce(0f, 0f, -forwardForce * Time.deltaTime);
}

if (Input.GetKey("w"))
{
    rb.AddForce(0f, 0f, forwardForce * Time.deltaTime);
}

if (Input.GetKey("d"))
{
    rb.AddForce(sidewayForce * Time.deltaTime, 0f, 0f);
}

if (Input.GetKey("a"))
{
    rb.AddForce(-sidewayForce * Time.deltaTime, 0f, 0f);
}

顺便说一句,默认情况下,您可以使用Input.GetAxisRaw("Vertical")计算 W/S 压制和Input.GetAxisRaw("Horizontal")计算 A/D 压制:

float vertical = Input.GetAxisRaw("Vertical");
float horizontal = Input.GetAxisRaw("Horizontal");

if (vertical >= 0f)
{
    rb.AddForce(0f, 0f, forwardForce * Time.deltaTime); 
}

rb.AddForce(horizontal * sidewayForce * Time.deltaTime, 0f,
        forward * forwardForce * Time.deltaTime);

您可以查看 Unity 的输入管理器文档以获取更多信息。


推荐阅读