Почему unity не видит скрипт
Перейти к содержимому

Почему unity не видит скрипт

Не видит скрипт

Доброго времени суток. Подскажите пожалуйста, почему не подключается скрипт к объекту. Смотрю видео уроки, там создали объект, создали скрипт, сохранили скрипт и просто перенесли его на объект. Делаю тот же самый перенос

, мне выдаёт ошибку, что этого скрипта не существует. В файлах скрипт есть, имя у него есть, расширение .cs как и должно быть. Из-за чего это может быть, что не так? Заранее благодарен.

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Форма передает данные, скрипт видит переменные, но не видит их значение
Доброго времени суток всем! У меня проблема, если не трудно- помогите plz! Форма передает данные.

Что видит, и что не видит скрипт, написанный в onclick
Всем привет. Я хотел бы, чтоб лисенеры на странице именовались где-то так: list =

Скрипт не видит бд
$link = mysql_connect("localhost", "mysql_user", "mysql_password") or die("Could not.

IE не видит скрипт
Есть JS файл, подключаемый таким образом: <script src="/js/main.js"></script>. Проблема в том.

Регистрация: 02.10.2013
Сообщений: 185
Я думаю, это не столь важно, но всё же, вот даже код скрипта:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
using UnityEngine; using System.Collections; public class player : MonoBehaviour { public float playerSpeed = 5.0f; void Update () { float tramsV = Input.GetAxis("Vertical")*playerSpeed*Time.deltaTime; float tramsH = Input.GetAxis("Horizontal")*playerSpeed*Time.deltaTime; transform.Translate(new Vector3(tramsH,tramsV,0)); } }

Регистрация: 19.02.2014
Сообщений: 6

Лучший ответ

Сообщение было отмечено SLideR11 как решение

Решение

Имя скрипта «playerController», а имя класса «player». Это не хорошо, должен быть порядок, дай им одинаковые имена.

Регистрация: 02.10.2013
Сообщений: 185

FiliusPatris, спасибо, помогло. Стал развивать вашу тему с именами, нашёл причину. Имя скрипта и имя класса в коде не совпадали, поэтому не видел он его, я так думаю.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Форма не видит скрипт js
Добрый день Решил перенести сайт с modX на битрикс перенес всю структуру скрипты. Подключаю.

Не видит внешний скрипт
Вопрос такой: Пытаюсь сделать выпадающий список, когда набирается название в TextBox. Нашел.

Скрипт не видит переменные
Привет, друзья. Подскажите, почему переменные не видит скрипт в массиве которые. Ниже скрипт: .

Или воспользуйтесь поиском по форуму:

unity 3d

Введение Недавно появились устройства, способные думать на таком же уровне, что и человек. Сегодня же ты можешь спокойно написать дипломную работу не листая тонны контента и имея под рукой всего-лишь один сайт. Наверное, ты уже понял, о чем идет речь. Нейросети буквально заполняют наш мир. Но я.

  • Mark Klintov
  • Тема
  • 13.02.2023
  • mlagents unity3d нейронная сеть
  • Ответы: 5
  • Раздел: Свободное общение

Unity создание игры — как на 3д объекте в среде юнити, с помощью скрипта с#, закрашивать цветом определенные части или зоны этого объекта?

Друзья! Подскажите как на 3д объекте в среде юнити, с помощью скрипта с#, закрашивать цветом определенные части или зоны этого объекта, Чтобы не было сплошного цвета. Как это сделать? P.s. я новичок в этом деле))

  • SpideCo2
  • Тема
  • 20.04.2020
  • c# drawing unityunity3d програирование разработка игры скрипт
  • Ответы: 0
  • Раздел: Вопрос — Ответ

Unity и vs code( редактор не видит классов Unity)

Хочу написать скрипт к игре на Unity, но vs code не видит классы Unity, что делать, подскажите?

  • SpideCo2
  • Тема
  • 15.03.2020
  • c# animation unity3d visual studio code разработка игры
  • Ответы: 2
  • Раздел: Вопрос — Ответ

Проблема Прыжок в Unity3D,C#

Всем здравия господа, делаю 2д платформер на юнити, и понятия не имею, как делать прыжок, код ниже. Гуглил, не особо помогло, код на C# using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour < public GameObject player; public int speed =.

Вращение объекта в Unity

Здравия, форумчане! Проблема с Unity. У меня есть булевая переменная threeD, мне нужно, чтобы при значении true камера была повёрнута на 15 градусов вниз от горизонта, а при значении false, направление камеры должно быть параллельно горизонту. Вот код: using UnityEngine; using.

Не крутится Коллайдер

Сделал скрипт, отвечающий за вращение объекта, но получилось так, что сам объект крутится, а его коллайдер-нет. Если коллайдер и не должен крутится, то не спешите писать ответ о том, какой я дурак. Лучше поймите мне нужно сцеппление (при вращении колеса объект, в моём случае скейт, едет по.

  • dieZel
  • Тема
  • 15.08.2018
  • collider unity3d
  • Ответы: 6
  • Раздел: Вопрос — Ответ

Туториал 0: Юнити и C# скрипт — основы

Скажу честно, я не программист, так что вполне возможно будут какие-то неточности. Это не игровой туториал. Я постараюсь рассказать, как работают скрипты в Юнити 3Д.

С# относительно не сложный язык. Точнее сама основа языка простая, сложности начинаются, когда уже совсем далеко углубляешься в него. Но на самом деле с помощью Юнити3Д можно делать простенькие игрушки только используя основы С#. C# объектно ориентированный язык програмирования. Это пишут все, но как я понял большинство не особо понимает смысл этого, как и я. Но учитывая, что придется работать со скриптами, это не так и важно для начала. Не стоит пытаться создать один огромный трудно понимаемый скрипт для всей игры. Пробуйте разделить игру на части. В свою очередь эти части могут взамодействовать друг с другом. Используйте эти части как кирпичи для создания итоговой игры. В C# используется class, который исполняет роль кирпичика. В Юнити довольно просто создать такой class. Создаете новый C# скрипт и называете его по желанию. И, грубо говоря, созданный скрипт и выполняет роль class в Юнити3Д. Далее можно использовать скрипт как компонет для игрового объекта.

Небольшой пример:

Как пример, решили сделать простенькую космическую стрелялку. Что-то похожее на этот шедевр:

В Юнити3Д это будет сцена с множеством игровых объектов: фон, звезды, камера, враг, астероид, игрок. Каждый объект в игре это GameObject. И все GameObjects состоят из Components. Некотрые компоненты заранее заготовленны в Юнити3Д. Как пример: Transform (определяет позицию объекта в пространстве), Sprite Renderer (рисует заданный объект в мире), UI Text (показывает текст в интерфейсе) и много других компонентов. И ваши C# скрипты тоже будут компонентами, которые будут присоединяться к объектам. У C# скриптов есть доступ к другим компонетами. По сути, вся работа со скриптами это просто работа с переменными.

Как использовать C# скрипты ?

Создадим empty GameObject(пустышку) в сцене. У этого объекта уже будет Transform компонент (у каждого объекта в Юнити3Д есть Transform компонент). У созданного объекта пока нет компонента отвечающего за отрисовку, поэтому мы не увидим его игре. Поэтому добавим ешё один компонент Sprite Renderer. И укажем какую картинку должен рисовать этот компонент, например астероид. Тогда мы сможем увидеть астероид в игре.

Просто смотреть на астероид скучно, поэтому можно сделать скрипт для его управления.

Не забываем, это не игровой туториал, только вкратце о принципе работы с Юнити3Д.

Создаём новый С# скрипт и называем его(например Moving, так как этот скрипт будет перемещать астероид). Если мы откроем скрипт, то увидим следующую заготовку:

using UnityEngine;
using System.Collections;

public class Moving : MonoBehaviour

// Use this for initialisation
void Start () >

//Update is called once per frame
void Update () >
>

Небольшое объяснение строчек:

Using UnityEngine; Добавляем доступ на UnityEngine библиотеку. Это набор различных классов/функций от Юнити3Д.
using System.Collections; Это стандартная библиотека от Microsoft .NET.
public class Moving : MonoBehaviour

public даёт возможность доступа на этот скрипт с других скриптов. class Moving название нашего скрипта/класса. MonoBehaviour это основной класс от Юнити3Д, в нём такие важные функции как Update(), Start (). Смотрите Unity Documentation для более точного описания.
// Use this for initialization Это просто комментарий. Только для вашего удобства.
void Start () <> void Обозначение, что последующая функция не будет возвращать параметр (то-есть никаких вернувшихся переменных после её вызова не намечается). Start () <> эта функция выполнится один раз при старте скрипта.
void Update () <> Эта функция будет выполняться заново каждый игровой кадр.

Теперь мы можем передвинуть астероид в центр игрового мира (находится на координатах (0, 0, 0)). Позиция игрового объекта определяется в Transform компоненте. Нам надо присоединить наш скрипт к астероиду. С этого скрипта мы можем менять переменные в Transform компонент. Эти переменные и определяют положение объекта в сцене.

Например мы хотим переместить астероид в центр при старте игры.

Если надо получить доступ на какой-то компонент игрового объекта, то обычно надо сделать следующие шаги:

1. Найти нужный игровой объект: Тут много разных вариантов, все зависит от условий.
— Можно использовать поиск из C# скрипта GameObject.Find («Name») / GameObject.FindWithTag («Tag»). Это поиск по имени или тэгу.
— можно создать переменную типа игровой объект public GameObject; и потом в эдиторе указать к какому объекту привязана эта переменная.
— можно получить линк на игровой объект с различных функций. Например: (Trigger, Raycast. ).
— и не нужен поиск объекта, если скрипт уже находится на этом объекте.

2. Получить доступ на компонент этого объекта: через команду gameobject.GetComponent (); или GetComponent (); если скрипт на том-же объекте.

Доступ к Transform компоненту:

Для удобства есть простой путь доступа на свой Transform компонент, если компонент и скрипт находятся на одном объекте. Просто используете transform. Для доступа на другие компоненты используйте GetComponent (в старых версиях Юнити таких быстрых доступов было больше, не забываем об этом при работе с неактульными туториалами)

Позиция в игровом мире это вектор (x,y,z). Если мы хотим поместить астероид в центр, то нам надо изменить координаты вектора на (0,0,0). C# строчка будет:
transform.position = new Vector3 ( 0 , 0 , 0 );
Если мы хотим сделать это перемещение один раз в начале игры, то нам надо поместить эту строчку в функцию void Start () <> . И наш скрипт будет:

using UnityEngine;
using System.Collections;

public class Moving : MonoBehaviour

// Use this for initialisation
void Start () //сменить местоположение игрового объекта
transform.position = new Vector3 ( 0 , 0 , 0 );
>

//Update is called once per frame
void Update () >
>

Если мы запустим нашу игру, то астероид будет перемещён в центр игрового мира.
Теперь посмотрим на Transform компонент:

Используйте команду transform. для доступа к Transform компоненту на том-же игровом объекте. И в нём можно изменить позицию, вращение и размер игрового объекта (пример: transform.localScale = new Vector3 (0.5F, 1, 1);). Ваш IDE (редактор) будет пытаться помочь в наборе команд и будут показанны различные возможные варианты.

Можно не только изменять переменные, но и просто запросить их значения.

Теперь посмотрим как работать с другими компонентами. У нашего астероида есть компонент для его отрисовки (рендерер).

Например мы хотим зеркально повернуть астероид вдоль y-оси. Так как наш скрипт уже прикреплён к астероиду, то нам не нужен его поиск в игровом мире. Мы можем получить доступ на компонент командой GetComponent ().. Название компонента можно посмотреть в инспекторе игрового объекта (только осторожно с пробелами). C# команда будет:
GetComponent< SpriteRenderer >().flipY = true ;
И скрипт будет:

using UnityEngine;
using System.Collections;

public class Moving : MonoBehaviour

// Use this for initialisation
void Start () //сменить местоположение игрового оьъекта
transform.position = new Vector3 ( 0 , 0 , 0 );
//доступ к компоненту отрисовки и сменить переменную, отвечающую за зеркальное отображение по оси Y
GetComponent< SpriteRenderer >().flipY = true ;
>

//Update is called once per frame
void Update () >
>

Не забываем, при наборе кода ваш IDE будет пытаться показывать возможные варианты.

Обычно, если планируете работать часто с каким-нибудь компонентом, то лучше сделать ссылку на этот компонент. Для этого вам надо создать ссылочную переменную того же типа, что и компонент (тип переменной будет как и название компонента). И потом указать ссылку на этот компонент GetComponent (). Потом сможете использовать эту переменную для быстрого доступа к компоненту.

using UnityEngine;
using System.Collections;

public class Moving : MonoBehaviour

//декларация ссылочной переменной для компонента отрисовки спрайтов
SpriteRenderer sr;

// Use this for initialisation
void Start () //сменить местоположение игрового оьъекта
transform.position = new Vector3 ( 0 , 0 , 0 );
//делаем ссылку на компонент
sr = GetComponent< SpriteRenderer >();
//меняем переменную, отвечающую за зеркальное отображение по оси Y
sr.flipY = true ;
>

//Update is called once per frame
void Update () >
>

Похожим образом мы можем получить и доступ к компонентам на других игровых объектах.
Для начала нам надо «найти» другой игровой объект. Как я уже и писал, тут довольно много различных вариантов в зависимости от ситуации. Например в сцене есть другой игровой объект. Его имя Ship и тэг Player (Tag используется для идентификации объектов (похоже на имя, только скорость обработки быстрее)).

1. Если игровой объект находится в сцене с самого начала и не пропадает до запроса к нему, то мы можем создать открытую ссылочную переменную playerShip (с тимпом GameObject) в нашем скрипте и добавить этот объект в эту переменную через инспектор (просто перетащить объект на переменную в редакторе). И тогда через эту переменную у нас будет доступ на игровой объект. Например мы хотим поместить корабль на позицию (1, 1, 0) при старте игры. C# строчка будет:
playerShip.transform.position = new Vector3 ( 1 , 1 , 0 );

using UnityEngine;
using System.Collections;

public class Moving : MonoBehaviour

//декларация ссылочной переменной для компонента отрисовки спрайтов
SpriteRenderer sr;
//публичная ссылочная переменная для корабля игрока
public GameObject playerShip;

// Use this for initialisation
void Start () //сменить местоположение игрового оьъекта
transform.position = new Vector3 ( 0 , 0 , 0 );
//делаем ссылку на компонент
sr = GetComponent< SpriteRenderer >();
//меняем переменную, отвечающую за зеркальное отображение по оси Y
sr.flipY = true ;
//получаем доступ к transform компоненту игрока и меняем его местоположение
playerShip.transform.position = new Vector3 ( 1 , 1 , 0 );
>

//Update is called once per frame
void Update () >
>

2. Мы можем найти игровой объект в сцене через поиск и сделать на него ссылку через скрипт с помощью команды GameObject.Find («Name») or GameObject.FindWithTag («Tag»). Поиск по тэгу производится быстрее чем по имени. C# строчка будет:
playerShip = GameObject .Find( «Ship» );
или:
playerShip = GameObject .FindWithTag( «Player» );

using UnityEngine;
using System.Collections;

public class Moving : MonoBehaviour

//декларация ссылочной переменной для компонента отрисовки спрайтов
SpriteRenderer sr;
//публичная ссылочная переменная для корабля игрока
public GameObject playerShip;

// Use this for initialisation
void Start () //сменить местоположение игрового оьъекта
transform.position = new Vector3 ( 0 , 0 , 0 );
//делаем ссылку на компонент
sr = GetComponent< SpriteRenderer >();
//меняем переменную, отвечающую за зеркальное отображение по оси Y
sr.flipY = true ;
//ищем в сцене корабль игрока и делаем ссылку на него
playerShip = GameObject .FindWithTag( «Player» );
//получаем доступ к transform компоненту игрока и меняем его местоположение
playerShip.transform.position = new Vector3 ( 1 , 1 , 0 );
>

//Update is called once per frame
void Update () >
>

Не забываем: используйте GetComponent ();, если хотите получить доступ на отличный от Transform компонент (transform. это просто укороченный вариант для этого компонента). Например если хотите зеркально повернуть корабль по X-оси из скрипта на астероиде, то комманда в C# будет:
playerShip.GetComponent < SpriteRenderer >().flipX = true ;

using UnityEngine;
using System.Collections;

public class Moving : MonoBehaviour

//декларация ссылочной переменной для компонента отрисовки спрайтов
SpriteRenderer sr;
//публичная ссылочная переменная для корабля игрока
public GameObject playerShip;

// Use this for initialisation
void Start () //сменить местоположение игрового объекта
transform.position = new Vector3 ( 0 , 0 , 0 );
//делаем ссылку на компонент
sr = GetComponent< SpriteRenderer >();
//меняем переменную, отвечающую за зеркальное отображение по оси Y
sr.flipY = true ;
//ищем в сцене корабль игрока и делаем ссылку на него
playerShip = GameObject .FindWithTag( «Player» );
//получаем доступ к transform компоненту игрока и меняем его местоположение
playerShip.transform.position = new Vector3 ( 1 , 1 , 0 );
//указываем, что работаем с кораблем игрока, получаем доступ к компоненту отрисовки и зеркально отображаем по оси Х
playerShip.GetComponent < SpriteRenderer >().flipX = true ;
>

//Update is called once per frame
void Update () >
>

3. Мы можем получть объект с различных игровых функций. Я покажу некотрые из них в последующих туториалах (как пример: OnTriggerEnter2D (Collider2D otherCollider) <> Ссылка на объект попавший в триггер будет в otherCollider переменной).

Наверняка уже заметили, что создание игры в Юнити — это просто работа с переменными в компонентах игровых объектов (я сейчас не говорю о создании музыки, моделей, текстов . Это уже совсем другая история). Теперь посмотрим на основы С# скриптов. Описание будет довольно коротким и затронет только базовые части. Так что для подробностей придется немножко погуглить или побродить по форумам.

Основы С# скриптов:

1. Переменные:

Переменные это именованные области памяти, хранящие определенную информацию. Так как придется работать с переменными, то конечно лучше знать их основные типы:

Spoiler int:
Этот тип переменных может принимать значение целого (не дробного) числа. Переменная лежит в диапазоне от -2 147 483 648 до 2 147 483 647. Обычно используется для подсчета количества объектов или индексации массивов/циклов (о них чуть позже). int score;
int healthPoint = 5 ;
float:
Этот тип для чисел с плавающей запятой (дробные числа). Переменная лежит в диапазоне от -3.4 × 10^38 до +3.4 × 10^38. Обычно используется там, где важна дробная часть (как пример — расстояние до цели). Используйте точку для разделения знаков. float speed;
float distanceToShoot = 10.5 ;
bool:
Это тип переменных имеющих всего два значения true/false (истинно/ложно). Используется в проверке условий (условные операторы). bool isDead;
bool canMove = false;
char:
Тип переменных для символов Юникода. Например отдельные буквы. Используйте одинарные кавычки при инициализации. char litera;
char firstLitera = ‘A’ ;
string:
Тип переменных для символьной последовательности/текст (на самом деле это ссылочная переменная, то есть в ней хранится ссылка на область памяти, где находится эта символьная последовательность. Но её принцип работы похож на обычные переменные). В классе string содержится несколько функций. Одна из них string.Length, позволяющая узнать количество символов в строке. Для инициализации используйте кавычки. string newText;
string enemyText = «Stop! Don’t move»;
//пример использования функции string.Length
int howManyLetters = enemyText.Length; Vector3:
Я поместил вектор3 к обычным переменным, но на самом деле это структура. Структуры довольно похожи на классы, но в отличии от класса со значениями стурктуры можно работать напрямую, а не через ссылку. Поэтому они частично похожи на переменные. Возможны арифметические операции. Далее структура Vector3 содержит довольно много функций для работы с векторами. Смотрите Unity Documentation для более точного описания. При инициализации вектора3 надо создавать новую инстанцию с помощью new или использовать уже существующий вектор3 (тогда будет созданна его копия). Часто используется для определения местоположения объектов или их скорости и направления движения. Vector3 move;
Vector3 enemyPos = new Vector3 ( 1 , 1 , 0 );
//считывание длинны вектора
float vectorLength = enemyPos.magnitude; Существуют и другие векторы. Например Vector2 или Vector4, но принцип их работы не отличается (кроме многомерности). var:
Это ключевое слово, с помощью которого можно задекларировать переменную без обозначения её типа. Тип переменной будет определен позже в контексте программы. var summe;
float a = 1 ;
float b = 1 ;
//переменная summe получит тип float
summe = a + b;

2. Ссылочные переменные классов:

Как уже видно из описания, такие переменные хранят в себе не классы, а только ссылки на области памяти с этими классами. В качестве примера, если у вас есть переменная типа игровой объект с объектом «игрок» и вы присвоите ей значение объект «враг», то ваш «игрок» никуда не пропадёт, вы просто измените ссылку на другой объект в этой переменной. Объект, на который указывает такая ссылка, является классом с названием по типу переменной. Так вы можете создать ссылочную переменную для компонентов и объектов в Юнити. Основной смысл таких переменных в Юнити это доступ к самому классу (объекту/компоненту) или к его функциям и переменным. Ниже приведу несколько примеров:

Spoiler GameObject:
Все объекты в сцене Юнити это игровые объекты. Поэтому GameObject как базовый класс используется довольно часто. Как и большинство классов содержит в себе не только различные переменные, но и функции. Смотрите Unity Documentation для более точного описания. GameObject player;
//поиск оьъекта с тэгом Enemy и создание переменной с ссылкой на него
GameObject enemy = GameObject .FindWithTag ( «Enemy» );
Transform:
Один из очень часто используемых компонентов. Этот компонент есть у любого игрового объекта в Юнити. Отвечает за местоположение и размеры объекта в игровом мире. Так как в Юнити есть упрощённый доступ к компонету Transform у игрового объекта через команду gameobject.transform. , то используется как ссылочная переменная не так уж и часто. Смотрите Unity Documentation для более точного описания. Transform enemyPosition;
//считывание координаты х из трансформ компонента
float x = enemyPosition.position.x;
Sprite:
Класс представляющий 2Д картинку (спрайт) в качестве рессурса в Юнити. Если вы импортируете спрайт в Юнити, то будет автоматически создан новый класс содержащий этот спрайт с его различными настройками. В качестве ссылочной переменной понадобится при работе с компонентом отрисовки спрайтов. Смотрите Unity Documentation для более точного описания. Sprite enemyBullet;
SpriteRenderer:
Класс отвечающий за отрисовку (рендеринг) спрайта на экране. Рессурс для отрисовки берется из Sprite (см. выше). Как и большинство компонентов содержит в себе различные переменные и функции. Смотрите Unity Documentation для более точного описания. SpriteRenderer sr;
//активация переменной, отвечающей за зеркальное отображение по оси Y
GetComponent< SpriteRenderer >().flipY = true ;
С# скрипты и другие компоненты:
Как я уже говорил, ваши скрипты являются компонентами в Юнити. Поэтому ссылочные переменные работают аналогичным образом.
1. создаёте переменную по типу компонента (используйте его название).
2. получаете доступ к компоненту через ссылочную переменную: variable = GetComponent ();

В качестве примера скрипт из вступления: Moving moving;
moving = GetComponent< Moving >();
moving.playerShip.transform.position = new Vector3 ( 1 , 1 , 0 );
Все остальные компоненты работают аналогично. Не стану их описывать, так как их просто огромное количество.

3. Массивы (статические и динамические):

Массив это упорядочненая структура данных состоящая из элементов одного типа. Массивы могут быть не только одномерными, но и многмерными. Все элементы массива проиндексированны, для целенаправленного доступа к ним. Статический массив имеет определённый размер (количество элементов), который нельзя изменить после декларации. Размер динамического массива можно менять. Индексация массива начинается с 0, то есть первый элемент массива имеет индекс [0].

Spoiler статические массивы:
Так как размер такого массива заранее определен, то скорость работы с таким массивом выше. Поэтому используйте статические массивы, если размер массива заранее известен и будет постоянен. //декларация двумерного массива типа int, состояшего из 2*5 элементов
int [,] numbers = new int [ 2 , 5 ];
//декларация одномерного массива типа GameObject, размер массива определяется через инспектор игрового объекта
public GameObject [] enemy;
//декларация одномерного массива типа string, c его последующей инициализацией
string [] animals = new string [2] < "кот" , "собака" >;
динамические массивы:
Динамические массивы используют класс List. Этот класс находится в пространстве System.Collections.Generic, поэтому лучше присоединить это пространство к скрипту с помощью using System.Collections.Generic;. Динамические массивы позволяют различные действия с размером массива. Можно добавлять, вставлять и удалять элементы. Смотрите MSDN для более точного описания. //присоединение пространства для работы с классом List
using System.Collections.Generic;
//декларация динамического массива типа string
List < string >cars = new List < string >();
//добавление к массиву нового элемента
cars.Add( «Запорожец» );
//вставка нового элемента в массив как первый элемент
cars.Insert(0, «Ауди» );
//удаление элемента «Запорожец»
cars.Remove( «Запорожец» );

4. Модификаторы доступа:

В С# переменные могут быть с разным уровнем доступа. Уровень доступа определяет возможность обращения к переменной.

Spoiler private:
По умолчанию (если вы никак не обозначили переменную) она получает приватный уровень доступа. Так же этот уровень можно и указать с помощью private. Доступ к таким перменным возможен только внутри их содержащих классов. float speed;
private int score;
public:
Уровень доступа public даёт неограниченный доступ. Например такие переменные можно изменить из других классов. Так же переменная с публичным доступом будет видна в редакторе, это даёт возможность её настройки через инспектор. У компонентов в Юнити публичный уровень доступа. public float speed;
public GameObject player;
protected:
Уровень доступа для базового и наследуемых классов.

5. Области видимости(действия) переменных:

Место декларации переменной определяет область её видимости в содержащем скрипте.

Spoiler глобально в классе:
Переменная декларированная в классе, но не входящая в функции этого класса может быть использована глобально всеми функциями этого класса.
локально в функции:
Переменная декларированная в функции, может быть использована только в этой функции.
локально в цикле:
Область видимости такой переменной ещё меньше, она используется только локально в пределах цикла. using UnityEngine;
using System.Collections;

public class Moving : MonoBehaviour

//переменная speed может быть использованна любой функцией этого класса
public int speed;

void RandomFunction () //переменная isMoving может быть использованна только в пределах RandomFunction () <. >
bool isMoving = true;
//переменная i может быть использованна только в пределах цикла
for ( int i = speed; i < 0 ; i--) speed = i;
>
isMoving = false;
>
>

6: Арифметические операторы:

С переменными, содержащими значения, возможны различные арифметические действия. Тут приведу только основные примеры.

Spoiler Будьте осторожны при арифметических действиях с разными типами переменных. Если например записать дробный результат в целую переменную, то дробная часть потеряется. float a = 10 ;
float b = 5 ;
float c;
//сложение: c = 10 + 5
c = a + b;
//вычитание: a = 10 — 2
a = a — 2 ;
//деление: b = 8 / 2
b = a / 2 ;
//умножение: с = 10 * 1.5
с = 10 * 1.5 ;
//присвоение: a = 15
a = c;
//инкремент: увеличение а на единицу
a++;
//декремент: уменьшение а на единицу
a—;
//инкремент/декремент: могут стоять до или после переменной, изменяя порядок вычислений

7. Математические функции:

В С# есть структура Mathf для различных математических функций. Смотрите Unity Documentation для более точного описания.

Spoiler //функция вернет значение -1, так как проверочный результат отрицательный
float sign = Mathf .Sign (-5);

8. Условия и логические операторы:

Для разветвления (выбора другого варианта исполнения) программ есть различные условные операторы. Для сравнения вариантов используются логические операторы сравнения.

Spoiler логические операторы сравнения:
Результат сравнения это бинарный результат, то есть ложно или истинно (true/false). Возможны следующие сравнения:
== — равно
!= — не равно
> — больше
< - меньше
>= — больше или равно

условные операторы:
Условные операторы позволяют провести сравнение и выполнить определенную часть кода в зависимости от результата.
if . else:
Краткая форма этого условного оператора состоит только из условия и выполняемой части кода, если условие истинно. if (hp isDead = true ;
canFight = false ;
> Полная форма состоит из условия, выполняемой части кода, если условие истинно и выполняемой части кода, если условие ложно. if (hp isDead = true ;
canFight = false ;
> else isDead = false ;
canFight = true ;
> Возможно объединение различных условий в одну конструкцию. if (hp isDead = true ;
canFight = false ;
> else if (hp == 100 ) isDamaged = false ;
> бинарные логические операторы:
С помощью таких операторов можно создавать более сложные условия, состоящих из нескольких подусловий.
&& — логическое И . Будет истинно, если оба условия истинны. Или ложно, если оба или одно из них ложно.
|| — логическое ИЛИ . Будет истинно, если одно из условий истинно. И ложно, если оба условия ложны.
if (hp < 0 || hp >0 ) isZero = false ;
> else isZero = true ;
> switch:
Этот логический оператор используется для обработки множества вариантов при нахождении истинного значения. string direction = «left» ;

//искомое выражение
switch (direction) //возможный вариант, если совпадает, то выполняется последующий код
case ( «up» ):
move = Vector2 .up;
isMoving = true ;
//прерывает дальнейшее выполнение логического оператора (при совпадении варианта)
break ;
//возможный вариант, если совпадает, то выполняется последующий код
case ( «down» ):
move = Vector2 .down;
isMoving = true ;
//прерывает дальнейшее выполнение логического оператора (при совпадении варианта)
break ;
//в данном примере выполнится эта часть кода и работа логического оператора будет завершена
case ( «left» ):
move = Vector2 .left;
isMoving = true ;
//прерывает дальнейшее выполнение логического оператора (при совпадении варианта)
break ;
//возможный вариант, если совпадает, то выполняется последующий код
case ( «right» ):
move = Vector2 .down;
isMoving = true ;
//прерывает дальнейшее выполнение логического оператора (при совпадении варианта)
break ;
//если ни один из вариантов не был истинной, то выполняется часть кода стоящая после default
default :
move = Vector2 .zero;
isMoving = false ;
//прерывает дальнейшее выполнение логического оператора
break ;
>

9. Циклы:

Циклы используются для многократного исполнения определенных задач (фрагментов кода).

Spoiler for:
Этот цикл выполняется определённое количество раз. //для примера, декларация массива на 10 целых элементов
public int [] numbers = new int [ 10 ];

//int i = 0; декларация с инициализацией счетчика цикла
//i < 10;проверка возможности запуска следующего цикла (пока условие истинно)
//i++; изменение счетчика цикла
for ( int i = 0 ; i < 10 ; i++) //исполняемая часть кода при каждом новом цикле
//в данном примере, заполнение массива числами от 0 до 9
numbers [i] = i;
> Хоть это и не обязательно, но советую использовать в счетчиках циклов целые значения, чтобы избежать ошибок от дробных вычислений.

while:
Этот цикл выполняется пока условие истинно. //для примера, декларация массива на 10 целых элементов
public int [] numbers = new int [ 10 ];
//декларация с инициализацией переменной к, которую будем использовать для проверки условия цикла
int k = 9 ;

//проверка условия цикла, выполнить цикл, если условие истинно
while (k >= 0 ) //выполняемый фрагмент кода в фигурных скобках
//заполнение массива числами от 9 до 0 в обратном порядке
numbers [k] = k; //уменьшение переменной на 1 (чтобы получить ложное условие)
k—;
> Будьте осторожны с циклами, чтобы не получить «вечный» цикл, когда условие всегда истинно и цикл повторяется вечно.

do. while:
Отличие этого цикла от цикла while только в том, что проверка условия производится после выполнения фрагмента кода. Поэтому этот цикл выполнится всегда как минимум один раз. //декларация публичной текстовой переменной
public string testText;
//декларация и инициализация целой переменной, для условия цикла
int j = 0 ;

//выполнение фрагмента кода цикла
do //добавление к текстовой переменной цифры преобразованной в текстовый символ
testText = testText + j.ToString();
//увеличение j на единицу
j ++;
//проверка условия, повторить цикл, если условие истинно
> while (j < 10 );
//результат работы цикла это текст «0123456789»
foreach:
Цикл для работы с массивами. Перебирает все элементы по одному. //декларация и инициализация массива
int [] numbers = new int [ 5 ] < 21 , 28 , 13 , 4 , 15 >;
//декларация массива для копирования
int [] numbersCopy = new int [ 5 ];

//вспомогательная переменная для индекса массива
int i = 0 ;
//запуск цикла проходяшего по всем элементам массива
//переменная number должна совпадать с типом элементов массива
foreach ( int number in numbers) //копирование текущего элемента в другой массив
numbersCopy [i] = number;
//увеличение индекса на 1, для доступа к следующему элементу в массиве для копии
i++;
>
//итог цикла это копирование элементов в новый массив
операторы break и continue:
Эти операторы помогают управлять исполнением циклов.
break — этот оператор полностью прекращает цикл и переходит к дальнейшему исполнению программы
continue — этот оператор прекращает текущее исполнение цикла и начинает новое
//вспомогательная переменная для индекса массива
int i = 0 ;
//запуск цикла проходяшего по всем элементам массива
//переменная number должна совпадать с типом элементов массива
foreach ( int number in numbers) //копирование текущего элемента в другой массив
numbersCopy [i] = number;
//увеличение индекса на 1, для доступа к следующему элементу в массиве для копии
i++;
//как переменная для индекса стала равна 3, прекращаем исполнение цикла
if (i == 3 )
break ;
>

10. Функции:

Функция это обособленный фрагмент кода для выполнения определенной задачи. Функция может вызываться многократно в тех случаях, когда нужно решить эту задачу. Это позволяет избежать повторения кода. Функции могут быть как сделанные вами индивидуально для достижения ваших целей, так и заготовками от Юнити для стандартных решений. Функции являются частью классов. Функции, как и переменные, имеют различные уровни доступа. К public функциям возможен доступ из других классов, доступ к private функциям возможен только внутри их содержащих классов. Для работы функциям могут понадобиться входные данные — аргументы (функции могут использовать и глобальные переменные их содержащих классов). После своей работы функция может возвращать какой-то результат (используйте Return для возвращения результата). Тип функции должен соответсвовать типу возвращаемого результата. Существуют и функции не возвращающие результат, такие функции имеют тип void.

Spoiler стандартные функции от Юнити:
Существует много различных функций в Юнити. Тут я точно не смогу показать и малой части. Поэтому пока ограничимся несколькими примерами. В дальнейшем в туториалах будут попадаться и новые функции.

Instantiate:
Эта функция помещает клон объекта в сцену. Обычно используется для клонирования префаба(образца). //создаёт клон префаба в сцене на заданной позиции (Vector3) с заданным вращением (Quaternion)
Instantiate (prefab, position, rotation); Destroy:
Эта функция удаляет объект из сцены. //удаляет игровой объект из сцены после заданного интервала (или сразу, если время не указать)
Destroy (gameobject, time); функции классов:
Часто, если используете какой-то компонент (класс), то он содержит различные функции для работы с ним. Список этих функций можно увидеть в редакторе C# после набора ссылочной переменной (+ точка) указывающей на этот компонент. //изменяет дробную переменную в компоненте аниматор
GetComponent < Animator >().SetFloat ( «Speed» , 0 );
функции пользователя:
Конечно можно использовать и свои функции для выполнения нужных задач. //функция нанесения повреждений
public void DoDamage ( int damage) hp = hp — damage;
if (hp Destroy (gameObject);
>

11. События:

События похожи на функции, только их запуск привязан к различным событиям. Приведу только несколько примеров.

Spoiler void Awake() //это событие вызывается один раз при загрузке скрипта. Обычно используется для инициализации объектов.
void Awake() //C#
> void Start() //это событие вызывается один раз после того, как все void Awake() были выполнены. Используется для инициализации переменных.
void Start() //C#
> void Update() //это событие вызывается заново каждый новый кадр. Обычно содержит основной код для управления игровым объектом.
void Update() //C#
> void LateUpdate() //это событие вызывается заново каждый новый кадр после обработки всех Update(). Обычно используется для управления камерой, чтобы отрисовать уже готовую сцену.
void LateUpdate() //C#
> void FixedUpdate() //это событие вызывается через фиксированный интервал (стандарт 0.02). Используется в расчетах физики (физика не считается в Юнити каждый кадр).
void FixedUpdate() //C#
> OnTriggerEnter2D()
Возможны и другие варианты срабатывания триггера (Enter, Exit, Stay). //это событие вызывается при попадании коллайдера2Д в триггер2Д. Переменная other будет содержать ссылку на попавший в триггер объект.
void OnTriggerEnter2D( Collider2D other) //C#
>

Не работают скрипты в Unity3D.

Пробовал убирать лишние библиотеки, менять значения. Короче говоря все пробовал, но чет все равно не запускается.

Фотографии ниже.

Дополнен 6 лет назад
Ни появление на заданных координатах, ни перемещение не работает..
Дополнен 6 лет назад
Результат тот же как и без кода, облачко падает без перемещения
Лучший ответ

1)Во-первых надо было поменять тип сохраненя скрипта (тут до меня дошло что сохраняется не так как надо)
2)Во-вторых, надо мыло к спрайту привязать скрипт через «Add component»;
3) Поменять код: using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Oblachko : MonoBehaviour

// Use this for initialization
void Start () transform.position = new Vector3(-12, 0.51f, -1f);
>

// Update is called once per frame
void Update ()

transform.Translate(new Vector2(0.1f, 0)*Time.deltaTime);
if (transform.position.x > 5)
Destroy(gameObject);
>
>
>

Самед МусаевЗнаток (377) 6 лет назад
Пхах, лол) Только спустя 10 минут понял что мыло-это облачко))
Остальные ответы
попробуй transform.Translate(Vector2.left * Time.deltaTime);
Самед МусаевЗнаток (377) 6 лет назад
не, не работает, и самое обидное что unity у меня официальное, с сайта, а тут такие вот баги..

Сергей Шиманский Мудрец (11088) это не баги, это от непонимания. в таком случае надо делать через transform.position.x или как то ещё, способов много, а в документации я не видел чтобы Translate принимал vector2

Ты 3 координату не поставил.

вот те универсальная инструкция, я нашел сотни уроков:

1. в ютубе забей: как создать 2d игру и дописывай по одному: game maker, blender 3d, unity 5. начни с 2d — меньше возни с графикой, кодом. начни с дна. это «скелет и мясо» твоей игры.
2. выбери ЯП — это «мозги» для твоей игры.
3. сначала сделай версию для ПК, ибо тут меньше проблем и народу тьма.
4. не строй имперские планы, начни с малого.
5. сначала сделай что-то бесплатное, выложить можешь тут: small-games info, vsetop com. там твою игру быстро проверят и оценят. атм есть раздел создание игр. смотри. зарегайся, спрашивай на форуме там же.
——-
по five night at freddy’s на gamejolt com при поиске выдает больше 100 клонов. в ютубе смотри прохождения, five night at (wario’s, crusty crubs, tomas) будет хоть основа.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *