Задать вопрос
@Omidomaru41

Как исправить ошибки CS0117 и CS0122?

По туториалу собираю Tower Defence на Unity для себя и на моменте создания скрипта для башен получаю ошибки CS0117 и CS0122.
Туториал супер наглядный, там просто пишется код и дополнительно объясняется что к чему.
По итогу его написания у человека все работает, у меня ошибки.
Дословно выглядят они так:

1) Assets\Scripts\Tower.cs(26,41): error CS0117: 'Enemies' does not contain a definition for 'enemies'

2) Assets\Scripts\Tower.cs(51,21): error CS0122: 'Enemy.takeDamage(float)' is inaccessible due to its protection level

Сам Код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Tower : MonoBehaviour
{
   [SerializeField] private float range;
   [SerializeField] private float damage;
   [SerializeField] private float timeBetweenShots; // Time in seconds between shots

    private float nextTimeToShoot;

    private GameObject currentTarget;

    private void Start()
    {
        nextTimeToShoot = Time.time;
    }

    private void updateNearestEnemy()
    {
    GameObject currentNearestEnemy = null;

    float distance = Mathf.Infinity;

    foreach(GameObject enemy in Enemies.enemies)
        {
            float _distance = (transform.position - enemy.transform.position).magnitude;

            if (_distance < distance)
            {
                distance = _distance;
                currentNearestEnemy = enemy;
            }
        }

    if (distance <= range)
        {
            currentTarget = currentNearestEnemy;
        }
    else
        {
            currentTarget = null;
        }
    }

    private void shoot()
    {
        Enemy enemyScript = currentTarget.GetComponent<Enemy>();

        enemyScript.takeDamage(damage);
    }

    private void Update()
    {
        updateNearestEnemy();

        if (Time.time >= nextTimeToShoot)
        {
            if (currentTarget != null)
            {
                shoot();
                nextTimeToShoot = Time.time + timeBetweenShots;
            }
        }
    }
}
  • Вопрос задан
  • 900 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
1 - у тебя в классе Enemies нет члена enemies. Возможно его нет совсем, а возможно у тебя опечатка.
2 - у тебя в классе Enemy есть метод takeDamage, но он не публичный

PS: На будущее:
- отмечай комментарием, на какой именно строке сработала ошибка
- не забывай заворачивать код в тег <code lang="cs"></code> - это сильно упростит чтение для тех, кто попробует решить твой вопрос
- перед тем как задавать вопрос - попробуй загуглить в чём суть ошибки, и попробуй сам решить (CS0117, CS0122)
- перед тем как начинать писать на юнити, лучше всё-таки хоть самые основы C# изучить. Тут как в математике - без понимания простых вещей, ты гарантированно не сможешь понять сложные вещи.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITFB Group Москва
от 200 000 до 300 000 ₽
Альфа-Банк Москва
от 200 000 до 350 000 ₽
EuroAuto Санкт-Петербург
от 200 000 ₽