因此,我想创建一个小平台游戏,其中包含角色,敌人等普通物品。我添加了一个代码,该代码允许角色向左和向右移动,但是当我停止按与方向对应的按钮时,小精灵会像在冰上一样继续移动。谁能帮我解决这个问题,因为我一无所知,出了什么问题?
public float speed = 2f;
Rigidbody2D mRB2D;
datasheet mDTS;
// Start is called before the first frame update
void Start()
{
mDTS = GetComponent<datasheet>();
Debug.Assert(mDTS != null, "require datasheet");
}
// Update is called once per frame
void Update()
{
float tHorizontal = Input.GetAxis("Horizontal");
//float tVertical = Input.Get
mDTS.movement += (Vector2)transform.right * speed * tHorizontal * Time.deltaTime;
}
〜
public float max_ms = 6f;
public Vector2 movement = Vector2.zero;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
transform.position += (Vector3)movement * Time.deltaTime;
}
private void LateUpdate()
{
SpeedClamp();
}
void SpeedClamp()
{
if (movement.magnitude > max_ms)
{
movement = movement.normalized * max_ms;
}
}
答案 0 :(得分:0)
哦,我明白了。
您按“向右箭头”按钮。 现在,看这一行:
mDTS.movement += (Vector2)transform.right * speed * tHorizontal * Time.deltaTime;
mDTS.movement将增加。假设这是您第一次按“向右箭头”。假设mDTS.movement在按下之前为(0,0)-矢量,现在由于增加而为(1,0)-矢量。 释放按钮时,mDTS.movement将不会再次设置为0。
没有“中断”。无摩擦。您要做的是(类似这样):
float friction = 0.95f;
float halt_speed = 0.05f;
void SpeedClamp()
{
if (movement.magnitude > max_ms)
{
movement = movement.normalized * max_ms;
}
movement = movement * friction;
if (movement.magnitude < halt_speed)
movement = Vector2.Zero;
}
使用此代码,角色每次更新都会变慢。当您不再加速时,就像在路上的汽车。只是滚动而不会断裂。
如果您不希望有任何“冰效应”,只需在释放按钮后立即将运动矢量设置为零即可。喜欢:
// Update is called once per frame
void Update()
{
float tHorizontal = Input.GetAxis("Horizontal");
//float tVertical = Input.Get
if (tHorizontal != 0.0f) {
mDTS.movement += (Vector2)transform.right * speed * tHorizontal * Time.deltaTime;
} else {
mDTS.movement = Vector2.Zero;
}
}
但是,只要您按下按钮,此角色就只会使您的角色快速运行,而一旦松开按钮,角色将立即静止不动。