Error cs0104 debug is an ambiguous reference between unityengine debug and system diagnostics debug

I am new to programming and need help to fix error pop-up, which appeared after writing if statement in code, 5 error codes for all Debug.Log lines, before if statement they were working fine. ...

I am new to programming and need help to fix error pop-up, which appeared after writing if statement in code, 5 error codes for all Debug.Log lines, before if statement they were working fine.

    int max = 1000;
    int min = 1;



    Debug.Log("Welcome to number Wizard");
    Debug.Log("Pick a number");
    Debug.Log("Highest number is: " + max);
    Debug.Log("Lowest number is: " + min);
}

// Update is called once per frame
void Update()
{
    if (Input.GetKeyDown(KeyCode.UpArrow))
    {
        Debug.Log("Up Arrow key was pressed");
    }
}

}

asked May 28, 2020 at 13:13

Pavlika Samushia's user avatar

If you don’t need it on top of your file remove the

using System.Diagnostics;

Otherwise either use the full namespace

UnityEngine.Debug.Log("some text");

or add

using Debug = UnityEngine.Debug;

at the top of your file.

answered May 28, 2020 at 13:16

derHugo's user avatar

derHugoderHugo

77.4k9 gold badges67 silver badges105 bronze badges

0

Движение на рандомную дальность

Движение на рандомную дальность

Привет всем.
Вроде код правильно написал, но когда с каждым нажатием на кнопку он рандомит от 1 до 6 и выдаёт эту цифру на экран, передвигаться он почему-то не хочет на это же число, точнее вообще не двигается.
Вот код:

Используется csharp

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class movetest : MonoBehaviour
{
    int step;
    System.Random rnd = new System.Random();
    public GameObject[] oneToSix; //создаём массив в него поместить со сцены все объекты: one, two, three, four, five, six
    public GameObject Player; // создаём игровой оъект игрок
   float speed = 5.0f;
   float cellSize; // размер ячейки, а также расстояни на которое нужно сдвинуться если была нажата кнопка
    bool isMoving = false;//находимся ли в движении
    Vector3 direction;//направление движения
    Vector3 destPos;//позиция куда двгаемся

    public void stepcount() // метод который ничего не возвращает
    {
        // сначала отключаем все объекты
        foreach (GameObject item in oneToSix) //foreach-для начала. Game Object item-создать игровой объект с именем item. in — выбрать где содержаться игровые объекты. oneToSix-массив с объектами
        {
            item.SetActive(false);// сделать игровой объект item неактивным (в нём содержится массив с 6 игровыми объектами)
        }

        // а потом включаем только тот, который выпал в рандоме
        step = Random.Range(0, oneToSix.Length); //присваиваем переменной step рандомное значение от 0 до 6 используя массив Length-длина
        oneToSix[step].SetActive(true); // step — переменная выдаёт значение от 0 до 6 и массив oneToSix с помощью SetActive выводит на экран элемент массива в порядке от 0 до 6

        if (isMoving == true)
        {
            float step = speed * Time.deltaTime;//расстояние, которое нужно пройти в текущем кадре
            transform.position = Vector3.MoveTowards(transform.position, destPos, step);//двигаем персонажа
                                                                                        //достигли нужной позиции — отключаем движение, включаем ловлю нажатых клавиш
            if (transform.position == destPos) isMoving = false;
        }
        else
        {

            switch (step)
            {
                case 1:
                    cellSize = 1.0f;
                    direction = Vector3.up;
                    destPos = transform.position + direction * cellSize;
                    isMoving = true;
                    break;
                case 2:
                    cellSize = 2.0f;
                    direction = Vector3.up;
                    destPos = transform.position + direction * cellSize;
                    isMoving = true;
                    break;
                case 3:
                    cellSize = 3.0f;
                    direction = Vector3.up;
                    destPos = transform.position + direction * cellSize;
                    isMoving = true;
                    break;
                case 4:
                    cellSize = 4.0f;
                    direction = Vector3.up;
                    destPos = transform.position + direction * cellSize;
                    isMoving = true;
                    break;
                case 5:
                    cellSize = 5.0f;
                    direction = Vector3.up;
                    destPos = transform.position + direction * cellSize;
                    isMoving = true;
                    break;
                case 6:
                    cellSize = 6.0f;
                    direction = Vector3.up;
                    destPos = transform.position + direction * cellSize;
                    isMoving = true;
                    break;
            }
        }
    }

   
}

Заранее спасибо за помощь

Flash14243
UNец
 
Сообщения: 30
Зарегистрирован: 18 окт 2019, 19:37

Re: Движение на рандомную дальность

Сообщение 1max1 02 окт 2020, 18:51

Debug.Log поможет. И почему destPos задается после движения, а не до?

Аватара пользователя
1max1
Адепт
 
Сообщения: 5285
Зарегистрирован: 28 июн 2017, 10:51

Re: Движение на рандомную дальность

Сообщение Flash14243 02 окт 2020, 19:39

Тоже не хочет идти

Используется csharp

public void stepcount() // метод который ничего не возвращает
    {
        // сначала отключаем все объекты
        foreach (GameObject item in oneToSix) //foreach-для начала. Game Object item-создать игровой объект с именем item. in — выбрать где содержаться игровые объекты. oneToSix-массив с объектами
        {
            item.SetActive(false);// сделать игровой объект item неактивным (в нём содержится массив с 6 игровыми объектами)
        }

        // а потом включаем только тот, который выпал в рандоме
        step = Random.Range(0, oneToSix.Length); //присваиваем переменной step рандомное значение от 0 до 6 используя массив Length-длина
        oneToSix[step].SetActive(true); // step — переменная выдаёт значение от 0 до 6 и массив oneToSix с помощью SetActive выводит на экран элемент массива в порядке от 0 до 6
        if (isMoving == false)
        {
            float step = speed * Time.deltaTime;//расстояние, которое нужно пройти в текущем кадре
            direction = Vector3.up;
            destPos = transform.position + direction * cellSize;
            transform.position = Vector3.MoveTowards(transform.position, destPos, step);//двигаем персонажа        
            if (transform.position == destPos) isMoving = false; //достигли нужной позиции — отключаем движение, включаем ловлю нажатых клавиш

        }
        else
        {

            switch (step)
            {
                case 1:
                    cellSize = 1.0f;
                    isMoving = true;
                    break;
                case 2:
                    cellSize = 2.0f;
                    isMoving = true;
                    break;
                case 3:
                    cellSize = 3.0f;
                    isMoving = true;
                    break;
                case 4:
                    cellSize = 4.0f;
                    isMoving = true;
                    break;
                case 5:
                    cellSize = 5.0f;
                    isMoving = true;
                    break;
                case 6:
                    cellSize = 6.0f;
                    isMoving = true;
                    break;
            }
        }
    }

Хотел проверить, зачитывает ли после активации переменную step с помощью debug.log, но выдаёт ошибку по типу неправильно использован рандом. Позже смогу скинуть её

Flash14243
UNец
 
Сообщения: 30
Зарегистрирован: 18 окт 2019, 19:37

Re: Движение на рандомную дальность

Сообщение Flash14243 02 окт 2020, 20:09

error CS0104: ‘Debug’ is an ambiguous reference between ‘UnityEngine.Debug’ and ‘System.Diagnostics.Debug’
Гуглил, говорят нужно использовать библиотеку рандома, использую, выдаёт другую ошибку. Которая ссылается не неверный тип моего рандома

Flash14243
UNец
 
Сообщения: 30
Зарегистрирован: 18 окт 2019, 19:37

Re: Движение на рандомную дальность

Сообщение samana 02 окт 2020, 21:02

Если ваш метод stepcount вызывается при нажатии по какой-то кнопке на экране, то с чего бы объекту начать куда-то постоянно двигаться?
Даже если бы метод работал корректно, то он ведь вызывается один раз при нажатии кнопки. Объект может и сдвинулся на три миллиметра во время нажатия и всё, дальше его ничего не двигает ведь.
Для того, чтобы объект в каждом кадре куда-то двигался, то код его движения должен срабатывать каждый кадр.

Аватара пользователя
samana
Адепт
 
Сообщения: 4733
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Движение на рандомную дальность

Сообщение Flash14243 03 окт 2020, 05:35

View post on imgur.com

Используется csharp

   

public void stepcount() // метод который ничего не возвращает
    {
        System.Random rnd = new System.Random();

        // сначала отключаем все объекты
        foreach (GameObject item in oneToSix) //foreach-для начала. Game Object item-создать игровой объект с именем item. in — выбрать где содержаться игровые объекты. oneToSix-массив с объектами
        {
            item.SetActive(false);// сделать игровой объект item неактивным (в нём содержится массив с 6 игровыми объектами)
        }

        // а потом включаем только тот, который выпал в рандоме
        step = Random.Range(0, oneToSix.Length); //присваиваем переменной step рандомное значение от 0 до 6 используя массив Length-длина
        oneToSix[step].SetActive(true); // step — переменная выдаёт значение от 0 до 6 и массив oneToSix с помощью SetActive выводит на экран элемент массива в порядке от 0 до 6

     
       
    }
        public void Update()
        {
            if (isMoving == false)
            {
                float step = speed * Time.deltaTime;//расстояние, которое нужно пройти в текущем кадре
                direction = Vector3.up;
                destPos = transform.position + direction * cellSize;
                transform.position = Vector3.MoveTowards(transform.position, destPos, step);//двигаем персонажа        
                if (transform.position == destPos) isMoving = false; //достигли нужной позиции — отключаем движение, включаем ловлю нажатых клавиш
            }
            else
            {

                switch (step)
                {
                    case 1:
                        cellSize = 1.0f;
                        isMoving = true; break;
                    case 2:
                        cellSize = 2.0f;
                        isMoving = true; break;
                    case 3:
                        cellSize = 3.0f;
                        isMoving = true; break;
                    case 4:
                        cellSize = 4.0f;
                        isMoving = true; break;
                    case 5:
                        cellSize = 5.0f;
                        isMoving = true; break;
                    case 6:
                        cellSize = 6.0f;
                        isMoving = true; break;
                }
            }
        }
}

Мне кажется проблема в том что не указанно, что должно двигаться.
Я взял с инета вот этот код, но тут не нужно было указывать кому нужно совершать движение, тк он был привязан к персонажу.
А свой скрипт я пихнул в пустой объёкт и привязал его к кнопке.
Вот код с инета:

Используется csharp

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
        public float speed = 5.0f;
        public float cellSize = 1.0f;//размер ячейки, а также расстояни на которое нужно сдвинуться если была нажата кнопка
        bool isMoving = false;//находимся ли в движении
        Vector3 direction;//направление движения
        Vector3 destPos;//позиция куда двигаемся

        void Update ()
        {
                if (isMoving == true)
                {
                        float step = speed * Time.deltaTime;//расстояние, которое нужно пройти в текущем кадре
                        transform.position = Vector3.MoveTowards(transform.position, destPos, step);//двигаем персонажа
                        //достигли нужной позиции — отключаем движение, включаем ловлю нажатых клавиш
                        if (transform.position == destPos) isMoving = false;
                }
                else
                {
                        if (Input.GetKeyDown(KeyCode.W))
                        {
                                //move up
                                direction = Vector3.up;
                                destPos = transform.position + direction * cellSize;
                                isMoving = true;
                        }
                        else if (Input.GetKeyDown(KeyCode.A))
                        {
                                //move left
                                direction = Vector3.left;
                                destPos = transform.position + direction * cellSize;
                                isMoving = true;
                        }

                       
                        else if (Input.GetKeyDown(KeyCode.D))
                        {
                                //move right
                                direction = Vector3.right;
                                destPos = transform.position + direction * cellSize;
                                isMoving = true;
                        }
                }
        }
}

Flash14243
UNец
 
Сообщения: 30
Зарегистрирован: 18 окт 2019, 19:37

Re: Движение на рандомную дальность

Сообщение samana 03 окт 2020, 09:47

А может лучше опишите то, что вы хотите получить в итоге? В вашем скрипте есть какой-то Player, который по идее и нужно двигать, но в коде он ни как не участвует. Так же непонятна суть массива с объектами со сцены. В коде вы просто включаете и выключаете их видимость, но они так же действуют на длину шага при движении..
Эти копирования каких-то кодов с других скриптов в интернете вряд ли заточены под вашу идею и ваш проект. Например совершенно непонятно кто и как должен двигаться. Двигаться постоянно, или пошагово и т.п. Просто расскажите вашу задумку, не нужно вставлять скрипты на «авось заработает».

Аватара пользователя
samana
Адепт
 
Сообщения: 4733
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Движение на рандомную дальность

Сообщение Flash14243 03 окт 2020, 15:18

Только учусь, поэтому приходится брать немножко строк с чужих кодов)
Мне нужно, что бы при нажатии на кнопку, которая создана на сцене. На экран высвечивалось рандомное число, сколько шагов Player должен сделать(работает). И мне нужно что бы объект Player шёл на step(1-6) шагов вперёд единожды, что бы при повторном нажатии на кнопку он ещё раз прошёл новое значение шагов вперёд.
В коде который я скидывал выше. Player ходит так как нужно, но мне надо, что бы он передвигался не с помощью клавиатуры, а с помощью кнопки и что бы cellSize меняло своё значение от 1 до 6.
Я тоже думаю, что проблема в том что передвижение не привязано к Player , как это исправить?

Flash14243
UNец
 
Сообщения: 30
Зарегистрирован: 18 окт 2019, 19:37

Re: Движение на рандомную дальность

Сообщение samana 03 окт 2020, 17:55

Flash14243 писал(а):Я тоже думаю, что проблема в том что передвижение не привязано к Player , как это исправить?

Просто передать ссылку на Player-а в инспекторе.

Возможно этот скрипт делает то, что вы хотите.
Нацепите его на любой объект в сцене (желательно пустой). Заполните поля в инспекторе: массив объектов от 1-6, и поле Player (перетащить туда игрока со сцены). Так же назначьте кнопке метод onRandomStep из этого скрипта.

Сейчас при нажатии кнопки, выбирается случайное кол-во шагов (1-6) и Player перемещается вверх на это кол-во шагов.

Используется csharp

using UnityEngine;

public class MoveTest : MonoBehaviour
{
    public float speed = 1.0f;
    public GameObject[] oneToSix;
    public GameObject Player;

    private int step;
    private bool isMoving = false;
    private Vector3 direction;
    private Vector3 destPos;

    private void Start()
    {
        destPos = Player.transform.position;
        direction = Vector3.up;

        foreach (GameObject item in oneToSix)
        {
            item.SetActive(false);
        }
    }

    private void Update()
    {
        if (isMoving)
        {
            Player.transform.position = Vector3.MoveTowards(Player.transform.position, destPos, speed * Time.deltaTime);
            if (Player.transform.position == destPos)
            {
                isMoving = false;
            }
        }
    }

    public void onRandomStep()
    {
        if (isMoving) return;

        step = Random.Range(0, oneToSix.Length);

        foreach (GameObject item in oneToSix)
        {
            item.SetActive(false);
        }
        oneToSix[step].SetActive(true);

        destPos += direction * (step + 1);

        isMoving = true;
    }
}

Аватара пользователя
samana
Адепт
 
Сообщения: 4733
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Движение на рандомную дальность

Сообщение Flash14243 04 окт 2020, 20:29

Работает, спасибо
Но у меня клетки более большие, поэтому он иногда встаёт на край клетки.
Завтра поразбираюсь в этом.
Но почему-то при значениях 1,3,4 всё нормально, player встаёт в середину. А при других криво встаёт

Flash14243
UNец
 
Сообщения: 30
Зарегистрирован: 18 окт 2019, 19:37


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6



0 / 0 / 0

Регистрация: 23.08.2020

Сообщений: 1

1

23.08.2020, 12:31. Показов 4504. Ответов 4


AssetsgameScenegamePlayer.cs(35,76): error CS0104: ‘Random’ is an ambiguous reference between ‘UnityEngine.Random’ and ‘System.Random’
Пробывал подключать библиотеку UnityEngine.Random и System.Random. Но вылазит другая ошибка error CS0138: A ‘using namespace’ directive can only be applied to namespaces; ‘Random’ is a type not a namespace. Consider a ‘using static’ directive instead

Миниатюры

Ошибка CS0104 при использовании Random
 

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



293 / 215 / 85

Регистрация: 17.02.2016

Сообщений: 1,269

Записей в блоге: 1

23.08.2020, 12:51

2

скорее всего Рандом хочет инт а не флоат



0



epyskop

143 / 130 / 30

Регистрация: 26.07.2017

Сообщений: 633

23.08.2020, 14:17

3

У вас подключены две библиотеки System и UnityEngine, и там и там есть метод Random. Допишите там где используете Random.

C#
1
UnityEngine.Random.Range(-1,4f, 1,56f), UnityEngine.Random.Range(0,9f, 2,9f)



2



Erdinger

247 / 173 / 75

Регистрация: 04.07.2012

Сообщений: 711

23.08.2020, 14:35

4

C#
1
using Random = UnityEngine.Random;



1



293 / 215 / 85

Регистрация: 17.02.2016

Сообщений: 1,269

Записей в блоге: 1

23.08.2020, 14:39

5

Цитата
Сообщение от epyskop
Посмотреть сообщение

две библиотеки System и UnityEngine

да точно



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

23.08.2020, 14:39

5

Понравилась статья? Поделить с друзьями:
  • Error cs0103 unity
  • Error cs0103 the name thread does not exist in the current context
  • Error cs0103 the name scenemanager does not exist in the current context
  • Error cs0103 the name scenemanagement does not exist in the current context
  • Error cs0103 the name math does not exist in the current context