第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

C#
楊魅力 2022-12-24 14:45:05
我想讓我的角色跳躍,但我的動(dòng)作非常緩慢。這就像角色正在傳送而不是緩慢上升。你有什么想法嗎?我正在使用 tilemap 和Unity 2019.1.0f2.我已經(jīng)嘗試過:rb.AddForce(Vector2.up * jumpForce), rb.velocity = Vector2.up * jumpForce, rb.MovePosition(new Vector2(transform.position.x, transform.position.y+jumpForce).這是我的其余移動(dòng)腳本,沒有前面提到的代碼: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 的類中。這是我的剛體和播放器設(shè)置: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播放器具有默認(rèn)設(shè)置的 Box Collider 2D。
查看完整描述

3 回答

?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊

如果您想要基于物理的跳躍,請(qǐng)不要使用 MovePosition。MovePosition 只會(huì)根據(jù)您的插值設(shè)置將剛體移動(dòng)到某個(gè)位置。由于您的插值沒有,您會(huì)得到“非常滯后的運(yùn)動(dòng)”。


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


void Jump()

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

}

要對(duì)此進(jìn)行測(cè)試,您應(yīng)該暫時(shí)禁用水平移動(dòng)?;蛘吣憧梢赃@樣做:


private void Update()

{

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

    rb.AddForce(horizontal * Vector2.right);

}

還有幾件事:


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


- 如果您使用 MovePosition,請(qǐng)僅在 FixedUpdate 中使用它。


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


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


查看完整回答
反對(duì) 回復(fù) 2022-12-24
?
慕村9548890

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊

首先,您需要調(diào)用Rigidbodyfrom的方法,F(xiàn)ixedUpdate因?yàn)槟鞘怯?jì)算物理的地方。其次將您的向量值乘以Time.fixedDeltaTime.


例子:


void FixedUpdate()

    {

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

    }


查看完整回答
反對(duì) 回復(fù) 2022-12-24
?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊

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

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

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

但我應(yīng)該使用MainBodyRigidBody.velocity +=

我將我的代碼更改為:

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

我為我的角色運(yùn)動(dòng)使用了上面的代碼,但它導(dǎo)致了我的問題。


查看完整回答
反對(duì) 回復(fù) 2022-12-24
  • 3 回答
  • 0 關(guān)注
  • 152 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)