大家好,基本上我想知道如何將這個運動腳本更改為剛體。它以我希望的方式作業,wasd 改變外觀方向,然后空間從那個方向向前移動有點,但我想將它全部轉換為用剛體完成,這樣我就可以進行碰撞。謝謝!!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Fly : MonoBehaviour
{
public float moveSpeed;
void Start()
{
}
void Update()
{
if (Input.GetKey(KeyCode.Space))
{
transform.Translate(new Vector3(0,0,moveSpeed) * Time.deltaTime, Space.Self);
}
float rotatex = Input.GetAxis("Vertical");
float rotatey = Input.GetAxis("Horizontal");
transform.Rotate(0, rotatey, 0, Space.World);
transform.Rotate(-rotatex * 0.5f, 0, 0);
}
}
uj5u.com熱心網友回復:
您撰寫的代碼有很多錯誤。沒問題,但您可能需要在代碼開始按預期作業之前修復所有這些問題。這個答案旨在為您提供一個跳板,讓您可以通過谷歌搜索其中一些錯誤,并讓您Update()了解該方法及其在 Unity 中的作業原理。
首先,您需要確保該RigidBody2d組件位于您的游戲物件上。這很容易做到,右鍵單擊檢查器并添加組件。Google:“如何在 Unity 中向游戲物件添加組件”
接下來,您將想要了解Update()被呼叫的頻率以及它是如何作業的。劇透警報 - 它會盡可能快地呼叫您的計算機。這意味著transform.Rotate每次呼叫時更改旋轉可能會導致物件旋轉得非常快。也許足夠快,以至于每幀旋轉超過 360 度,并且似乎是隨機“抽搐”。您需要縮放輪換,因此在 Google 上搜索“Unity Update 中的增量時間”。
最后,您將要收集您的輸入,您用 正確地做這件事Input.GetKey(),盡管有很多方法可以給這只貓剝皮。也許最直接的方法是在一個名為 的方法中收集您的輸入,GetAllInputs()將該方法中的一些布林值設定為類似IsMovingRight或這樣的值IsJumping,然后在您的Update方法中對它們進行操作。這只是一種方法,實際上有幾十種方法可以改進它們。谷歌搜索“Unity Input System”、“Unity 2D Physics”和“Finite State Machines”(因為你最終會想要擁有蹲伏、跳躍、跑步、掛在墻上等“狀態”)。看起來你在寫一個平臺游戲,所以我也會看一些關于這個的 youtube 教程,
uj5u.com熱心網友回復:
假設它以您想要的方式作業,這里是使用剛體的代碼(確保剛體附加到物件)此代碼必須在固定更新中撰寫,因為必須在固定更新中完成基于剛體的計算:
public class Fly : MonoBehaviour
{
public float moveSpeed;
[SerializeField] private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.Space))
{
//transform.Translate(new Vector3(0,0,moveSpeed) *
//Time.deltaTime, Space.Self);
if (rb)
{
rb.MovePosition(new Vector3(0,0,moveSpeed) *
Time.deltaTime);
}
}
float rotatex = Input.GetAxis("Vertical");
float rotatey = Input.GetAxis("Horizontal");
// transform.Rotate(0, rotatey, 0, Space.World);
// transform.Rotate(-rotatex * 0.5f, 0, 0);
if (rb)
{
rb.MoveRotation(Quaternion.Euler(rotatex , rotatey , 0));
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/366557.html
下一篇:有沒有其他方法可以做到這一點?
