簡體   English   中英

unity 如何將 transform.position 轉換為物理運動?

[英]unity how can I convert transform.position into physical movement?

在我的代碼中,我使用 transform.position 移動玩家,但這會導致碰撞器和我的游戲物理出現問題。

 transform.position = new Vector3(
                transform.position.x + touch.deltaPosition.x * multiplier,
                transform.position.y,
                transform.position.z + touch.deltaPosition.y * multiplier)

如何將其轉換為速度或一些物理運動,以使速度不受影響?

一般來說, Rigidbody涉及到Rigidbody和碰撞,您應該避免兩件事:

  • 通過transform移動對象
  • Update移動您的對象

兩者都打破了物理學。

您更願意做的是直接更新Rigidbody.velocity Update這樣做很好

// If possible already reference via Inspector
[SerializeField] private Rigidbody _rigidbody;

private void Start()
{
    if(!_rigidbody) _rigidbody = GetComponent<Rigidbody>();
}

private void Update()
{
    ...

    _rigidbody.velocity = Vector3.right * touch.deltaPosition.x * multiplier 
        + Vector3.forward * touch.deltaPosition.y * multiplier;
    ...
}

另一種方法是將用戶輸入 ( Update ) 與物理例程 ( FixedUpdate ) FixedUpdate並使用MovePosition

(假設您的代碼在更新中執行)

private Vector3 targetPosition;

// If possible already reference via Inspector
[SerializeField] private Rigidbody _rigidbody;

private void Start()
{
    if(!_rigidbody) _rigidbody = GetComponent<Rigidbody>();

    targetPosition = transform.position;
}

private void Update()
{
    ...

    targetPosition = _rigidbody.position 
        + Vector3.right * touch.deltaPosition.x * multiplier 
        + Vector3.forward * touch.deltaPosition.y * multiplier;

    ...
}

private void Update()
{
    _rigidbody.MovePosition(targetPosition);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM