與在編輯器中的作業方式相比,我注意到測驗已構建游戲的速度明顯變慢。
球員運動:
public class PlayerScript : MonoBehaviour
{
Vector3 objectSpeed;
Rigidbody rigidBody;
[SerializeField] float speed;
[SerializeField] float maxSpeed;
// Start is called before the first frame update
void Start()
{
objectSpeed = gameObject.GetComponent<Rigidbody>().velocity;
rigidBody = gameObject.GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
objectSpeed = rigidBody.velocity;
if (Input.GetKey("w"))
{
objectSpeed.z = speed;
}
if (Input.GetKey("s"))
{
objectSpeed.z -= speed;
}
if (Input.GetKey("a"))
{
objectSpeed.x -= speed;
}
if (Input.GetKey("d"))
{
objectSpeed.x = speed;
}
objectSpeed.x = Mathf.Clamp(objectSpeed.x, -maxSpeed, maxSpeed);
objectSpeed.z = Mathf.Clamp(objectSpeed.z, -maxSpeed, maxSpeed);
rigidBody.velocity = objectSpeed;
}
}
構建程序中玩家的移動速度明顯變慢。經過一番搜索,我發現了應該用于物理的 FixedUpdate()。將此代碼移到那里后,構建中的玩家移動按預期作業。
奇怪的是,敵人的移動在 Update() 中運行得很好
public class EnemyScript : MonoBehaviour
{
public GameObject player;
Rigidbody enemyRigidbody;
float zombieSpeed;
// Start is called before the first frame update
void Start()
{
player = GameObject.Find("Player(Clone)");
enemyRigidbody = gameObject.GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
Vector3 directionToPlayer = player.transform.position - transform.position;
float distanceToPlayer = Mathf.Sqrt(
Mathf.Pow(directionToPlayer.x, 2f)
Mathf.Pow(directionToPlayer.y, 2f)
Mathf.Pow(directionToPlayer.z, 2f));
Vector3 movementVector = (1f / distanceToPlayer) * directionToPlayer * zombieSpeed;
enemyRigidbody.velocity = movementVector;
}
}
那么這里有什么問題呢?是否與必須處理玩家移動的鍵盤輸入有關?
uj5u.com熱心網友回復:
TLDR;
FixedUpdate()
基于 current運行Time.timeScale
,
Update()
總是每幀運行一次。
FixedUpdate()
總是與物理引擎同步運行,它并不總是每幀運行一次。
它可以每幀運行多次或根本不運行,具體取決于物理引擎。
出于優化目的,物理引擎相對于游戲的時間尺度而不是幀速率運行。
如果您在游戲變慢時需要更準確的物理計算,請減少Edit > Project Settings > TimeFixed TimeStep
下的值。盡管它可能會導致性能問題,因為您只是允許物理引擎在一秒鐘內進行更多計算。
如果您確實需要優化方面的幫助,Unity 有一個關于它的檔案。
Update()
總是每幀運行一次。
有關更多詳細資訊,Unity 有一個TimeFrameManagement 檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/467346.html
標籤:unity3d