Unity

Установка
 Установить Unity Hub
 Переназначить папку хранения Unity x.x.x в  Unity Hub
 Найти в архиве Unity 2019.3.12
 Автоматическая установка IDE Microsoft Visual Studio x Community


Создание Приложения для платформ
1. PC
2. Android

ЦИКЛ работы перемотки Плеера{
обработка Json (получить time,video)
вычисление расхождения DELTA > 0.9f сек
time + 1.0f (добавление секунды к серверному времени)
вызов метода Play
выполнение метода Start (блокирование выполнения Json)
вызов функции Seek
изменение кадра плеера (время выполнения от 0.5~1.5 реже до 3.0 сек)
выполнение метода seekCompleted после изменения кадра (воспроизведение и разблокировка выполнения Json)
}

https://www.youtube.com/watch?v=-qNo1jloR_k

https://www.youtube.com/watch?v=mz9xfDQ4FCk

https://www.fandroid.info/kak-poluchit-spisok-vseh-ustanovlennyh-prilozhenij-na-android/
<br>
видимость библиотек java для unity{
https://github.com/googlesamples/unity-jar-resolver/issues/145
}

фильтр на установленные приложения (Java){

Assets\plugins\Android\getPackages.java{
package com.bo52.Room2;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import androidx.appcompat.app.AppCompatActivity;

public class getPackages{
public String checkForLaunchIntent() {
packageManager = getPackageManager();
List#l#ApplicationInfo> list=packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

String S="";
for(ApplicationInfo info : list) {
try{
if(packageManager.getLaunchIntentForPackage(info.packageName) != null) {
S+=info.packageName+"\n";
}
}
catch(Exception e) {
e.printStackTrace();
}
}

return S;
}
}
}
}

 

Автозапуск приложения{
https://www.youtube.com/watch?v=G4-bPjhe2A4
https://codinginflow.com/tutorials/android/start-app-on-boot
http://developer.alexanderklimov.ru/android/theory/boot.php
<br>
Android Studio{
adb terminal{
https://www.youtube.com/watch?v=JiKTTBJS7AA
}
}
AndroidManifest в Unity{
Project\Temp\StagingArea\AndroidManifest.xml скопировать в Project\Assets\plugins\Android\AndroidManifest.xml
}
ошибка adb{
Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED{
игнорирование этой ошибки
запрет на выполнение BOOT_COMPLETED
C:\adb>adb shell
pacific:/ $ am broadcast -a android.intent.action.BOOT_COMPLETED com.bo52.Room2
Broadcasting: Intent #ll#act=android.intent.action.BOOT_COMPLETED pkg=com.bo52.Room2 #rr#
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED from pid=2767, uid=2000
at android.os.Parcel.readException(Parcel.java:1692)
at android.os.Parcel.readException(Parcel.java:1645)
at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:3546)
at com.android.commands.am.Am.sendBroadcast(Am.java:785)
at com.android.commands.am.Am.onRun(Am.java:412)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:51)
at com.android.commands.am.Am.main(Am.java:124)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:262)
}
}
решение задачи{
project\Assets\plugins\Android\AndroidManifest.xml{#l#?xml version="1.0" encoding="utf-8"?>
#l#manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.bo52.Room2" xmlns:tools="http://schemas.android.com/tools" android:installLocation="preferExternal">
#l#uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
#l#supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
#l#application
android:allowBackup="true"
android:supportsRtl="true"
android:theme="@style/UnityThemeSelector" 
android:icon="@mipmap/app_icon" 
android:label="@string/app_name">
#l#activity 
android:name="com.unity3d.player.UnityPlayerActivity" 
android:label="@string/app_name" 
android:screenOrientation="fullSensor" 
android:launchMode="singleTask" 
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density" android:hardwareAccelerated="false">
#l#intent-filter>
#l#action android:name="android.intent.action.MAIN" />
#l#category android:name="android.intent.category.LAUNCHER" />
#l#/intent-filter>
#l#meta-data android:name="unityplayer.UnityActivity" android:value="true" />
#l#meta-data android:name="android.notch_support" android:value="true" />
#l#/activity>
#l#receiver
android:name=".BootCompletedReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
#l#intent-filter>
#l#action android:name="android.intent.action.BOOT_COMPLETED" />
#l#/intent-filter>
#l#/receiver>
#l#meta-data android:name="unity.build-id" android:value="561ae6d0-da46-420b-867c-7f3f0417ce6d" />
#l#meta-data android:name="unity.splash-mode" android:value="0" />
#l#meta-data android:name="unity.splash-enable" android:value="False" />
#l#meta-data android:name="notch.config" android:value="portrait|landscape" />
#l#/application>
#l#uses-feature android:glEsVersion="0x00020000" />
#l#uses-permission android:name="android.permission.INTERNET" />
#l#uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
#l#uses-feature android:name="android.hardware.touchscreen" android:required="false" />
#l#uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
#l#uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
#l#/manifest>
}
project\Assets\plugins\Android\BootCompletedReceiver.java{
package com.bo52.Room2;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.unity3d.player.UnityPlayerActivity;
public class BootCompletedReceiver extends BroadcastReceiver {@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
Intent i = new Intent(context, UnityPlayerActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
}
настроить переменные среды {
Свойства системы\Переменные среды\Создать => C:\Users\Имя\AppData\Local\Android\Sdk\platform-tools
}
install.bat{
adb devices
adb uninstall com.bo52.Room2
adb install room.apk
pause
}
запустить приложение на устройстве один раз
}
}

Подкатегории

  1. класс создаётся в виде скрипта
  2. все классы хранятся в файле формата cs от С#
  3. имя класса соотвествует имени файла, в котором находится сам класс
  4. по умолчанию пустой класс C#  наследует класс MonoBehaviour от Unity
  5. класс может иметь свои или наследуемые методы
  6. класс может объявляться с присваиванием значений по умолчанию для полей
  7. класс может привязывается к игровому объекту сцены unity если наследует класс MonoBehaviour 

Без вызова Экземпляра
 Класс
  статическая get,set статического класса
  статическая функция статического класса
  статическая метод-функция класса
Класс предка MonoBehaviour
  статическая get,set класса предка MonoBehaviour
  статическая метод-функция класса предка MonoBehaviour

Вызвать Экземпляр
 Класс
  get,set класса
  метод-функция класса
 Класс предка MonoBehaviour
  get,set  класса предка MonoBehaviour
  метод-функция  класса предка MonoBehaviour

Функция
 объявление локальной переменной внутри функции неявно или типизированным способом
Класс
 объявление поля только типизированным способом

ключевые слова в C#

применяется для определения или разрешения использования типов как пространств имен

Модуль - сборка 

  1. настройка среды разработки для С# или JavaScript для скрипта
    Edit\Preferences..\External Tools\External Script Editor="Visual Studio 2017 (Comminity)"
  2. редактор сцены или уровня
    File\Open Scene... -> Assets\Scenes\SampleScene.unity
  3. настройка свойств объекта в инспекторе
  4. управление объектами в виде иерархического дерева
  1. создание проекта
    UnityHub\Projects\Add\{Version}{3D}{ProjectName}{Location}\Create->открывается Редактор
  2. сохранение проекта
    в Редакторе -> File\Save Project
  3. открыть проект
    UnityHub\Projects\->выбрать проект
  • открыть Проект
  • первая созданная сцена Unity
    File\Open Scene... -> Assets\Scenes\SampleScene.unity
  • создать новую сцену
    File\New Scene... -> Assets\Scenes\...\New.unity
  • сохранить текущую сцену
    File\Save
    File\Save As... -> Assets\Scenes\...\New.unity
  • GameObject
  • Базовый класс для всех объектов на сценах Unity
    создание пустого игрового объекта на сцене Unity
    открыть Сцену->Tab Hierarchy -> RBM (Right Button Mouse)-> Create Empty

Инспектор

Компоненты

  • гайки и болты Игровых Объектов и поведения в игре
  • Они являются функциональными частями каждого Игрового Объекта
    Фундаментальный объект в сценах Unity, который может представлять персонажей, реквизиты, пейзажи, камеры, путевые точки и многое другое
  1. открыть проект
  2. настройка среды разработки для С# или JavaScript в Редакторе для скриптов
    Edit\Preferences..\External Tools\External Script Editor="Visual Studio 2017 (Comminity)"
  3. создание пустого скрипта С#
    в Редакторе Tab Project->директория->RBM (Right Button Mouse)->create\C# Script ->Имя.cs (имя соотвествует имени класса в самом файле)

Все основные элементы языка C# для создания скриптов на Unity

для шейдера
от Unity
описательный язык программирования шейдера
cодержит в себе шейдерный код CG
обеспечивает взаимодействие с инспектором и материалом
включает в себя встроенные переменные и функции, облегчающие процесс написания шейдера
описывает свойства шейдера
содержит множество решений для различного графического оборудования

Каналы youtube

{

TheGameDev

{

Shader Forge часть 1

{

тесселяция dx11

}

Shader Forge часть 2

{

Custom Lighting

{

закручивание

ломка текстуры при помощи каналов цвета

плавная периодичность ломки текстуры

накладывание двух текстур

встроенная анимация

}

Lit (Basic)

{

тесселяция

}

Post Effect для камеры

{

тип шейдера

красивая загрузка

Game over

}

Shader Forge часть 3

{

ZWrite

глубина отрисовки объекта за стеной

}

}

}