Видеоуроки
Interface
Essentials
Advanced
Полезные советы
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Настройки и предпочтения
Работа с проектами
Настройка параметров узла
Setting Up Materials
Setting Up Properties
Освещение
Landscape Tool
Sandworm (Experimental)
Использование инструментов редактора для конкретных задач
Extending Editor Functionality
Встроенные объекты
Nodes
Objects
Effects
Decals
Light Sources
Geodetics
World Objects
Sound Objects
Pathfinding Objects
Players
Программирование
Основы
Настройка среды разработки
Примеры использования
UnigineScript
C++
Унифицированный язык шейдеров UUSL
File Formats
Rebuilding the Engine Tools
GUI
Двойная точность координат
API
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Art Samples
Tutorials

Создание C# приложения

A Unigine-based application can be implemented by means of C# only, without using UnigineScript. This article describes how to create a new Unigine-based C# application on Windows platform.Приложение на основе Unigine может быть реализовано только с помощью C#, без использования UnigineScript. В этой статье описывается, как создать новое приложение C# на основе Unigine на платформе Windows.

Implementation by using the C# language is very similar to C++. Read the Creating C++ Application article to get basic principles.Реализация с использованием языка C# очень похожа на C ++. Прочтите статью Создание приложения C ++ , чтобы ознакомиться с основными принципами.

Примечание
  • C# (.NET Core) API is cross-platform (recommended).C# (.NET Core) API является кроссплатформенным (рекомендуется) .
  • C# (.NET Framework) API is supported on Windows only.C# (.NET Framework) API поддерживается только в Windows.

See AlsoСмотрите также#

  • Examples located in the <UnigineSDK>/source/csharp/samples/Api and <UnigineSDK>/source/csharp/samples/App folders.Примеры находятся в папках <UnigineSDK>/source/csharp/samples/Api и <UnigineSDK>/source/csharp/samples/App.
  • The article on Setting Up Development Environment to learn more on how to prepare the development environment.Статья о настройке среды разработки , чтобы узнать больше о том, как подготовить среду разработки.

Creating Empty C# ApplicationСоздание пустого приложения C##

It is very easy to start your own C# project by using UNIGINE SDK Browser:Начать свой собственный проект C# очень просто с помощью UNIGINE SDK Browser:

  1. Open the UNIGINE SDK Browser.Откройте браузер UNIGINE SDK.
  2. Go to the Projects tab and click CREATE NEW.
    Перейдите на вкладку Projects и нажмите CREATE NEW.
  3. Specify the following parameters:
    • Project name — specify the name of your project.Project name — specify the name of your project.
    • Location — specify the path to your project folder.Location — specify the path to your project folder.
    • SDK — choose the Unigine SDK.SDK — choose the Unigine SDK.
    • API+IDE — choose either of the two options: C# (.NET Core) or C# (.NET Framework) depending on how you plan to implement your logic.
      Примечание
      Choose C# (.NET Core) to start working with the C# API with the Component System available.Choose C# (.NET Core) to start working with the C# API with the Component System available.
      Choose C# (.NET Core) to start working with the C# API with the Component System available.
      API+IDE — choose either of the two options: C# (.NET Core) or C# (.NET Framework) depending on how you plan to implement your logic.
      Примечание
      Choose C# (.NET Core) to start working with the C# API with the Component System available.Choose C# (.NET Core) to start working with the C# API with the Component System available.
    • Architecture — specify the architecture of your target platform.Architecture — specify the architecture of your target platform.
    • Precision — specify the precision. In this example we will use double precision.Precision — specify the precision. In this example we will use double precision.
    Примечание
    Read more about these parameters in this article.Read more about these parameters in this article.
    Project name — specify the name of your project.Location — specify the path to your project folder.SDK — choose the Unigine SDK.API+IDE — choose either of the two options: C# (.NET Core) or C# (.NET Framework) depending on how you plan to implement your logic.
    Примечание
    Choose C# (.NET Core) to start working with the C# API with the Component System available.Choose C# (.NET Core) to start working with the C# API with the Component System available.
    Choose C# (.NET Core) to start working with the C# API with the Component System available.Architecture — specify the architecture of your target platform.Precision — specify the precision. In this example we will use double precision.Read more about these parameters in this article.
    Укажите следующие параметры:
    • Project name — specify the name of your project.Project name - укажите название вашего проекта.
    • Location — specify the path to your project folder.Location - укажите путь к папке вашего проекта.
    • SDK — choose the Unigine SDK.SDK - выбираем Unigine SDK.
    • API+IDE — choose either of the two options: C# (.NET Core) or C# (.NET Framework) depending on how you plan to implement your logic.
      Примечание
      Choose C# (.NET Core) to start working with the C# API with the Component System available.Choose C# (.NET Core) to start working with the C# API with the Component System available.
      Choose C# (.NET Core) to start working with the C# API with the Component System available.
      API+IDE - выберите один из двух вариантов: C# (.NET Core) или C# (.NET Framework) в зависимости от того, как вы планируете реализовать свою логику .
      Примечание
      Choose C# (.NET Core) to start working with the C# API with the Component System available.Выберите C# (.NET Core), чтобы начать работу с C# API с доступной Component System .
    • Architecture — specify the architecture of your target platform.Architecture - укажите архитектуру вашей целевой платформы.
    • Precision — specify the precision. In this example we will use double precision.Precision - указать точность. В этом примере мы будем использовать двойную точность .
    Примечание
    Read more about these parameters in this article.Подробнее об этих параметрах читайте в этой статье .
  4. Click the Create New Project button. The project will appear in the projects list.
    Щелкните кнопку Create New Project. Проект появится в списке проектов.

You can run your project by clicking the Run button.Вы можете запустить свой проект, нажав кнопку Run.

Примечание
By default, in the world script file a WorldLight and a PlayerSpectator are created. You can leave functions of the world script empty, and create your own lights and players by using C#.По умолчанию в файле world script создаются WorldLight и PlayerSpectator. Вы можете оставить функции скрипта мира пустыми и создавать свои собственные источники света и проигрывателей с помощью C#.

Implementing C# LogicРеализация логики C##

C# logic can be implemented using either of the following APIs:Логика C# может быть реализована с использованием любого из следующих API:

  • C# (.NET Core) APIa recommended approach for C# projects. It allows using C# Component System enabled by default and integrated into the Editor: this way it is easier to implement your application logic in components and assign them to any node to be executed. A component can be reused for as many nodes as you need without changing anything in it. If a node is renamed or disabled, the component assigned to it does not require any changes due to that. When you change anything in your component's logic, the changes are applied to all nodes having this component assigned. The Editor also provides for running an instance of the application to check the result immediately.C# (.NET Core) API - рекомендуемый подход для проектов C# . Он позволяет использовать C# Component System , включенную по умолчанию и интегрированную в редактор: таким образом проще реализовать логику вашего приложения в компонентах и ​​назначить их любому исполняемому узлу. Компонент можно повторно использовать для любого количества узлов, ничего не меняя в нем. Если узел переименован или отключен, назначенный ему компонент не требует никаких изменений из-за этого. Когда вы изменяете что-либо в логике вашего компонента, изменения применяются ко всем узлам, которым назначен этот компонент. Редактор также позволяет запустить экземпляр приложения для немедленной проверки результата.
  • C# (.NET Framework) API. Code is written using the AppWorldLogic and AppSystemLogic global classes — this approach has some usability limitations. In addition, the Component System is neither enabled, nor integrated with the Editor: working with components is possible only in manual mode via code, using properties. C# (.NET Framework) API. Код пишется с использованием глобальных классов AppWorldLogic и AppSystemLogic - этот подход имеет некоторые ограничения удобства использования . Кроме того, система компонентов не включена и не интегрирована с редактором: работа с компонентами возможна только в ручном режиме через код, используя свойства .
Примечание
When loading a world all NodeReferences it contains are unpacked by default (the hierarchy of NodeReference's contents is attached to it as a child). This is made to simplify working with node references for beginners, to make it the same as in the UnigineEditor. To disable automatic unpacking simply add the following line to the AppSystemLogic.Init() method: World.UnpackNodeReferences = false;При загрузке мира все содержащиеся в нем NodeReferences по умолчанию распаковываются (иерархия содержимого NodeReference прикрепляется к нему как к дочернему). Это сделано для упрощения работы с ссылками на узлы для начинающих, чтобы они выглядели как в UnigineEditor. Чтобы отключить автоматическую распаковку, просто добавьте в метод AppSystemLogic.Init() следующую строку: World.UnpackNodeReferences = false;

In this section we will add logic to the empty C# application project and rotate the material ball that is created by default.В этом разделе мы добавим логику в пустой проект приложения C# и будем вращать material ball, который создается по умолчанию.

C# (.NET Core) ProjectsПроекты C# (.NET Core)#

Let's make the material ball rotate using C# Component System.Давайте заставим material ball вращаться с помощью C# Component System.

Примечание
To engage the C# Component System supported by C# (.NET Core) API, follow the instructions in the C# Component System Usage Example.Чтобы задействовать систему компонентов C#, поддерживаемую API C# (.NET Core), следуйте инструкциям в примере использования системы компонентов C# .
  1. In UNIGINE SDK Browser, choose your C# project created with the C# (.NET Core) option selected as API+IDE, and click the Open Editor button.

    UnigineEditor will open.
    В браузере UNIGINE SDK выберите проект C#, созданный с параметром C# (.NET Core), выбранным как API + IDE, и нажмите кнопку Открыть редактор .

    UnigineEditor will open.
  2. In UnigineEditor, create a new C# component via Asset Browser.

    Let's name it rotator.
    В UnigineEditor создайте новый компонент C# через Asset Browser.

    Давайте назовем его rotator.
  3. By double-clicking a created asset rotator.cs, it will open in the default IDE. Add the following code to this file.
    Исходный код (C#)
    public class rotator : Component
    {
    	public float angle = 30.0f;
    	
    	void Update()
    	{
    		// write here code to be called before updating each render frame
    		node.Rotate(0, 0, angle * Game.IFps);
    	}
    }
    All saved changes of the component source code make the component update with no compilation required when the Editor window gets focus.
    Если дважды щелкнуть созданный актив rotator.cs, он откроется в IDE по умолчанию. Добавьте в этот файл следующий код.
    Исходный код (C#)
    public class rotator : Component
    {
    	public float angle = 30.0f;
    	
    	void Update()
    	{
    		// write here code to be called before updating each render frame
    		node.Rotate(0, 0, angle * Game.IFps);
    	}
    }
    Все сохраненные изменения исходного кода компонента приводят к обновлению компонента без необходимости компиляции, когда окно редактора получает фокус.
  4. Add this component to the material ball. Добавьте этот компонент в файл material ball.
  5. Run an instance of the application by clicking the Play button on the toolbar.
    Запустите экземпляр приложения, нажав кнопку «Воспроизвести» на панели инструментов.

The component can be assigned to any node or nodes without changing anything in it.Компонент можно назначить любому узлу или узлам, ничего не меняя в нем.

C# (.NET Framework) projectsC# (.NET Framework) проекты#

With the approach using only the AppWorldLogic and AppSystemLogic global classes, making the material ball rotate is done as follows.При подходе, использующем только глобальные классы AppWorldLogic и AppSystemLogic, вращение material ball выполняется следующим образом.

  1. In the UNIGINE SDK Browser, choose your C# project and click the Open Code IDE button.

    Visual Studio will open.
    В браузере UNIGINE SDK выберите свой проект C# и нажмите кнопку Open Code IDE.

    Visual Studio откроется.
  2. In Visual Studio, add the following code in your project's AppWorldLogic.cs file.
    Исходный код (C#)
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Unigine;
    
    namespace UnigineApp
    {
    
    	class AppWorldLogic : WorldLogic
    	{
    		// define pointer to node
    		Node node;
    
    		public override bool Init()
    		{
    			// find the material ball node by its name
    			node = World.GetNodeByName("material_ball");
    			return true;
    		}
    
    		public override bool Update()
    		{
    			// set the transformation to the node
    			float angle = 30.0f;
    			node.Rotate(0, 0, angle * Game.IFps);
    			return true;
    		}
    	}
    }
    ВVisual Studioдобавьте следующий код в файл AppWorldLogic.cs вашего проекта.
    Исходный код (C#)
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Unigine;
    
    namespace UnigineApp
    {
    
    	class AppWorldLogic : WorldLogic
    	{
    		// define pointer to node
    		Node node;
    
    		public override bool Init()
    		{
    			// find the material ball node by its name
    			node = World.GetNodeByName("material_ball");
    			return true;
    		}
    
    		public override bool Update()
    		{
    			// set the transformation to the node
    			float angle = 30.0f;
    			node.Rotate(0, 0, angle * Game.IFps);
    			return true;
    		}
    	}
    }
  3. Build your project by clicking Build -> Build Solution in Visual Studio.
    Создайте свой проект, щелкнув Build -> Build Solution в Visual Studio.
  4. Start your project by clicking Debug -> Start in a proper mode in Visual Studio.
    Начните свой проект, щелкнув Debug -> Start в соответствующем режиме в Visual Studio.
Примечание
To run your project from SDK Browser, specify the path to the .exe file of your C# project in SDK Browser by customizing Run Project.Чтобы запустить проект из браузера SDK, укажите путь к файлу .exe вашего проекта C# в браузере SDK, настроив Run Project.

This approach has some usability limitations: Этот подход имеет некоторые ограничения удобства использования:

  • If a node name has been changed, code wouldn't work.Если имя узла было изменено, код работать не будет.
  • If you run a world that does not contain a node AppWorldLogic refers to, the application will crash.
    Примечание
    For each world of the project, one and the same AppWorldLogic is called. It is impossible to link an individual AppWorldLogic to each world.For each world of the project, one and the same AppWorldLogic is called. It is impossible to link an individual AppWorldLogic to each world.
    For each world of the project, one and the same AppWorldLogic is called. It is impossible to link an individual AppWorldLogic to each world.
    Если вы запустите мир, не содержащий узла, на который ссылается AppWorldLogic, приложение выйдет из строя.
    Примечание
    For each world of the project, one and the same AppWorldLogic is called. It is impossible to link an individual AppWorldLogic to each world.Для каждого мира проекта вызывается один и тот же AppWorldLogic. Невозможно привязать отдельный AppWorldLogic к каждому миру.

Using Components in C# (.NET Framework) projectsИспользование компонентов в проектах C# (.NET Framework)#

Unlike .NET Core, where C# Component System is enabled by default and integrated into the Editor, working with components in .Net Framework requires running the system manually and creating components via properties, which connect code with nodes in UnigineEditor. For example:

Исходный код (C#)
class AppSystemLogic : SystemLogic
	{
		public override bool Init()
		{
			// initialize C# Component System
			ComponentSystem.Enabled = true;
			
			// generate all property files inside /data folder for all components
			ComponentSystem.SaveProperties();
		
			return true;
		}
	}
В отличие от.NET Core, где C# Component System включена по умолчанию и интегрирована в редактор, работа с компонентами в.Net Frameworkтребует запуска системы вручную и создания компонентов через properties , которые соединяют код с узлами в UnigineEditor. Например:

Исходный код (C#)
class AppSystemLogic : SystemLogic
	{
		public override bool Init()
		{
			// initialize C# Component System
			ComponentSystem.Enabled = true;
			
			// generate all property files inside /data folder for all components
			ComponentSystem.SaveProperties();
		
			return true;
		}
	}

If you don't want to use UnigineEditor, you can add components to nodes directly via code without calling SaveProperties():

Исходный код (C#)
ComponentSystem.AddComponent<MyComponent>(node);
Если вы не хотите использовать UnigineEditor, вы можете добавлять компоненты в узлы напрямую через код, не вызываяSaveProperties():

Исходный код (C#)
ComponentSystem.AddComponent<MyComponent>(node);
Последнее обновление: 17.11.2020