首頁>Game>source

我正在使用新的Input System与Unity进行2D遊戲.我用過 spriteRenderer.flipX 翻轉播放器,但由於它由三部分組成(身體和两只眼睛),所以 没用.另外,我無法將它们轉換為單个精靈,因為我需要用眼睛进行動画處理.因此,我決定使用 spriteRenderer 用於翻轉和更改 transform.localscale 从float到Vector2的值.問题是,当我按箭頭或AD键移動字元時,会弹出一个錯誤訊息,提示"無法从組合中讀取Vector2型別的值".此錯誤来自 movementInput 這是与新輸入系統有關的冗长而複雜的代碼.同樣,从遊戲手柄获取輸入也会匯致相同的錯誤.我不知道此錯誤是什麼意思,我该如何解決.現在,玩家可以跳跃,但不能移動或翻轉.您可以在下面查看代碼,錯誤和我的操作對映。

這是我的播放器控製器:

InputActionState

這是我要移動播放器時遇到的錯誤。

這是我的行動圖。

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; public class PlayerController : MonoBehaviour { [SerializeField] private float speed, jumpSpeed; [SerializeField] private LayerMask ground; private PlayerActionControls playerActionControls; private Rigidbody2D rb; private PolygonCollider2D pol; private Animator animator; private bool facingRight = true; private Vector2 movementInput; private void Awake() { playerActionControls = new PlayerActionControls(); rb = GetComponent<Rigidbody2D>(); pol = GetComponent<PolygonCollider2D>(); animator = GetComponent<Animator>(); } private void OnEnable() { playerActionControls.Enable(); } private void OnDisable() { playerActionControls.Disable(); } void Start() { playerActionControls.Land.Jump.performed += ctx => Jump(ctx.ReadValue<float>()); } private void Jump(float val) { if (val == 1 && IsGrounded()) { rb.AddForce(new Vector2(0, jumpSpeed), ForceMode2D.Impulse); } } private bool IsGrounded() { Vector2 topLeftPoint = transform.position; topLeftPoint.x -= pol.bounds.extents.x; topLeftPoint.y += pol.bounds.extents.y; Vector2 bottomRightPoint = transform.position; bottomRightPoint.x += pol.bounds.extents.x; bottomRightPoint.y -= pol.bounds.extents.y; return Physics2D.OverlapArea(topLeftPoint, bottomRightPoint, ground); } void FixedUpdate() { if(facingRight == false && movementInput.x > 0){ Flip(); } else if (facingRight == true && movementInput.x < 0){ Flip(); } } void Flip(){ facingRight = !facingRight; Vector3 Scaler = transform.localScale; Scaler.x *= -1; transform.localScale = Scaler; } void Update() { movementInput = playerActionControls.Land.Move.ReadValue<Vector2>(); Vector2 currentPosition = transform.position; // This was a Vector3 but since I got the error "Operator '+=' is ambiguous on operands of type 'Vector3' and 'Vector2", I changed it to a Vector2. currentPosition += movementInput * speed * Time.deltaTime; transform.position = currentPosition; } }
最新回復
  • 6月前
    1 #

    您的系統中存在一些錯誤 代碼。

    在您的Update中,您宣告了第二个區域性運動輸入Vector2.這將在類中隱藏您的motionInput,並且不会产生任何錯誤,但Flip()將無法工作.删除移動輸入前面的Vector2。

    您的actionMap看起来不對.您的操作必须是ControlType Vector2的Value型別.接下来,您將缺少用於輸入的Composite 2D Vector.看起来應该像這樣

  • 6月前
    2 #

    The only reason why I want to change the value from float to Vector2 is for movementInput.x .如果我將motionInput保持為浮點數,則会收到錯誤訊息,因為浮點數不包含x的定義

    是的,花車没有 x 屬性,因為它是一个數字值.維兹威兹 Vector2的屬性是.听起来您需要重新學習基本資料結構,例如浮點數和向量。

    您需要的是這个

    x
    
    private float movementInput; void FixedUpdate() { if(facingRight == false && movementInput > 0){ Flip(); } else if (facingRight == true && movementInput < 0){ Flip(); } } void Update() { movementInput = playerActionControls.Land.Move.ReadValue<float>(); transform.Translate(movementInput * speed * Time.deltaTime, 0); }

  • opengl:為什麼在GLSL中讀取我的深度纹理返迴不到一?
  • c++:当幀率波動時,是什麼原因匯致這種卡顿?