Я пытаюсь создать свою игру в Unity, и в процессе создания интерактивного сундука и указателя я внезапно получил ошибку. Ошибка продолжает говорить: «Не найден подходящий метод для переопределения».
Я пробовал смотреть на свой собственный код и менять имена. Я думаю, это связано с тем, что я назвал его «Персонаж». Хотя у меня есть публичная пустота для этого. Я продолжаю получать ту же ошибку.
Это код, который у меня есть для открытия и изменения спрайтов сундука.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InteractableChest : InteractableBase
{
public Sprite OpenChestSprite;
public ItemType ItemInChest;
public int Amount;
private bool m_IsOpen;
private SpriteRenderer m_Renderer;
void Awake()
{
m_Renderer = GetComponentInChildren<SpriteRenderer>();
}
public override void OnInteract( Character character )
{
if ( m_IsOpen == true )
{
return;
}
character.Inventory.AddItem( ItemInChest, Amount, PickupType.FromChest );
m_Renderer.sprite = OpenChestSprite;
m_IsOpen = true;
}
}
Проблема, похоже, в
public override void OnInteract( Character character )
{
if ( m_IsOpen == true )
{
return;
}
Так как все файлы с "Character character" затронуты этим. В моем документе Characterinteractionmodel я сделал фрагмент следующего кода:
[RequireComponent( typeof ( Character ) ) ]
public class CharacterInteractionModel : MonoBehaviour
{
private Character m_Character;
private Collider2D m_Collider;
private CharacterMovementModel m_MovementModel;
// Start is called before the first frame update
void Awake()
{
m_Character = GetComponent<Character>();
m_Collider = GetComponent<Collider2D>();
m_MovementModel = GetComponent<CharacterMovementModel>();
}
// Update is called once per frame
void Update()
{
}
public void OnInteract()
{
InteractableBase usableInteractable = FindUsableInteractable();
if ( usableInteractable == null )
{
return;
}
usableInteractable.OnInteract( m_Character );
}
Во всех поврежденных файлах (с символом в нем) у меня есть одна и та же ошибка, в которой говорится: «Ошибка CS0115:« InteractableChest.OnInteract (Character ) »: не найден подходящий метод для переопределения
Документ Interactbase:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InteractableBase : MonoBehaviour
{
virtual public void OnInteract()
{
Debug.LogWarning( "OnInteract is not implemented" );
}
}





Чтобы переопределить метод, вам нужно сопоставить его сигнатуру, а ваш базовый класс не имеет списка параметров:
virtual public void OnInteract()
Для вашего производного класса требуется параметр Character:
public override void OnInteract( Character character )
Поэтому, чтобы это исправить, вам нужен этот параметр в методе вашего базового класса, даже если он его не использует:
virtual public void OnInteract( Character character )