Ошибка Unity NullReferenceException с новой системой вводаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ошибка Unity NullReferenceException с новой системой ввода

Сообщение Anonymous »

Я новичок в Unity, поэтому прошу прощения, если это легко исправить, но я не могу в этом разобраться. Я получаю нулевую ошибку, связанную с моим playerInputHandler. Может ли кто-нибудь указать, где я ошибаюсь? Буду очень благодарен.
Ошибка: NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта
Mover.Update() (в Assets/Scripts/Mover.cs:37)
PlayerInputHandler.cs
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.InputSystem;
using static UnityEngine.InputSystem.InputAction;

public class PlayerInputHandler : MonoBehaviour
{
private PlayerInput playerInput;
private Mover mover;

public bool JumpPressed = false;
public bool JumpPressing = false;

private void Awake()
{
playerInput = GetComponent
();
var movers = FindObjectsOfType();
var index = playerInput.playerIndex;
mover = movers.FirstOrDefault(m => m.GetPlayerIndex() == index);
}

public void OnMove(CallbackContext context)
{
if(mover != null)
mover.SetInputVector(context.ReadValue());
}

public void OnJump(CallbackContext context)
{
if(mover != null)
{
if (context.started)
{
JumpPressing = true;
}
else if (context.canceled)
{
JumpPressed = true;
}
}
}

void LateUpdate()
{
JumpPressing = false;
JumpPressed = false;
}

}

Mover.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Mover : MonoBehaviour
{

[SerializeField] private float MoveSpeed, JumpSpeed;
[SerializeField] private int playerIndex = 0;

private Rigidbody2D rb;
private Vector3 moveDirection = Vector3.zero;
private Vector2 inputVector = Vector2.zero;
PlayerInputHandler playerInputHandler;
private void Awake()
{
rb = GetComponent();
playerInputHandler = GetComponent();
}

public int GetPlayerIndex()
{
return playerIndex;
}

public void SetInputVector(Vector2 direction)
{
inputVector = direction;
}

void Update()
{

Vector3 movement = new Vector3(inputVector.x, /*inputVector.y*/0, 0) * MoveSpeed * Time.deltaTime;
transform.Translate(movement);

if(playerInputHandler.JumpPressed)
{
rb.AddForce(new Vector4(0, JumpSpeed), ForceMode2D.Impulse);
}
if(playerInputHandler.JumpPressing)
{
Debug.Log("Are you going to jump?");
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/643 ... put-system
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»