我在学习 Unity 的第三天,目前正在做 roll-a-ball tutorial .我正在尝试添加一个重启按钮,将球传送回起始位置/原点。一切正常,但重启后球会继续移动,但我希望它留在原地而不是自行移动。
我的意思是,如果我以最大速度向左移动并按“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;
}
}
}
我尝试在谷歌上搜索如何更改从 GetAxis 获取的值,但其他人声称这样做是不可能的。所以我真的不知道如何让它不永远移动......
在我学习 Unity 的那两天里,我还遇到了一个“额外”问题,但它们不值得单独提出一个问题,也许如果它们之前已经回答过(我一直无法找到任何对我有帮助的文档),然后给我一个链接,告诉我在哪里可以找到我的问题的答案。
问题是,在按下按钮(W/A/S/D,输入管理器中正/负按钮的默认值)一段时间后,如何让球停止移动?例如,我只按“W”一秒钟,但球会一直向前移动,永远不会停止。
我想要实现的是在我按下“W”一秒钟之后,几秒钟后球将完全停止,似乎 GetAxis 的值永远不会回到 0。我试图用谷歌搜索它,我认为这与输入管理器中的重力有关 - 我尝试更改它,但球仍将永远移动,我注意到唯一改变的是球的速度。
如果有人能帮助我解决这些问题,我将不胜感激。
最佳答案
I am trying to add a restart button, that teleports the ball back to the start-position/origin. It all works good, but the ball will keep moving after I restart, but I want it to stay in a spot and not move by itself.
我看到您尝试使用 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
。
What I want to achieve is after I for example press 'W' for a second, after a few seconds the ball will completely stop, it just seems that the value from GetAxis never goes back to
0
.
由于球在滚动,因此需要增加球的角阻力。这将使球在释放键后停止滚动。角阻力作用于附在球上的刚体。如果这还不够,还可以增加阻力。
关于c# - 重新启动位置后如何阻止球体自行移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40771660/