Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何阻止球体在重新启动后自行移动';什么位置?_C#_Unity3d_Game Physics_Unity5 - Fatal编程技术网

C# 如何阻止球体在重新启动后自行移动';什么位置?

C# 如何阻止球体在重新启动后自行移动';什么位置?,c#,unity3d,game-physics,unity5,C#,Unity3d,Game Physics,Unity5,我正在学习Unity的第三天,目前正在做这项工作。我试图添加一个重启按钮,将球传送回起始位置/原点。这一切都很好,但在我重新启动后球会继续移动,但我希望它留在一个位置,而不是自己移动 我的意思是,如果我以最大速度向左移动,然后按“R”重新启动,那么它将保持快速向左移动一段时间,但我想要实现的是,在我重新启动它的位置后,球不会继续自行移动(也许它的速度下降得太慢了,以至于看不到,在这种情况下,我希望它减速得更快) 这是我刚刚尝试过的代码,“希望”可以运行,但没有。我认为我在这里遇到的问题是,在下一

我正在学习Unity的第三天,目前正在做这项工作。我试图添加一个重启按钮,将球传送回起始位置/原点。这一切都很好,但在我重新启动后球会继续移动,但我希望它留在一个位置,而不是自己移动

我的意思是,如果我以最大速度向左移动,然后按“R”重新启动,那么它将保持快速向左移动一段时间,但我想要实现的是,在我重新启动它的位置后,球不会继续自行移动(也许它的速度下降得太慢了,以至于看不到,在这种情况下,我希望它减速得更快)

这是我刚刚尝试过的代码,“希望”可以运行,但没有。我认为我在这里遇到的问题是,在下一帧中再次指定了一个新的axisHorizontal/axisVertical变量值,该值取自Input.GetAxis,据我所知,这是不可能更改的

这意味着大于0/0/0的movementForce和AddForce将在下一帧再次激活

using UnityEngine;
using System.Collections;

public class PlayerScript : MonoBehaviour {

    public float movementSpeed = 7f;
    private Rigidbody rigidSphere;

    void Start() {
        rigidSphere = GetComponent<Rigidbody>();
    }

    void FixedUpdate() {
        float axisHorizontal = Input.GetAxis("Horizontal");
        float axisVertical = Input.GetAxis("Vertical");

        Vector3 movementForce = new Vector3(axisHorizontal, 0.0f, axisVertical);
        rigidSphere.AddForce(movementForce * movementSpeed);

        if (Input.GetKeyDown(KeyCode.R)) {
            transform.position = new Vector3(0, 0, 0);
            rigidSphere.AddForce(0, 0, 0);
            axisHorizontal = 0;
            axisVertical = 0;
        }
    }
}
使用UnityEngine;
使用系统集合;
公共类PlayerScript:MonoBehavior{
公共浮子移动速度=7f;
私有刚体刚体球;
void Start(){
rigidSphere=GetComponent();
}
void FixedUpdate(){
float axisHorizontal=Input.GetAxis(“水平”);
float axisVertical=Input.GetAxis(“垂直”);
Vector3 movementForce=新的Vector3(轴水平,0.0f,轴垂直);
rigidSphere.AddForce(移动力*移动速度);
if(Input.GetKeyDown(KeyCode.R)){
transform.position=新矢量3(0,0,0);
rigidSphere.AddForce(0,0,0);
轴水平=0;
轴垂直=0;
}
}
}
我试着在谷歌上搜索如何更改从GetAxis获取的值,但其他人声称这是不可能的。所以我真的不知道如何使它不会永远移动

在我学习Unity的这两天里,我还遇到了一个“额外”的问题,但它们不值得单独提一个问题,也许如果它们以前已经被回答过(我找不到任何有助于我解决这个问题的文档),那么就给我一个链接,告诉我在哪里可以找到我问题的答案

问题是,在我按下按钮(W/a/S/D,输入管理器中正/负按钮的默认值)一段时间后,如何使球停止移动?例如,我只按下“W”一秒钟,但球将永远向前移动,并且永远不会停止

我想要实现的是,在我按下“W”一秒钟后,几秒钟后球将完全停止,只是看起来GetAxis的值永远不会回到0。我尝试用谷歌搜索它,我认为这与输入管理器中的重力有关-我尝试更改它,但球仍将永远移动,我注意到唯一的变化就是球的速度

如果有人能帮我解决这些问题,我将不胜感激

我试图添加一个重启按钮,将球传送回 起始位置/原点。这一切都很好,但球会保持不变 重新启动后移动,但我希望它停留在某个位置而不移动 它本身

我看到您试图通过使用
rigidSphere.AddForce(0,0,0);
来解决此问题。这只会将球移动的现有力添加到
0,0,0
。解决此问题的方法是将刚体速度设置为
0

rigidSphere.AddForce(0,0,0);
替换为
rigidSphere.velocity=Vector3.zero;

即使这样做,
Input.GetAxis
值在达到
0
之前也会随着时间的推移而增加或减少。因此,在下一帧,球可能仍然会因此而移动

要停止此操作,请将
Input.GetAxis
替换为
Input.GetAxisRaw

Input.GetAxisRaw
将在释放键时立即返回到
0

我想要实现的是,在我按下“W”键一秒钟之后, 几秒钟后,球会完全停下来,看起来 GetAxis的值永远不会返回到
0

由于球在滚动,您需要增加球的角阻力。这将使球在释放键后停止滚动。角阻力位于连接到球的刚体上。如果这还不够,还需要增加阻力


我会说,在R上,算出球体的力,并在相反方向上施加相等的力(但不要问我如何)。谢谢!我注意到的唯一一点是球会移动多一点,因为会设置一个小的轴水平/垂直值。有没有办法使球完全无法移动(冻结)例如,0.5秒?当然,用
Input.GetAxisRaw
替换
Input.GetAxisRaw
。这应该会完全杀死它。让我知道。