Наследуется от класса, который наследует networkBehviour

Я пытаюсь наследовать класс, который в NetworkBehaviour, но всякий раз, когда я наследую родительский класс (скрипт), он перестает работать.

Я пробовал это:

using UnityEngine;  
using UnityEngine.Networking;   

public class FireFighter : NetworkBehaviour
{
    private void Update()
    {}
    private void Move()
    {}
    private void break()
    {}
} 

public class FireCaptain : FireFighter
{   
    public override void Move ()
    {
        base.Move();
        Debug.Log("The captainMoved.");     
    }
} 

Короче говоря, скрипт FireFighter работает хорошо, но всякий раз, когда я его наследую, он перестает работать. Мне нужно немного помощи здесь. Как я могу наследовать класс, который наследует Networkbehaviour.

Пожалуйста, прочитайте информацию, связанную с тегами, прежде чем использовать их в своем вопросе, чтобы убедиться, что вы не используете их неправильно.

Llama 08.04.2019 05:54

Кроме того, можете ли вы дать определение «перестает работать»?

Llama 08.04.2019 05:56
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Будьте осторожны с именами ваших методов! break — это ключевое слово, которое не следует использовать в качестве имени метода.


Затем вы определили

private void Move()

в вашем базовом классе FireFighter

=> в FireCaptain нельзя

public override void Move ()
  1. потому что это не virtual или abstract, поэтому вы вообще не можете использовать override.
  2. даже если бы вы не могли изменить область действия (с private на public) в переопределении.
  3. и поскольку он находится в вашем подклассе, у вас даже нет доступа к вызову private, поскольку он может быть вызван только самим реализующим классом.

Так

К 2.) и 3.) Если вы хотите, чтобы он был base.Move(); в подклассе, он также должен быть public уже в базовом классе. Или вы можете использовать public, чтобы доступ был только у базового класса и его наследников.

К 1.) Чтобы иметь возможность переопределить метод в вашем подклассе, он должен быть либо protected, либо virtual. Так сделай это

  • abstract если вы хотите иметь реализацию в базовом классе, чтобы определить поведение по умолчанию и сделать его только необязательный, чтобы переопределить его. подобно

    // subclasses don't have to implement and override
    // this method but can. Also the base.Move(); is optional
    public virtual void Move()
    {
        Debug.Log("You might want to override this to implement a movement");
    }
    
  • virtual если вы не хотите иметь реализацию в базовом классе и хотите сила подклассы для реализации этого, например. подобно

    // subclasses will throw a compiler error if they
    // do not implement this method 
    // (without base.Move(); since hte base has no implementation)
    public abstract void Move();
    

Другие вопросы по теме