变换位置传送。移动不顺畅

时间:2018-09-13 23:46:38

标签: c# unity3d

简单的问题,但很难找到答案。

我有一个钩子修理工,在按下键的地方。B,钩子会开火5秒钟,然后应该回来。

该代码运行良好,只是当分配用于调用该对象的代码时,它无法顺利恢复,而是可以传送。 这是代码, BOLD

中特定于问题的行
schema.db.session.add(new_user)
schema.db.session.commit()

result, errors = schema.user_schema.dump(new_user)

return jsonify(result)

我在做什么错?它应该按预期工作,对吧?

1 个答案:

答案 0 :(得分:1)

Vector3.MoveTowards必须在每帧运行,这就是为什么我在评论中提到* Time.deltaTime的原因。

在5s时,rb的速度变为零,isHookActive变为假,因此Vector3.MoveTowards并不是每帧。

if (Input.GetKeyDown(KeyCode.B))
{
    isHookActive = true;
    rb.AddForce(Vector3.forward * Thrust);
}
if (isHookActive )
{
    if (timeHookTraveling >= HookTravelTime) //if the hook traveled for more than hookTravelTime(5 seconds in your case)
    {

        print("hehemeth");
        rb.velocity = Vector3.zero; //negate addforce from before
        isHookActive = false;//reset this bool so your Update will not check this script until you don't activate it in your ThrowHook
        timeHookTraveling = 0f;//reset the travel time for your next hook activation
    }

    else//if you havent hit 5 keep increasing
    {
        timeHookTraveling += Time.deltaTime;//increase your travel time by last frame's time
    }
}

else if (!isHookActive && transform.position != Target.position)
{
    transform.position = Vector3.MoveTowards(transform.position, Target.position, Thrust * Time.deltaTime);
}

还有一种更好的方法是

if (Input.GetKeyDown(KeyCode.B))
{
    isHookActive = true;
    rb.AddForce(Vector3.forward * Thrust);
}

进入

时进入FixedUpdate()而不进入Update()
if (isHookActive )
{... }

保留在Update()中。