@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;
            }
        }
    }
}
  • Вопрос задан
  • 774 просмотра
Решения вопроса 1
1 - у тебя в классе Enemies нет члена enemies. Возможно его нет совсем, а возможно у тебя опечатка.
2 - у тебя в классе Enemy есть метод takeDamage, но он не публичный

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

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

Похожие вопросы