亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Unity中獲得平滑的2D跳躍?

如何在Unity中獲得平滑的2D跳躍?

C#
楊魅力 2022-12-24 14:45:05
我想讓我的角色跳躍,但我的動作非常緩慢。這就像角色正在傳送而不是緩慢上升。你有什么想法嗎?我正在使用 tilemap 和Unity 2019.1.0f2.我已經嘗試過:rb.AddForce(Vector2.up * jumpForce), rb.velocity = Vector2.up * jumpForce, rb.MovePosition(new Vector2(transform.position.x, transform.position.y+jumpForce).這是我的其余移動腳本,沒有前面提到的代碼:public float speed;public float jumpVelocity;float timeBtwJumps = 0f;float startTimeBtwJumps = 0.3f;Rigidbody2D rb;private void Awake(){    rb = GetComponent<Rigidbody2D>();}                                  private void Update(){    float horizontal = Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;    Vector2 position = new Vector2(transform.position.x, transform.position.y);    rb.MovePosition(new Vector2(position.x + horizontal, position.y));}private void FixedUpdate(){    if (Input.GetAxisRaw("Vertical") > 0f && timeBtwJumps <= 0f)    {        Jump();        timeBtwJumps = startTimeBtwJumps;    }    else        timeBtwJumps -= Time.deltaTime;}void Jump(){}一切都在派生自 MonoBehaviour 的類中。這是我的剛體和播放器設置:Body Type: Dynamic Material: NoneSimulated: trueUse Auto Mass: falseMass:1Linear Drag: 0Angular Drag: 0.05Gravity Scale:1Collision Detection: DiscreteSleeping Mode: Start AwakeInterpolate: NoneFreeze Rotation: z-true播放器具有默認設置的 Box Collider 2D。
查看完整描述

3 回答

?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

如果您想要基于物理的跳躍,請不要使用 MovePosition。MovePosition 只會根據您的插值設置將剛體移動到某個位置。由于您的插值沒有,您會得到“非常滯后的運動”。


相反,您應該使用沖力。在您只嘗試加速力之前。此外,您的水平運動也必須相應地改變以增加力量。像這樣嘗試:


void Jump()

    rb.AddForce(Vector2.up*jumpVelocity, ForceMode2D.Impulse);

}

要對此進行測試,您應該暫時禁用水平移動?;蛘吣憧梢赃@樣做:


private void Update()

{

    float horizontal = Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;

    rb.AddForce(horizontal * Vector2.right);

}

還有幾件事:


-從不檢查 FixedUpdate 循環內的輸入!您的游戲可能以 100 fps 運行,并且取決于固定更新(之所以稱為 fix,是因為 unity 試圖保持物理更新幀率固定),您可能會錯過按下按鈕的機會。


- 如果您使用 MovePosition,請僅在 FixedUpdate 中使用它。


-你可能想改變你檢查跳躍輸入的方式,你也可能想檢查玩家是否接地。


-您還應注意,還應避免在更新中使用 AddForce 作為加速力。


查看完整回答
反對 回復 2022-12-24
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

首先,您需要調用Rigidbodyfrom的方法,FixedUpdate因為那是計算物理的地方。其次將您的向量值乘以Time.fixedDeltaTime.


例子:


void FixedUpdate()

    {

        rb.MovePosition(rb.position + position * Time.fixedDeltaTime);

    }


查看完整回答
反對 回復 2022-12-24
?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

我有這個問題。就好像這個角色在傳送而不是慢慢上升。

我通過更改代碼解決了它。

我使用了這段代碼: MainBodyRigidBody.velocity = new Vector3 (Delta_X, 0, Delta_Y) * MovementSpeed * Time.deltaTime;

但我應該使用MainBodyRigidBody.velocity +=

我將我的代碼更改為:

MainBodyRigidBody.velocity += new Vector3 (Delta_X, 0, Delta_Y) * MovementSpeed * Time.deltaTime;

我為我的角色運動使用了上面的代碼,但它導致了我的問題。


查看完整回答
反對 回復 2022-12-24
  • 3 回答
  • 0 關注
  • 145 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號