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

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

unity 2d 中的方向實體運動故障

unity 2d 中的方向實體運動故障

C#
偶然的你 2022-10-23 16:45:26
我正在 Unity 2D 中創(chuàng)建游戲。我有要添加到場景中的龍。龍只應該在 4 個方向中的 1 個方向上移動,向上、向下、向左和向右。左右移動的龍完全按照預期移動。然而,上下移動的龍有一個問題,就是它們移動時會傾斜。所有向上移動的龍都以 45 度角向上和向右移動。所有向下移動的龍以 45 度角向下和向左移動。起初我認為是動畫師將龍移動到不同位置的問題,但我從預制件中刪除了動畫師組件,問題仍然存在。下面是我用來移動龍的代碼。using System.Collections;using System.Collections.Generic;using UnityEngine;public class DragonMovment : MonoBehaviour {    public string Direction;    //needs to be set in the prefab    public float DragonSpeed;   //speed of dragon    Rigidbody2D rb;     public Transform Boundries;    // Use this for initialization    void Start ()    {        rb = GetComponent<Rigidbody2D>();    }    // Update is called once per frame    void FixedUpdate ()    {        float MoveRight = 1;        float MoveLeft = -1;        float MoveUp = 1;        float MoveDown = -1;        if (Direction== "R")        {            rb.velocity = new Vector3(DragonSpeed * MoveRight, rb.velocity.y);        }        if (Direction == "L")        {            rb.velocity = new Vector3(DragonSpeed * MoveLeft, rb.velocity.y);        }        if (Direction == "U")        {            rb.velocity = new Vector3(DragonSpeed * MoveUp, rb.velocity.x);        }        if (Direction == "D")        {            rb.velocity = new Vector3(DragonSpeed * MoveDown, rb.velocity.x);        }    }}編輯。那么為什么以下工作。using System.Collections;using System.Collections.Generic;using UnityEngine;public class PlayerControler : MonoBehaviour {    // speed of movment     public float Speed;    // rb    Rigidbody2D rb;    public Transform Boundries;    // Use this for initialization    void Start () {        rb = GetComponent<Rigidbody2D>();    }}但其他代碼沒有?
查看完整描述

1 回答

?
慕無忌1623718

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

你在向量 3 的 y 方向得到了速度 x


if (Direction == "U")

{

    rb.velocity = new Vector3(rb.velocity.x, DragonSpeed * MoveUp);

}

if (Direction == "D")

{

    rb.velocity = new Vector3(rb.velocity.x, DragonSpeed * MoveDown);

}

當您覆蓋后續(xù)語句中的值時,它在您的播放器腳本中起作用。


    float MoveSide = Input.GetAxis("Horizontal"); //eg 1

    float MoveVert = Input.GetAxis("Vertical"); // eg 1


    // setting your x velocity incorrectly to the y (vert) velocity speed and keeping y the same velocity as start of frame

    rb.velocity = new Vector3(Speed * MoveVert, rb.velocity.y);

    // Set the y to the x value of the statement above so it is now in the correct vector and set the x to the correct hoz velocity

    rb.velocity = new Vector3(Speed * MoveSide, rb.velocity.x);


// effectively doing 

rb.velocity = new Vector3(Speed * MoveSide, Speed * MoveVert);

您還應該使用 MovePosition,因為它不會直接影響物理引擎(使用速度可能會對碰撞和觸發(fā)器產生連鎖反應并產生意想不到的物理效果)。您的游戲對象必須被標記為運動學,否則下面的內容將導致它們立即傳送到新位置。


var movementDirection = new Vector3(Speed * MoveSide, Speed * MoveVert);

rb.MovePosition(transform.position + movementDirection * Time.deltaTime);

并且 * Time.deltaTime 確保移動對于不同的幀率是一致的。如果您在 30 fps 的機器上運行游戲,游戲對象的移動速度將低于 60 fps。Time.deltaTime 計算自上一幀以來經過的物理時間,并確保無論幀速率如何,行進的距離都是相同的。


例如,假設游戲對象每幀更新移動 1 次。在 30 fps 的機器上一秒鐘后,物體將移動 30。在 60 fps 的機器上一秒鐘后,物體將移動 60。


Time.deltaTime=.2s on 30 fps so 1 movement * .2 = move .2 per frame * 30 frames in the second = 60 moved

Time.deltaTime=.1s on 60 fps so 1 movement * .1 = move .1 per frame * 60 frames in the second = 60 moved



查看完整回答
反對 回復 2022-10-23
  • 1 回答
  • 0 關注
  • 153 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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