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
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
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
Используется 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’ Миниатюры
__________________
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.
2 |
Erdinger 247 / 173 / 75 Регистрация: 04.07.2012 Сообщений: 711 |
||||
23.08.2020, 14:35 |
4 |
|||
1 |
293 / 215 / 85 Регистрация: 17.02.2016 Сообщений: 1,269 Записей в блоге: 1 |
|
23.08.2020, 14:39 |
5 |
две библиотеки System и UnityEngine да точно
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
23.08.2020, 14:39 |
5 |