如何修复 Unity 中的“无法从复合材料中读取 Vector2 类型的值”错误?
Posted
技术标签:
【中文标题】如何修复 Unity 中的“无法从复合材料中读取 Vector2 类型的值”错误?【英文标题】:How can I fix "Cannot read value of type Vector2 from composite" error in Unity? 【发布时间】:2021-03-12 22:21:17 【问题描述】:我正在使用新的输入系统使用 Unity 制作 2D 游戏。我使用spriteRenderer.flipX
翻转播放器,但由于它由三个部分(身体和两只眼睛)组成,spriteRenderer
不起作用。此外,我无法将它们转换为单个精灵,因为我需要眼睛来为它们设置动画。因此,我决定使用transform.localscale
进行翻转并将movementInput
的值从浮点数更改为Vector2。问题是当我按箭头或 AD 键移动字符时,会弹出一条错误消息“无法从复合材料中读取 Vector2 类型的值”。此错误来自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()
Vector2 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;
这是我想移动播放器时遇到的错误。
这是我的行动图。
【问题讨论】:
此错误意味着它无法将AxisComposite
转换为Vector2
,因为您使用的是通过操作类型,它一次读取和存储(在AxisComposite
内)所有输入,无论哪个方向是“最强”。将类型更改为值时会发生什么?
@BFyre 当我将类型更改为值时,没有什么特别的事情发生。只是错误消失了,似乎问题已经解决了,但是当我玩游戏时,玩家仍然无法移动,我在控制台中遇到了同样的错误。
如果你使用方向而不是负/正呢?我现在无法检查它,但看看它是如何在此处的答案中完成的:***.com/questions/58469484/…
@BFyre 我将游戏手柄的移动从1D Axis
更改为Binding
(就像那个答案一样),我能够用游戏手柄移动玩家!但是当我按下键盘上的任何按钮时,我仍然得到同样的错误。我是否也需要将键盘输入更改为绑定? (我还更新了行动地图图像。)
@BFyre 我尝试将键盘输入更改为绑定,但没有成功。另外,我发现了一些奇怪的东西。在我将手柄输入改为绑定后,玩家可以用左摇杆上下移动,这是因为Left Stick[Gamepad]
绑定。如果我使用Left
和Right
代替那个,玩家将不会移动。
【参考方案1】:
我将我的动作图更改为这个,现在翻转工作正常,我不再收到该错误。
【讨论】:
以上是关于如何修复 Unity 中的“无法从复合材料中读取 Vector2 类型的值”错误?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Unity 上修复“Gradle Build Failed”?
Unity 2019 - 如何修复 TextMeshPro 2.0 错误 cs0433