所以基本上我想在玩家向左移動時將玩家 scale.x 更改為負數。我已經設法撰寫了一個腳本,但它不會改變它的規模。我嘗試了所有方法,但它不起作用。從邏輯上講它應該可以作業,但它沒有,我無法識別錯誤。這是我的腳本:
public float speedX;
bool facingRight;
float speed;
void Start() {
facingRight = true;
}
void Update()
{
MovePlayer(speed);
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
speed = -speedX;
}
if (Input.GetKeyUp(KeyCode.LeftArrow))
{
speed = 0;
}
if (Input.GetKeyDown(KeyCode.RightArrow))
{
speed = speedX;
}
if (Input.GetKeyUp(KeyCode.RightArrow))
{
speed = 0;
}
if (Input.GetKeyDown(KeyCode.UpArrow)) {
Jumping = true;
rb.AddForce(new Vector2(rb.velocity.x, jumpSpeedY));
}
}
void MovePlayer(float playerSpeed) {
rb.velocity = new Vector3(speed, rb.velocity.y, 0);
}
void Flip() {
if (speed > 0 && !facingRight || speed < 0 && facingRight) {
facingRight = !facingRight;
Vector3 temp = transform.localScale;
temp.x *= -1;
transform.localScale = temp;
}
}
uj5u.com熱心網友回復:
從邏輯上講它應該作業
沒有什么是永遠呼叫Flip。
你可能想把它添加到
private void Update()
{
...
Flip();
}
如前所述,盡管輸入處理對我來說看起來很奇怪。您可能應該簡單地使用
speed = Input.GetRawAxis("Horizontal") * speedX;
然后寧可MovePlayer在FixedUpdate如此內呼喚
private void Update()
{
speed = Input.GetRawAxis("Horizontal") * speedX;
Flip();
}
private void FixedUpdate()
{
// questionable if you need a dedicated method for a one-liner ;)
MovePlayer(speed);
}
同樣如前所述,盡管您在這里處理物理引擎,并且很可能不應該簡單地通過Transform組件更改比例。
我假設是 2D 游戲,所以寧愿使用例如SpriteRenderer.flipX.
uj5u.com熱心網友回復:
嘗試這個 ?添加( )條件
void Flip()
{
if ((speed > 0 && !facingRight) || (speed < 0 && facingRight)) {
facingRight = !facingRight;
Vector3 temp = transform.localScale;
temp.x *= -1;
transform.localScale = temp;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/371878.html
