[英]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.