NullReferenceException: Object reference not set to an instance of an object enemy.OnCollisionEnter2D (UnityEngine.Collision2D collision) (at Assets/scripts/enemy.cs:9) Если у вас выходит такая ошибка, тогда нужно в классе Hero, в методе Awake добавить строчку Instance = this;
@@culon4775 Здесь лучше было показать, ибо сам паттерн мы вообще вскользь затронули. Я бы сам, честно, не догадался бы, что его и инициализировать ещё надо)
Первая тысяча, так держать. Продолжай делать видео. Хочу что бы у тебя появилась монетизация на канале, что бы тебе самому нравилось выпускать ролики и уроки по Unity. Спасибо тебе)
Это уроок уже с подвохом. В конце придется самому закрепить материал и сделать анимацию для ходячего мостра. Автор молодец, недописал в код ровно то, что уже посилам сделать самому. Все получилось, спасибо.
Уже тысяча? Поздравляю! Ощущение что недавно нашёл твой аккаунт с 40 с чем-то подписчиков😁 (я самый проблемный подписчик, вечно какие-то ошибки и баги были🤣)
Решил задачу как сделать чтобы враг смотрел по направлению движения, полный код в конце комментария. Вообще очень рекомендую когда у вас возникает проблема с компилятором, ошибками и тд, не поленитесь пересмотреть еще раз ролик, свой код, и обязательно глянуть в гугл. Порой бывает полезно подумать что вы уже где то реализовали функционал разворота на примере Hero, то надо подумать как это сделать для Walking monster. Первое на ум приходит просто скопировать строчку "sprite.flipX = direction.x > 0.0f;" но не помогло, если не использовать штуку под названием Awake. В итоге простым обдумыванием решение лежащее на поверхности, было реализовано для врага. Вот полный листинг: using System.Collections; using System.Collections.Generic; using UnityEngine; public class WalkingMonster : Entity { private float speed = 1.5f; private Vector3 direction; private SpriteRenderer sprite; private void Awake() { sprite = GetComponentInChildren(); } private void Start() { direction = transform.right; } private void Move() { Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 0.1f + transform.right * direction.x * 0.7f, 0.1f); if (colliders.Length > 0) direction *= -1f; transform.position = Vector3.MoveTowards(transform.position, transform.position + direction, Time.deltaTime); sprite.flipX = direction.x > 0.0f; } private void Update() { Move(); } private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject == Hero.Instance.gameObject) { Hero.Instance.GetDamage(); } } }
Для тех кто столкнулся с такой проблемой: движущийся враг впирается в одну стену или дергаётся на месте туда сюда. Я сам столкнулся с такой проблемой и вот что мне помогло 1) Нужно сверить код, именно такой вариант кода запустился у меня: using System.Collections; using System.Collections.Generic; using UnityEngine; public class WalkingMonster : Entity { private float speed = 0.5f; private Vector3 direction; private SpriteRenderer sprite; private void Awake() // Метод, который вызывается при создании объекта { sprite = GetComponentInChildren(); // Присваивает переменной sprite компонент SpriteRenderer, который находится в дочернем объекте } private void Start() // Метод, который вызывается при запуске сцены { direction = transform.right; // Присваивает переменной direction значение вектора, указывающего вправо относительно объекта } private void Move() // Метод, который отвечает за перемещение врага { Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 0.1f + transform.right * direction.x * 0.7f, 0.1f); // Создает массив colliders и заполняет его всеми коллайдерами, которые пересекаются с кругом заданного радиуса и центра. Центр круга находится немного выше и впереди относительно объекта. if (colliders.Length > 0) direction *= -1f; // Если массив colliders не пустой, то меняет направление врага на противоположное transform.Translate(direction * speed * Time.deltaTime); // Перемещает объект на заданное расстояние в заданном направлении с учетом скорости и времени кадра sprite.flipX = direction.x > 0.0f; // Отражает спрайт по горизонтали в зависимости от направления } private void Update() // Метод, который вызывается каждый кадр { Move(); // Вызывает метод Move } private void OnCollisionEnter2D(Collision2D collision) // Метод, который вызывается при столкновении с другим коллайдером { if (collision.gameObject == Hero.Instance.gameObject) // Если объект столкновения является героем { Hero.Instance.GetDamage(); // Вызывает метод GetDamage у героя } } } Если вы его вставите и у вас почему то не заработает, то предлагаю сделать следующее: расставьте стенки подальше друг от друга Так же можете поиграться со значением 0.7, подогнать под себя. Подобные манипуляции по идее должны вам помочь. Конкретно мне они помогли. Так же не забывайте про перезапуск юнити, это на самом деле тоже может решить некоторые проблемы. Надею это кому нибудь поможет
@@dmitriykuzminlvm34 на 3:10 говорят, и я не понимаю, что нужно сделать, тоесть присвоеть класс Entity, это значит вместо монобиваур написать Entity, а про GetDamage я не понял
@@Илья-ж7м6ч Наследование класса - это способ создать новый класс, который получает все свойства и методы от другого класса (базового класса). Переопределение метода - это способ изменить поведение метода в дочернем классе, сохранив при этом возможность использовать базовую функциональность. Таким образом, унаследование класса Entity позволяет Hero использовать общую функциональность, а также добавлять или изменять её по мере необходимости. Мы в Entity методу GetDamage присваиваем модификатор virtual, именно он позволяет в дочерних классах переназначить метод, используем это т.к. все сущности разные. С помощью virtual мы позволяем переназначить метод в дочерних классах (у героя у монстров) То есть это как глобальная заготовка для сущностей (герой и монстры). Именно поэтому в классе Hero мы в методе GetDamage дописываем модификатор override, тем самым переназначая метод, то есть меняя его конкретно для класса Hero То есть глобально существует метод GetDamage в Entity (который наследуют), но для каждого класса мы GetDamage меняем соответствующе, если это требуется. У каждой сущности будет разное получение урона Просто повтори код в видео и всё должно работать
все работает при значении 0.9, однако это достаточно много, монстр разворачивается задолго до столкновения со стенкой. Нет ли способа как то решить эту проблему. Подойдут даже самые конченные костыли
@@Илья-ж7м6ч Это значит переопределить его в классе, который наследуется от базового класса, где этот метод был определён. То есть написать "public override void GetDamage()" и унаследовать весь класс Hero от Entity "public class Hero : Entity"
еще возник вопрос, как то можно анимировать коллайдер под анимацию обьекта? потому что когда червь в сжимается вниз - стенки его коллайдера остаются неподвижными ведь
Помогите решить проблему: NullReferenceException: Object reference not set to an instance of an object Worm.OnCollisionEnter2D (UnityEngine.Collision2D collision) (at Assets/Scripts/Worm.cs:9) Такое же с Wood
Увидел что для многих проблема развернуть спрайт при движении в другую сторону. В файле с вашим монстром добавьте такие строчки: private void Awake() { sprite = GetComponentInChildren(); } перед private void Start() и в Move() вставьте строчку: sprite.flipX = dir.x < 0.0f;
Норм, но с последним мобом проблема: двигается на пару пикселей туда и назад, хотя препядствий рядом никаких нет, и двигается со скоростью улитки, ты никуда переменную скорости не применил, хотя и создал. Такое ощущение, что моб коллайдиься с землей и не может определится в какую сторону идти Edit: поставила отзеркаливание текстуры при смене направления, и все стало ясно - бокс коллайдится с землей и моб 25 раз в секунду меняет направление
Вопрос: зачем для игрока/платформы/врага создавать пустой объект, а потом крепить ему дочерний спрайт? Если создать сразу объект игрока спрайтом, и на него же вешать коллайдер и RigidBody, то реализация в общем не меняется, так даже проще. P.S: один из наиболее понятных курсов для игродела с опытом в 3 дня, спасибо!
Если у кого-то не определяется класс Entity, то вам нужно создать отдельный скрипт с этим классом. Дальше если не работает override в скрипте Hero, то вам наверху нужно поменять наследование public class Hero : Entity
Я пол часа разбираю одно видео , так как я новичок . Автор будь добр понятней объясняй , весь день потратил на твои видео а в итоги одни ошибки, хоть я и делаю точь в точь!
Спасибо большое за ролики, скажи, вот будет толк если я сделаю по гайду всю игру и буду её разбирать? Или своё что-то делать и так проще? C# я учил по SimpleCode, дошел до классов. Это вот все мои знания.
Спасибо за видео!, Потихоньку осваиваю :)) Да, появился небольшой вопрос, а вот эти земляные блоки (Ground), их как-то можно поворачивать? Так чтобы они были под углом, создавая небольшой подъем или спуск ? Получается так, что бы сам колаидер был под углом
Ну есть такая штука Rotation ( с англ. поворот ). берёшь объект, к примеру то же самый блок земли, и вписываешь значение в параметр rotation по оси Z. Если есть дети у этого объекта, то они тоже будут поворачиваться вслед.
Хорошие видео всё доступно, но ты не рассказываешь о нюансах. Более чем уверен, что многие столкнулись с проблемой, что не камера движется за персонажем, а наоборот ( со 2-й части видео). Например, расскажи почему ты на препятствие сделал ( kinematic ) Rigidbody. А так ролики достойные. Но так же показуй плз фичи по сложней
всё хорошо, НО! С последним мобом(тот что патрулирует) проблемы: 1) не хочет разворачиваться, как ни крути, что я только не делал... Смотрит в одну сторону. 2) анимация для этого кадра, тоже самое, не получается её сделать, я и гуглил и пересмотрел 1 и 2 урок... HELP!!!
@@dimexplay6862 У меня вообще не ходил этот монстрик, пока я не сдвинул точки как у героя в первом уроке. Но зачем это нужно, я так пока и не понял. Может кто-то подскажет зачем это ... ?
error CS0246: The type or namespace name 'Player' could not be found (are you missing a using directive or an assembly reference?) (название объекта игрока не "Hero" а "Player"
Может кому поможет. У меня двигающийся враг стал правильно работать только когда я прописал -0.1f вместо 0,1f в методе Move private void Move() { Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 0.1f + transform.right * dir.x * 0.7f, -0.1f); if (colliders.Length > 0) dir *= -1f; transform.position = Vector3.MoveTowards(transform.position, transform.position + dir, Time.deltaTime); Автору спасибо
Не ну это капец.Спасибо за попытку конечно,но тут нифига не видно куда писать код(например Damage и минус жизни у игрока).В DebugLog не отображаются жизни червя и игрока.И вообще,первые два видоса были информативными ,а тут нифига.
слишком много упущений в видео. А конкретно NullReferenceException: Object reference not set to an instance of an object, о которой все пишут, Semicolon after method or accessor block is not valid, о которой тоже пишут, но не все, но я все это худо бедно исправил, обратившись к коментам, но башка окончательно выключилась, когда я присмотрелся к скрипту Worm и оказалось, что он унаследован от Entity, а не от MoneBehaviour, об этом вроде не было сказано.
У меня вообще Entity не наследуется... Монобехавор работает, а энтити, подчеркнуто, ну и как следствие ничего не работает.... В чем может быть проблема, не подскажите?
Помогите, как это решить? "hero.GetDamage()": не найден метод, пригодный для переопределения. Имя "lives" не существует в текущем контексте. Имя "lives" не существует в текущем контексте. Имя "lives" не существует в текущем контексте. Неоднозначный вызов следующих методов или свойств: "hero.GetDamage()" и "hero.GetDamage()" Assembly-Тип "hero" уже определяет член "GetDamage" с такими же типами параметров. Вот код public override void GetDamage() {
lives -= 1; Debug.Log(lives); } А это собственно сам Worm public class Worm : Entity { private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject == hero.Instance.gameObject) { hero.Instance.GetDamage(); lives--; Debug.Log("у червяка " + lives); } if (lives < 1); Die(); } } Делал все по видео
Вот проверку игрока и земли, подробней объяснил бы. а то вот тупенькому "я " не очень понятно, как именно работает... Именно откуда ты берешь числа для проверки чего-либо, если у меня другой размер спрайта, и можно ли сделать проверку сделать видимым? чтоб понять какую именно область я проверяю, И когда я иду в стенку, то перс неадекватно дергаетсяXD. я кое как сделал проверку земли. И из за того что перс дергается, как бы немного заходя в стенку, срабатывает проверка моей земли, прыжок становится доступным. Таким образом можно так сказать "паркурить". Можете объяснить плиз, как можно сделать адекватную "стену", как бы странно это не звучало)
Всё хорошо, но у меня выходила ошибка с кодом Obstacle. Даже после попытки инициализации. NullReferenceException: Object reference not set to an instance of an object Obstacle.OnCollisionEnter2D (UnityEngine.Collision2D collision) (at Assets/scripts/Obstacle.cs:9) После просмотра комментариев я понял что нужно вставить просто в классе Hero в методе Awake добавить строку Instance = this; Я додумался тестировать и наконец нашёл решение для тех у кого такая же проблэма. В итоге сейчас я сделал private void Start() { Instance = this; } - У меня всё начало работать. Так что если у кого не выходит, принимайте.
Вот рабочий код, по крайней мере у меня using System.Collections; using System.Collections.Generic; using UnityEngine; public class WalkingMonster : Entity { private float speed = 0.1f; private Vector3 dir; private SpriteRenderer sprite; private Rigidbody2D rb;
Здравствуйте! Крутые видео! Большое спасибо! Подскажите, пожалуйста, как решить мою ошибку. Делал по Вашему примеру, но при касании главного героя и монстров выходит ошибка NullReferenceException. Заранее большое спасибо!
@@zakatun9491 Ты имеешь ввиду оценки? Они не особо решают что-то. Лучше в своë свободное время изучать язык, алгоритмы, ну и конкретные технологии (unity, .net, и т.д.)
У кого проблема с движущимся врагом, вот возможные причины и варианты, которые помогли мне: Проверьте скрипт на новом объекте с базовым коллайдером (в одну клетку). Если ничего не работает, скорее всего, проблема в синтаксисе или в создании персонажа. Если у вас всё работает на базовом спрайте (в одну клетку), тогда, скорее всего, проблема в размере коллайдера. Чтобы проверить, в чём заключается проблема, предлагаю добавить в код метод OnDrawGizmos, который создаёт сферу. Это поможет визуально понять, где находится OverlapCircleAll: csharp Копировать код private void OnDrawGizmos() { // Цвет круга Gizmos.color = Color.red; // Позиция центра круга, где 0.1f - вертикальная позиция, а 1.3f - горизонтальная позиция круга Vector3 circleCenter = transform.position + transform.up * 0.1f + transform.right * direction.x * 1.3f; // Радиус круга float circleRadius = 0.1f; // Сам метод, который рисует круг Gizmos.DrawWireSphere(circleCenter, circleRadius); } Учтите, высота должна быть на одном уровне с препятствием по вертикали, а горизонтальная позиция должна выходить за зону хитбокса спрайта, то есть за границы коллайдера. Если это не поможет исправить проблему, то хотя бы поможет визуально понять, в чём дело! Если что-то не так, поправьте в комментариях.
Извини, но ты не правильно сделал колышек. Он не работает. Если что это не моя ошибка так как я 10 раз всё проверял по буквам. И всё из-за того что скрипт obstacle не знает кто такой hero хотя ты и сказал что после добавления одной строчки он всё будет знать
а всё нашел в чем дело, в 3:09 говорит "унаследовать класс сущности", то есть Entity. В коде это выглядет следующим образом public class Hero : Entity вписываешь в пятой строке
@@mirastulebayev6058Что делать если пишет ошибку: error CS0246: The type or namespace name 'Entity' could not be found (are you missing a using directive or an assembly reference?) Это в части ролика про ИИ врага
Базовый метод проверки Colission имеет проблмеу. Персонажу нанесется урон если он подбежит к врагу, но если он будет стоять у врага то урона не будет, как реализовать нанесение урона главному герою каждые n секунд как он стоит рядом с врагом, например? Буду очень благодарен
Всем привет! Может,кто еще живой и может подсказать, как это исправить: Assets\Scripts\Obstacle.cs(6,5): error CS8803: Top-level statements must precede namespace and type declarations. Assets\Scripts\Obstacle.cs(6,5): error CS0106: The modifier 'private' is not valid for this item Делала все абсолютно по инструкции, бесит уже.
Та же проблема сделал скрипт для деревяшки и при косании персонажа к ней выдает ошыбку NullReferenceException: Object reference not set to an instance of an object
@Atlass Dev Привет! У меня почему-то не работает двигающийся монстр и к тому же пропал червяк куда-то (на сцене я его вижу, но когда игру запуская он исчезает) *Также я не добавлял override тк у меня сразу выдавало ошибку*
что делать если вылезает ошибка: Assets\Scripts\Scripts\Slizar.cs(14,27): error CS1061: 'Hero' does not contain a definition for 'GetObject' and no accessible extension method 'GetObject' accepting a first argument of type 'Hero' could be found (are you missing a using directive or an assembly reference?) Помогите пж((
Здраствуйте, проблема с двигающимся врагом, сделал всё как в видео, но враг почти не двигается, то есть он движется буквально на 0.1 из стороны в сторону, в чём может быть проблема?
@@Артемдру-п5ш А зачем его прикреплять? Мы просто наследуем класс entity в скрипте Hero. Методам класса entity добавляем модификатор virtual, чтобы в дочерних классах их переназначить. Ну а уже в Hero мы переназначаем метод GetDamage при помощи модификатора override
Atlass Dev помоги, почему у меня враг который двигается, не меняет свое направление на противоположное? Типо он просто идет прямо, сделал как на видео и не получилось... вот строчки кода: private void Move() { Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 0.1f + transform.right * dir.x * 0.7f, 0.1f); if (colliders.Length > 0) dir *= -1f; transform.position = Vector3.MoveTowards(transform.position, transform.position + dir, Time.deltaTime); } вроде ты говорил что вот этот метод должен заставить Hero поменять направление.
NullReferenceException: Object reference not set to an instance of an object
enemy.OnCollisionEnter2D (UnityEngine.Collision2D collision) (at Assets/scripts/enemy.cs:9)
Если у вас выходит такая ошибка, тогда нужно в классе Hero, в методе Awake добавить строчку Instance = this;
Да-да, забыл в видео инициализацию показать
@@atlassdev2481 на самом деле это круто что не показал, что бы мы тоже включали мозги а не только под все готовенькое. Это очень полезно.
@@culon4775 Здесь лучше было показать, ибо сам паттерн мы вообще вскользь затронули. Я бы сам, честно, не догадался бы, что его и инициализировать ещё надо)
спасибо бодьшое
@@blackriver243 ой как приятно и неожиданно
Первая тысяча, так держать. Продолжай делать видео. Хочу что бы у тебя появилась монетизация на канале, что бы тебе самому нравилось выпускать ролики и уроки по Unity. Спасибо тебе)
ВООБЩЕТО 7К
За 6 месяцев 10к набрал? Нифига...
пацаны уже 22к
Умоляю, ответь, что значит "переназначить метод GetDamage" ? Умоляю
Ура !Новое видео, ждал с нетерпением. Желаю удачи в росте канала!
Это уроок уже с подвохом. В конце придется самому закрепить материал и сделать анимацию для ходячего мостра. Автор молодец, недописал в код ровно то, что уже посилам сделать самому. Все получилось, спасибо.
ЗАЗАЗА,ГЕНИЙ. просто поленился,он все делает на отцепись
Было бы все шикарно если бы показывал полностью код. А так все чётко и понятно. Коды где то можно взять?
тут код приближен
Коды в описании
@@raymaxay нету
На самом деле это больше плюс, чем минус
Поздравляю с тысячей, продолжай в том же духе!
Уже тысяча? Поздравляю! Ощущение что недавно нашёл твой аккаунт с 40 с чем-то подписчиков😁
(я самый проблемный подписчик, вечно какие-то ошибки и баги были🤣)
не ты один))))))))
Решил задачу как сделать чтобы враг смотрел по направлению движения, полный код в конце комментария. Вообще очень рекомендую когда у вас возникает проблема с компилятором, ошибками и тд, не поленитесь пересмотреть еще раз ролик, свой код, и обязательно глянуть в гугл. Порой бывает полезно подумать что вы уже где то реализовали функционал разворота на примере Hero, то надо подумать как это сделать для Walking monster. Первое на ум приходит просто скопировать строчку "sprite.flipX = direction.x > 0.0f;" но не помогло, если не использовать штуку под названием Awake. В итоге простым обдумыванием решение лежащее на поверхности, было реализовано для врага.
Вот полный листинг:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WalkingMonster : Entity
{
private float speed = 1.5f;
private Vector3 direction;
private SpriteRenderer sprite;
private void Awake()
{
sprite = GetComponentInChildren();
}
private void Start()
{
direction = transform.right;
}
private void Move()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 0.1f + transform.right * direction.x * 0.7f, 0.1f);
if (colliders.Length > 0) direction *= -1f;
transform.position = Vector3.MoveTowards(transform.position, transform.position + direction, Time.deltaTime);
sprite.flipX = direction.x > 0.0f;
}
private void Update()
{
Move();
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject == Hero.Instance.gameObject)
{
Hero.Instance.GetDamage();
}
}
}
он у меня идет только в одну сторону(он поворачивается в другую сторону и сразу обратно, а стены там нет), что делать?
@@tagir2496 внимательно проверить код? Или скопировать на худой конец, этот точно рабочий)
Умоляю, ответь, что значит "переназначить метод GetDamage" ? Умоляю
Для тех кто столкнулся с такой проблемой: движущийся враг впирается в одну стену или дергаётся на месте туда сюда.
Я сам столкнулся с такой проблемой и вот что мне помогло
1) Нужно сверить код, именно такой вариант кода запустился у меня:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WalkingMonster : Entity
{
private float speed = 0.5f;
private Vector3 direction;
private SpriteRenderer sprite;
private void Awake() // Метод, который вызывается при создании объекта
{
sprite = GetComponentInChildren(); // Присваивает переменной sprite компонент SpriteRenderer, который находится в дочернем объекте
}
private void Start() // Метод, который вызывается при запуске сцены
{
direction = transform.right; // Присваивает переменной direction значение вектора, указывающего вправо относительно объекта
}
private void Move() // Метод, который отвечает за перемещение врага
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 0.1f + transform.right * direction.x * 0.7f, 0.1f); // Создает массив colliders и заполняет его всеми коллайдерами, которые пересекаются с кругом заданного радиуса и центра. Центр круга находится немного выше и впереди относительно объекта.
if (colliders.Length > 0) direction *= -1f; // Если массив colliders не пустой, то меняет направление врага на противоположное
transform.Translate(direction * speed * Time.deltaTime); // Перемещает объект на заданное расстояние в заданном направлении с учетом скорости и времени кадра
sprite.flipX = direction.x > 0.0f; // Отражает спрайт по горизонтали в зависимости от направления
}
private void Update() // Метод, который вызывается каждый кадр
{
Move(); // Вызывает метод Move
}
private void OnCollisionEnter2D(Collision2D collision) // Метод, который вызывается при столкновении с другим коллайдером
{
if (collision.gameObject == Hero.Instance.gameObject) // Если объект столкновения является героем
{
Hero.Instance.GetDamage(); // Вызывает метод GetDamage у героя
}
}
}
Если вы его вставите и у вас почему то не заработает, то предлагаю сделать следующее: расставьте стенки подальше друг от друга
Так же можете поиграться со значением 0.7, подогнать под себя.
Подобные манипуляции по идее должны вам помочь. Конкретно мне они помогли. Так же не забывайте про перезапуск юнити, это на самом деле тоже может решить некоторые проблемы. Надею это кому нибудь поможет
Умоляю, ответь, что значит "переназначить метод GetDamage" ? Умоляю
@@Илья-ж7м6ч не совсем понял, это типо проблема с которой ты столкнулся или что? У меня просто про переназначения ни слова нет
@@dmitriykuzminlvm34 на 3:10 говорят, и я не понимаю, что нужно сделать, тоесть присвоеть класс Entity, это значит вместо монобиваур написать Entity, а про GetDamage я не понял
@@Илья-ж7м6ч
Наследование класса - это способ создать новый класс, который получает все свойства и методы от другого класса (базового класса).
Переопределение метода - это способ изменить поведение метода в дочернем классе, сохранив при этом возможность использовать базовую функциональность.
Таким образом, унаследование класса Entity позволяет Hero использовать общую функциональность, а также добавлять или изменять её по мере необходимости.
Мы в Entity методу GetDamage присваиваем модификатор virtual, именно он позволяет в дочерних классах переназначить метод, используем это т.к. все сущности разные.
С помощью virtual мы позволяем переназначить метод в дочерних классах (у героя у монстров)
То есть это как глобальная заготовка для сущностей (герой и монстры).
Именно поэтому в классе Hero мы в методе GetDamage дописываем модификатор override, тем самым переназначая метод, то есть меняя его конкретно для класса Hero
То есть глобально существует метод GetDamage в Entity (который наследуют), но для каждого класса мы GetDamage меняем соответствующе, если это требуется. У каждой сущности будет разное получение урона
Просто повтори код в видео и всё должно работать
все работает при значении 0.9, однако это достаточно много, монстр разворачивается задолго до столкновения со стенкой. Нет ли способа как то решить эту проблему. Подойдут даже самые конченные костыли
О, враги это круто. Нужно только сделать атаку, чтобы их дубасить можно было😄
Умоляю, ответь, что значит "переназначить метод GetDamage" ? Умоляю
@@Илья-ж7м6ч Это значит переопределить его в классе, который наследуется от базового класса, где этот метод был определён. То есть написать
"public override void GetDamage()"
и унаследовать весь класс Hero от Entity
"public class Hero : Entity"
Очень полезный урок, был бы если бы автор объяснял то что делает
включай голову и делай сам, это задумка автора)
3 тысячи. Поздравляю! Третий урок уже посложнее. Спасибо за труд
кстати, если у объекта разное количество полигонов, то коллайдер2Д можно выбирать в зависимоси от формы обьекта, чтобы не бегать по "невидимым стенам"
например у пенька я использовал Polygon Collider 2D, а у червя Capsule Collider 2D, потратил пару секунд на замену, но зато ощутимо приятнее стало)
еще возник вопрос, как то можно анимировать коллайдер под анимацию обьекта? потому что когда червь в сжимается вниз - стенки его коллайдера остаются неподвижными ведь
Помогите решить проблему:
NullReferenceException: Object reference not set to an instance of an object
Worm.OnCollisionEnter2D (UnityEngine.Collision2D collision) (at Assets/Scripts/Worm.cs:9)
Такое же с Wood
Код такой же
Попробуй в скрипте Hero, в методе Awake добавить строчку: Instance = this; Я почему-то забыл еë в видео показать
@@atlassdev2481 Спасибо,теперь заработало
@@atlassdev2481 Хорошо было бы закреплять такие моменты в комментариях, чтобы не искать решение проблемы по 10 минут. (Просто совет)
@@atlassdev2481привет, объясни за что отвечает эта строчка.
Увидел что для многих проблема развернуть спрайт при движении в другую сторону.
В файле с вашим монстром добавьте такие строчки:
private void Awake()
{
sprite = GetComponentInChildren();
}
перед private void Start()
и в Move() вставьте строчку:
sprite.flipX = dir.x < 0.0f;
Что значит перед "... Start", перед это куда???
@@НиколайДомнин-м5я private void Awake()
{
sr = GetComponent();
}
private void Start()
{
dir = transform.right;
lives = 3;
}
вроде так
Очень крутая игра. У тебя всё просто и понятно. Спасибо за видео)
спасибо за информативность в видео, вот бы все так делали
Круто. Спасибо Бро.
Норм, но с последним мобом проблема: двигается на пару пикселей туда и назад, хотя препядствий рядом никаких нет, и двигается со скоростью улитки, ты никуда переменную скорости не применил, хотя и создал. Такое ощущение, что моб коллайдиься с землей и не может определится в какую сторону идти
Edit: поставила отзеркаливание текстуры при смене направления, и все стало ясно - бокс коллайдится с землей и моб 25 раз в секунду меняет направление
У меня такая же проблема сейчас, как ты её решила?
а как исправить?
private Vector3 overlapCirclePosition;
private float overlapCircleRadius = 0.1f;
private void Move() {
overlapCirclePosition = transform.position + transform.up * 0.5f + transform.right * direction.x * 0.7f;
Collider2D[] colliders = Physics2D.OverlapCircleAll(overlapCirclePosition, overlapCircleRadius);
if (colliders.Length > 0) {
if (colliders[0].gameObject != Hero.Instance.gameObject) {
direction *= -1f;
}
}
transform.position = Vector3.MoveTowards(transform.position, transform.position + direction, speed * Time.deltaTime);
spriteRenderer.flipX = direction.x >= 0.0f;
}
private void OnDrawGizmos() {
Gizmos.color = Color.red;
Gizmos.DrawSphere(overlapCirclePosition, overlapCircleRadius);
}
а уже 21 тысяча)
Вопрос: зачем для игрока/платформы/врага создавать пустой объект, а потом крепить ему дочерний спрайт? Если создать сразу объект игрока спрайтом, и на него же вешать коллайдер и RigidBody, то реализация в общем не меняется, так даже проще. P.S: один из наиболее понятных курсов для игродела с опытом в 3 дня, спасибо!
Синглтон - это же объект, который может существовать в единственном экземпляре на сцене, а не возможность класса вернуть самого себя
Почему ты не показываешь в конце полностью код?
Не обязан
@@G33ZX обязан
Ошибка Assets\Scripts\Obstacle.cs(11,18): error CS0117: 'Hero' does not contain a definition for 'Instanse'
Я добавил override и у меня ошибка выскочила что делать?
Ошибка CS0115 "Hero.GetDamage()": не найден метод, пригодный для переопределения.
У меня та же проблема
Хороший ролик. Сяпиба!
Если у кого-то не ходит подвижный монстр, там в условии надо поставить Length>1 вместо Length>0
И еще надо в MoveTowards в последнем аргументе Time.deltaTime умножить на speed
Дай Бог тебе здоровья!
Если у кого-то не определяется класс Entity, то вам нужно создать отдельный скрипт с этим классом.
Дальше если не работает override в скрипте Hero, то вам наверху нужно поменять наследование public class Hero : Entity
А как создать скрипт в этим классом?
@bahamen1009 спасибо тебе добрый человек!😊
Лайк👍👍👍👍👍 очень круто
А я подписан с 180-190 подписчиков)
отлично, очень хорошо объясняешь, всё понятно
... piZDABOL
Я пол часа разбираю одно видео , так как я новичок .
Автор будь добр понятней объясняй , весь день потратил на твои видео а в итоги одни ошибки, хоть я и делаю точь в точь!
Видимо не делаешь точь в точь.
Так это единственно верный способ обучения. Делаешь ошибки, читаешь, ищешь решения, исправляешь, растёшь.
Я с этим полностью согласен
Можно пж работающий код на последнего врага он у меня упирается в правую стенку и не поворачивается :(
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : Entity
{
private float speed = 3f;
private Vector3 dir;
private SpriteRenderer sprite;
private void Start()
{
dir = transform.right;
}
private void Update()
{
Move();
}
private void Move()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 0.1f + transform.right * dir.x * 0.7f, 0.1f);
if (colliders.Length > 0) dir *= -1;
{
transform.position = Vector3.MoveTowards(transform.position, transform.position + dir, Time.deltaTime);
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject == Sonic.Instance.gameObject)
{
Sonic.Instance.GetDamage();
}
}
}
@@axtung5238 Спасибо
Спасибо за такой качественный контент 🤩
А ты будешь добавлять стрельбу чтобы убивать этих монстров (2д шутер, будет прикольно)
Создаем "без override"
Слово оверрайд остаётся 🤷♂️
У меня какой то баг с этим override если его убрать то 3 ошибки, а если оставить то 1. Подскажи, пожалуйста как это испраить.
@@ВасилийТипа-ы1ц нашел ответ на проблему?просто я не могу в скрипте для ловушки использовать Hero из-за того,что он защищен
@@ВасилийТипа-ы1ц пофиксил?
@@ВасилийТипа-ы1ц невозможно переопределить метод getdamage
Спасибо большое за ролики, скажи, вот будет толк если я сделаю по гайду всю игру и буду её разбирать? Или своё что-то делать и так проще? C# я учил по SimpleCode, дошел до классов. Это вот все мои знания.
Пожалуйста, подскажи. В твоём курсе уже было показано как сделать адекватное передвижение? И как долго ты программируешь?
Передвижение добавляли в первой части. Серьезно заниматься программированием начал около 7-8 месяцев назад
Assets/Scenes/HERO/Hero.cs(58,26): error CS0115: 'Hero.GetDamage()': no suitable method found to override
ну что у меня тоже самое
Спасибо за видео!, Потихоньку осваиваю :))
Да, появился небольшой вопрос, а вот эти земляные блоки (Ground), их как-то можно поворачивать? Так чтобы они были под углом, создавая небольшой подъем или спуск ? Получается так, что бы сам колаидер был под углом
Ну есть такая штука Rotation ( с англ. поворот ). берёшь объект, к примеру то же самый блок земли, и вписываешь значение в параметр rotation по оси Z. Если есть дети у этого объекта, то они тоже будут поворачиваться вслед.
@@НикитаРябухин-ю4о Спасибо большое !!!
1:47 У меня вылезает ошибка что не поставил точку с запятой, а когда ставлю вылезают другие ошибки. Можете скинуть код я разберусь что не так
Хорошие видео всё доступно, но ты не рассказываешь о нюансах. Более чем уверен, что многие столкнулись с проблемой, что не камера движется за персонажем, а наоборот ( со 2-й части видео). Например, расскажи почему ты на препятствие сделал ( kinematic ) Rigidbody. А так ролики достойные. Но так же показуй плз фичи по сложней
Помогите пожалуйста у меня такая ошибка
Can't add script component 'Walking Monster'
У меня тож такая ж проблема CS1026:
CC1513:
всё хорошо, НО! С последним мобом(тот что патрулирует) проблемы: 1) не хочет разворачиваться, как ни крути, что я только не делал... Смотрит в одну сторону. 2) анимация для этого кадра, тоже самое, не получается её сделать, я и гуглил и пересмотрел 1 и 2 урок... HELP!!!
Кто-нибудь решил эту проблему?
@@dimexplay6862 У меня вообще не ходил этот монстрик, пока я не сдвинул точки как у героя в первом уроке. Но зачем это нужно, я так пока и не понял. Может кто-то подскажет зачем это ... ?
@@TheAniKmax проверяется метод isGrounded, на котором завязаны как анимации, так и паттерны движения
по крайней мере, частично
error CS0246: The type or namespace name 'Player' could not be found (are you missing a using directive or an assembly reference?) (название объекта игрока не "Hero" а "Player"
Он проверяет название класса в скрипте
что делать если ходящий монстр идет только в одну сторону, ударяется о стену и поворачивается
скинь свой код
Может кому поможет. У меня двигающийся враг стал правильно работать только когда я прописал -0.1f вместо 0,1f в методе Move
private void Move()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 0.1f + transform.right * dir.x * 0.7f, -0.1f);
if (colliders.Length > 0) dir *= -1f;
transform.position = Vector3.MoveTowards(transform.position, transform.position + dir, Time.deltaTime);
Автору спасибо
Genius! Genius! Genius!
спасибо большое бро помог
Не ну это капец.Спасибо за попытку конечно,но тут нифига не видно куда писать код(например Damage и минус жизни у игрока).В DebugLog не отображаются жизни червя и игрока.И вообще,первые два видоса были информативными ,а тут нифига.
слишком много упущений в видео. А конкретно NullReferenceException: Object reference not set to an instance of an object, о которой все пишут, Semicolon after method or accessor block is not valid, о которой тоже пишут, но не все, но я все это худо бедно исправил, обратившись к коментам, но башка окончательно выключилась, когда я присмотрелся к скрипту Worm и оказалось, что он унаследован от Entity, а не от MoneBehaviour, об этом вроде не было сказано.
Мне кажется, что тебе стоит писать скрипт синхронно с записью видео, а не показывать написанное, так будет меньше шансов что-то упустить
У меня вообще Entity не наследуется... Монобехавор работает, а энтити, подчеркнуто, ну и как следствие ничего не работает.... В чем может быть проблема, не подскажите?
Закрытый элемент "Snake.OnCollisionEnter2D" не используется.IDE0051 как это исправить? червь просто не умирает.
Круто! Где научился так программировать (не просто циклы да условия, а синглтоны, оверрайды)?
если вдруг у кого то червь пропадает под слоями, то в спрайте червя измените пункт "Order in Layer" с нуля на 1 и он встанет на первый план
Помогите, как это решить?
"hero.GetDamage()": не найден метод, пригодный для переопределения.
Имя "lives" не существует в текущем контексте.
Имя "lives" не существует в текущем контексте.
Имя "lives" не существует в текущем контексте.
Неоднозначный вызов следующих методов или свойств: "hero.GetDamage()" и "hero.GetDamage()" Assembly-Тип "hero" уже определяет член "GetDamage" с такими же типами параметров.
Вот код
public override void GetDamage()
{
lives -= 1;
Debug.Log(lives);
}
А это собственно сам Worm
public class Worm : Entity
{
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject == hero.Instance.gameObject)
{
hero.Instance.GetDamage();
lives--;
Debug.Log("у червяка " + lives);
}
if (lives < 1);
Die();
}
}
Делал все по видео
public void GetDamage() нужно писать в скрипте Hero
Вот проверку игрока и земли, подробней объяснил бы. а то вот тупенькому "я " не очень понятно, как именно работает...
Именно откуда ты берешь числа для проверки чего-либо, если у меня другой размер спрайта, и можно ли сделать проверку сделать видимым? чтоб понять какую именно область я проверяю,
И когда я иду в стенку, то перс неадекватно дергаетсяXD. я кое как сделал проверку земли.
И из за того что перс дергается, как бы немного заходя в стенку, срабатывает проверка моей земли, прыжок становится доступным.
Таким образом можно так сказать "паркурить".
Можете объяснить плиз, как можно сделать адекватную "стену", как бы странно это не звучало)
Красава
У кого на месте вертится 'монстер', просто попробуйте размер его уменьшить ( самой модели, SCALE 1;1;1 на 0.5;0.5;0.5)
@afaditrus заблокировать это как
Cпасибо!!!
gпоследний монстр не движется в другую сторону при столкновении( подскажите, как исправить пожалуйста
Та же проблема.. Нашли решение???
Всё хорошо, но у меня выходила ошибка с кодом Obstacle. Даже после попытки инициализации.
NullReferenceException: Object reference not set to an instance of an object
Obstacle.OnCollisionEnter2D (UnityEngine.Collision2D collision) (at Assets/scripts/Obstacle.cs:9)
После просмотра комментариев я понял что нужно вставить просто в классе Hero в методе Awake добавить строку Instance = this;
Я додумался тестировать и наконец нашёл решение для тех у кого такая же проблэма.
В итоге сейчас я сделал private void Start() { Instance = this; } - У меня всё начало работать. Так что если у кого не выходит, принимайте.
Спасибо что помог!
Вот рабочий код, по крайней мере у меня
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WalkingMonster : Entity
{
private float speed = 0.1f;
private Vector3 dir;
private SpriteRenderer sprite;
private Rigidbody2D rb;
private void Awake()
{
sprite = GetComponentInChildren();
}
private void Start()
{
dir = transform.right;
}
private void Update()
{
Move();
}
private void Move()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 0.1f + transform.right * dir.x * 0.7f, 0.1f);
if (colliders.Length > 0) dir *= -1;
transform.position = Vector3.MoveTowards(transform.position, transform.position + dir, Time.deltaTime);
sprite.flipX = dir.x > 0.0f;
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject == player.Instance.gameObject)
{
player.Instance.GetDamage();
}
}
}
Спасибо большое, всю голову сломал с этим разворотом.
куда сам код Entity добавлять?
А можно пожалуйста полный скрипт
Как не пробовал, повернуть монстра не получается Движущегося. и видео 1 пересмотрел.
Объясняешь лучше чем Дударь
уже 2k чувак))
Здравствуйте! Крутые видео! Большое спасибо! Подскажите, пожалуйста, как решить мою ошибку. Делал по Вашему примеру, но при касании главного героя и монстров выходит ошибка NullReferenceException. Заранее большое спасибо!
Привет , помоги пожалуйста , строка GetDamage подчеркивается красным (При добавлении уже возможности смерти червяка) . Как переназначить GetDamage
вместо MonoBehaviour ставишь Entity
продвигаю видео
А ответь пажалуйста
Если ты учился на программиста
Вот если ты учился то там хорошо с практикой научат ?
Если ты про универ, то я пока что на 1 курсе, тут ещë никакой практики не было. А на всяких курсах и т.п. никогда не учился
@@atlassdev2481 а в школе как надо учится чтоб на программиста идти?
@@zakatun9491 Ты имеешь ввиду оценки? Они не особо решают что-то. Лучше в своë свободное время изучать язык, алгоритмы, ну и конкретные технологии (unity, .net, и т.д.)
@@atlassdev2481 спасибо ты очень меня выручаешь ( в плане вопросов )
Здравствуйте, такую игру можно интегрировать в телеграм бота с играми?
Привет чувак видео огонь давно хотел такого видео ото в игре скучно без врагов
Точно подписка
у кого в скрипте неподвижного врага метод Die не работает то просто измените сыллку с MonoBehaivor на Entity
Спасибо большое
Тоже станно в скрипте Hero пишу public override GetDamage. а он мне ошибку возвращает. С чем это может быть связанно?
Override там не нужен
Он будет нужен в будущем как он и сказал писать без него пока что
Оверайд удали
3:09 - што ето значит ??? Подскажите пожалуста
Помогите error cs1061 'Hero' does not contain a definition for 'GetDamage' and no accessible extension metod 'GetDamage'
Это я половину написал
@Atlass Dev помоги пожалуйста у меня подвижный монстр просто идет в одну сторону и не разворачивается
Та же проблема, нашли решение?
У кого проблема с движущимся врагом, вот возможные причины и варианты, которые помогли мне:
Проверьте скрипт на новом объекте с базовым коллайдером (в одну клетку). Если ничего не работает, скорее всего, проблема в синтаксисе или в создании персонажа.
Если у вас всё работает на базовом спрайте (в одну клетку), тогда, скорее всего, проблема в размере коллайдера. Чтобы проверить, в чём заключается проблема, предлагаю добавить в код метод OnDrawGizmos, который создаёт сферу. Это поможет визуально понять, где находится OverlapCircleAll:
csharp
Копировать код
private void OnDrawGizmos()
{
// Цвет круга
Gizmos.color = Color.red;
// Позиция центра круга, где 0.1f - вертикальная позиция, а 1.3f - горизонтальная позиция круга
Vector3 circleCenter = transform.position + transform.up * 0.1f + transform.right * direction.x * 1.3f;
// Радиус круга
float circleRadius = 0.1f;
// Сам метод, который рисует круг
Gizmos.DrawWireSphere(circleCenter, circleRadius);
}
Учтите, высота должна быть на одном уровне с препятствием по вертикали, а горизонтальная позиция должна выходить за зону хитбокса спрайта, то есть за границы коллайдера. Если это не поможет исправить проблему, то хотя бы поможет визуально понять, в чём дело!
Если что-то не так, поправьте в комментариях.
оТЛИЧНО!
Вам нехватает
void Awake()
{
if (Instance == null)
{
Instance = this;
}
}
Извини, но ты не правильно сделал колышек. Он не работает. Если что это не моя ошибка так как я 10 раз всё проверял по буквам. И всё из-за того что скрипт obstacle не знает кто такой hero хотя ты и сказал что после добавления одной строчки он всё будет знать
Это у тебя ошибка, у меня всё работает кроме того движущегося монстра, просто он не показал код как его флипать вот когда я пытаюсь игра не работает
ну я не пойму всё норм это ходячий монстер идёт но он не разворачивается и не идёт обратно почему??
Здравствуйте я вас нашёл в телеге как можно с вами связаться ? Нужен программист очень !!
Помогите решить проблему: Hero.cs(66,26): error CS0115: 'Hero.GetDamage()': no suitable method found to override
тоже
а всё нашел в чем дело, в 3:09 говорит "унаследовать класс сущности", то есть Entity. В коде это выглядет следующим образом
public class Hero : Entity
вписываешь в пятой строке
@@mirastulebayev6058 я нашел потом как решить но у меня произошла другая проблема уже в зоне когда перс падает должен умереть
@@mirastulebayev6058Что делать если пишет ошибку: error CS0246: The type or namespace name 'Entity' could not be found (are you missing a using directive or an assembly reference?) Это в части ролика про ИИ врага
@@OnlyPos1tiveкак ты решил предыдущую ошибку там где hero get damage no suitable скажи пж
Ты не задействуешь speed
[SerializeField] private float speed = 1f; для редактирования вивел
private void Move()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 0.1f + transform.right * dir.x * 0.7f, 0.1f);
if(colliders.Length > 0) dir *= -1f;
transform.position = Vector3.MoveTowards(transform.position, transform.position + dir, speed * Time.deltaTime);
}
Добавил speed * Time.deltaTime
Здесь спид не нужен, так как это переменная скорости игрока, а не монстра
CS0115 GetDamage()": не найден метод, пригодный для переопределения.
Базовый метод проверки Colission имеет проблмеу. Персонажу нанесется урон если он подбежит к врагу, но если он будет стоять у врага то урона не будет, как реализовать нанесение урона главному герою каждые n секунд как он стоит рядом с врагом, например? Буду очень благодарен
OnCollisionStay если еще актуально
@@firemon7791 c этого места поподробнее
а можешь показать как сделать под андроид?
он говорил что в конце будет под андроид делать
@@looolz6549 а окей
Кто может скинуть скрипты? У меня выскакивают ошибки. Препятствие не наносит урон игроку.
решил проблему?
Здравствуй, у меня вопрос возник.
Куда привязывать класс сущности? Не понятно немного.
Где MonoBehoveriy нужно заменять на Enity
Кто решил проблему с WalkingMonster(не движется назад)?
премного благодарен
Всем привет!
Может,кто еще живой и может подсказать, как это исправить:
Assets\Scripts\Obstacle.cs(6,5): error CS8803: Top-level statements must precede namespace and type declarations.
Assets\Scripts\Obstacle.cs(6,5): error CS0106: The modifier 'private' is not valid for this item
Делала все абсолютно по инструкции, бесит уже.
такова работа разраба, тебе придется работать с хуевым кодом и искать как исправить ошибки (а как исправить я сам хз)) )
Один вопрос почему ошибка компилятора хоть всё по видео
А в чëм именно ошибка?
Та же проблема сделал скрипт для деревяшки и при косании персонажа к ней выдает ошыбку NullReferenceException: Object reference not set to an instance of an object
@@s_t_a_n_i_s_l_a_v1351 Смотри, тут моя ошибочка. Всё, что нужно сделать - в методе Awake инициализировать синглтон: Instance = this;
@@atlassdev2481 CS0103: the name “Hero” does not exist in the current context
У меня проблема: когда монстр сталкивается с персонажем то персонаж не получает урона
хэлп:
Имя "Die" не существует в текущем контексте
и
"Hero.GetDamage()": не найден метод, пригодный для переопределения.
что с этим делать?
@Atlass Dev Привет! У меня почему-то не работает двигающийся монстр и к тому же пропал червяк куда-то (на сцене я его вижу, но когда игру запуская он исчезает) *Также я не добавлял override тк у меня сразу выдавало ошибку*
разобрался?)
@@bananchikyes7316 проверь позицию червяка - он может иметь позицию по оси z дальше камеры и она его не видит.
что делать если вылезает ошибка:
Assets\Scripts\Scripts\Slizar.cs(14,27): error CS1061: 'Hero' does not contain a definition for 'GetObject' and no accessible extension method 'GetObject' accepting a first argument of type 'Hero' could be found (are you missing a using directive or an assembly reference?)
Помогите пж((
1:48 а это в каком скрипте obstacle или Hero?
Здраствуйте, проблема с двигающимся врагом, сделал всё как в видео, но враг почти не двигается, то есть он движется буквально на 0.1 из стороны в сторону, в чём может быть проблема?
Друг, решил проблему?
@@kotya7892 К сожалению нет
@@Nyrzak Я решил, вот отрезок моего кода
private void Move()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 1f + transform.right * dir.x * 0.7f, 0.1f);
if (colliders.Length > 0) dir *= -1f;
transform.position = Vector3.MoveTowards(transform.position, transform.position + dir, Time.deltaTime);
}
@@kotya7892 Я решил, вот отрезок моего кода
private void Move()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 1f + transform.right * dir.x * 0.7f, 0.1f);
if (colliders.Length > 0) dir *= -1f;
transform.position = Vector3.MoveTowards(transform.position, transform.position + dir, Time.deltaTime);
}
@@Vladakrut благодарю
Помогите плиз, вот такая ошибка
Assets\Materials\Skripts\Hero.cs(51,26): error CS0115: 'Hero.GetDamage()': no suitable method found to override
А в скрипте сущностей к методу GetDamage написал модификатор virtual?
@@atlassdev2481 не дает прикрепить скрипт entity, просит сначала пофиксить ошибку
@@Артемдру-п5ш А зачем его прикреплять? Мы просто наследуем класс entity в скрипте Hero. Методам класса entity добавляем модификатор virtual, чтобы в дочерних классах их переназначить. Ну а уже в Hero мы переназначаем метод GetDamage при помощи модификатора override
@@atlassdev2481 по итогу убрал слово override и все заработало. Это будет проблемой в будущем?
@@Артемдру-п5ш просто измени ' public class Hero : MonoBehaviour ' на ' public class Hero : Entity '
У меня пенек урон не наносит, уже 3 часа пытаюсь понять что не так
Помогите пж
Я решил, я забыл код на пень добавить, капец тупой
так же
вот не понимаю почему
Кинь скрипи на пенек наново !!
У меня заработало
@@Felix-nj2fr а можешь скрипт кинуть на пенек. вроде все ок, но не работает
кинул скрипт не на пенек , а на картинку
пипец 30 минут потерял
Atlass Dev помоги, почему у меня враг который двигается, не меняет свое направление на противоположное? Типо он просто идет прямо, сделал как на видео и не получилось... вот строчки кода: private void Move()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 0.1f + transform.right * dir.x * 0.7f, 0.1f);
if (colliders.Length > 0) dir *= -1f;
transform.position = Vector3.MoveTowards(transform.position, transform.position + dir, Time.deltaTime);
}
вроде ты говорил что вот этот метод должен заставить Hero поменять направление.
Исправил?
решил проблему?
а че движущийся монстр не убиваем?