Mar*_*ate 4 c# unity-game-engine game-physics unity5
我正在学习 Unity 的第三天,目前正在做滚球教程。我正在尝试添加一个重新启动按钮,将球传送回开始位置/原点。一切都很好,但是在我重新启动后球会继续移动,但我希望它留在一个位置而不是自己移动。
我的意思是,如果我以最大速度向左移动并按“R”重新启动,那么它会在一段时间内保持快速向左移动,但我想要实现的是球在之后不会继续自行移动我重新启动它的位置(也许它的速度只是下降得太慢以至于不明显,在这种情况下我希望它减速得更快)。
这是我刚刚尝试并“希望”可以工作的代码,但没有。我认为我在这里遇到的问题是下一帧再次分配了一个新的 axisHorizontal/axisVertical 变量值,该值取自Input.GetAxis,据我是不可能改变的。
这意味着大于 0/0/0 的运动力和 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试在谷歌上搜索如何更改从 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.
由于球在滚动,因此需要增加球的角阻力。这将使球在松开按键后停止滚动。角阻力位于附着在球上的刚体上。如果这还不够,还可以增加阻力。
| 归档时间: |
|
| 查看次数: |
1049 次 |
| 最近记录: |