简单的问题,但很难找到答案。
我有一个钩子修理工,在按下键的地方。B,钩子会开火5秒钟,然后应该回来。
该代码运行良好,只是当分配用于调用该对象的代码时,它无法顺利恢复,而是可以传送。 这是代码, BOLD
中特定于问题的行schema.db.session.add(new_user)
schema.db.session.commit()
result, errors = schema.user_schema.dump(new_user)
return jsonify(result)
我在做什么错?它应该按预期工作,对吧?
答案 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()
中。