Создание 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 ++ , чтобы ознакомиться с основными принципами.
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:
- Open the UNIGINE SDK Browser.Откройте браузер UNIGINE SDK.
- Go to the Projects tab and click CREATE NEW.
Перейдите на вкладку Projects и нажмите CREATE NEW.
- 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 C# (.NET 5).
- Precision — specify the precision. In this example we will use double precision.Precision — specify the precision. In this example we will use double precision.
Project name — specify the name of your project.Location — specify the path to your project folder.SDK — choose the Unigine SDK.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.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.
- Precision — specify the precision. In this example we will use double precision.Precision - указать точность. В этом примере мы будем использовать двойную точность .
Read more about these parameters in this article.Подробнее об этих параметрах читайте в этой статье . - 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.
Implementing C# LogicРеализация логики C##
Логика C# может быть реализована с использованием любого из следующих API:
- C# (.NET Core) API - рекомендуемый подход для проектов C# . Он позволяет использовать C# Component System , включенную по умолчанию и интегрированную в редактор: таким образом проще реализовать логику вашего приложения в компонентах и назначить их любому исполняемому узлу. Компонент можно повторно использовать для любого количества узлов, ничего не меняя в нем. Если узел переименован или отключен, назначенный ему компонент не требует никаких изменений из-за этого. Когда вы изменяете что-либо в логике вашего компонента, изменения применяются ко всем узлам, которым назначен этот компонент. Редактор также позволяет запустить экземпляр приложения для немедленной проверки результата.
- C# (.NET Framework) API. Код пишется с использованием глобальных классов AppWorldLogic и AppSystemLogic - этот подход имеет некоторые ограничения удобства использования . Кроме того, система компонентов не включена и не интегрирована с редактором: работа с компонентами возможна только в ручном режиме через код, используя свойства .
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)#
Давайте заставим material ball вращаться с помощью C# Component System.
- В браузере UNIGINE SDK выберите проект C#, созданный с параметром C# (.NET Core), выбранным как API + IDE, и нажмите кнопку Открыть редактор .
- In UnigineEditor, create a new C# component via Asset Browser.
Let's name it rotator. В UnigineEditor создайте новый компонент C# через Asset Browser.
Давайте назовем его rotator. - By double-clicking a created asset rotator.cs, it will open in the default IDE. Add the following code to this file.
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 по умолчанию. Добавьте в этот файл следующий код.
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); } }
Все сохраненные изменения исходного кода компонента приводят к обновлению компонента без необходимости компиляции, когда окно редактора получает фокус.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); } }
- Add this component to the material ball. Добавьте этот компонент в файл material ball.
- 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) проекты#
При подходе, использующем только глобальные классы AppWorldLogic и AppSystemLogic, вращение material ball выполняется следующим образом.
- В браузере UNIGINE SDK выберите свой проект C# и нажмите кнопку Open Code IDE.
Visual Studio откроется. - ВVisual Studioдобавьте следующий код в файл AppWorldLogic.cs вашего проекта.
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; } } }
- Создайте свой проект, щелкнув Build -> Build Solution в Visual Studio.
- Начните свой проект, щелкнув Debug -> Start в соответствующем режиме в Visual Studio.
Этот подход имеет некоторые ограничения удобства использования:
- Если имя узла было изменено, код работать не будет.
- Если вы запустите мир, не содержащий узла, на который ссылается AppWorldLogic, приложение выйдет из строя.
Для каждого мира проекта вызывается один и тот же AppWorldLogic. Невозможно привязать отдельный AppWorldLogic к каждому миру.
Использование компонентов в проектах C# (.NET Framework)#
В отличие от.NET Core, где C# Component System включена по умолчанию и интегрирована в редактор, работа с компонентами в.Net Frameworkтребует запуска системы вручную и создания компонентов через properties , которые соединяют код с узлами в UnigineEditor. Например:
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;
}
}
Если вы не хотите использовать UnigineEditor, вы можете добавлять компоненты в узлы напрямую через код, не вызываяSaveProperties():
ComponentSystem.AddComponent<MyComponent>(node);