Unity(Unity3D)は、Unity Technologies(日本法人はユニティ・テクノロジーズ・ジャパン株式会社)が開発・販売している、IDEを内蔵するゲームエンジンである。主にC#を用いたプログラミングでコンテンツの開発が可能である。PC(Windows、macOS)だけでなくモバイル(iOS、Android)やウェブブラウザ(WebGL)、家庭用ゲーム機(PlayStation 4、Xbox One、Nintendo Switch等)といったクロスプラットフォームに対応しており、VR/AR/MR機器向けのコンテンツ開発にも対応している。
2004年にデンマークで設立されたOver the Edge Entertainment (OTEE)が2005年に公開したゲーム開発ツールで、2007年に社名がUnity Technologiesに変更された。Unityを使って開発または運営したコンテンツの月間アクティブユーザー数は28億人を超えており、主にモバイルゲームで大きなシェアを持つが家庭用ゲーム機やゲーム以外の様々な業界、産業でのアプリケーション、テクノロジーなどで幅広く利用されている。
機能 レンダリング グラフィックエンジンはDirect3D (Windows)、OpenGL (Mac, Windows, Linux)、OpenGL ES (Android, iOS)、Metal (macOS, iOS, tvOS)、Vulkan (Android)、プロプライエタリのAPIを使用。バンプマッピング、環境マッピング、視差マッピング、スクリーンスペースアンビエントオクルージョン(SSAO)、シャドウマップを使ったダイナミック・シャドウ、、フルスクリーンポストプロセッシングエフェクトに対応している。
また、3ds Max、Maya、Softimage、Blender、modo、ZBrush、3D-Coat、Cinema 4D、Cheetah3D、Adobe Photoshop、Adobe Fireworks、Allegorithmic Substanceのアートアセットとファイル形式に対応しており、これらのアセットをゲームプロジェクトに追加したり、Unityのグラフィカルユーザーインターフェースで管理することができる。
ShaderLabの言語はシェーダーのために使用され、固定機能パイプラインとGLSLやCg/HLSLで書かれたシェーダープログラム両方の宣言型「プログラミング」に対応しているUnity - マニュアル: シェーダー: 頂点およびフラグメントプログラム Unity - マニュアル: コンピュートシェーダー。シェーダーは複数のバリエーションや宣言されたフォールバック仕様を含むことができるため、Unityは現在使用しているビデオカードに最もよいバリエーションを検出したり、互換性が無い場合でも性能を出すために機能を犠牲にできる代替のシェーダーにフォールバックすることができる。また、NVIDIA(かつては)のPhysX物理エンジンを内蔵サポートしており、Unity 3.0では任意メッシュおよびスキンメッシュでのリアルタイムクロスシミュレーション、シックレイキャスト、衝突レイヤーへの対応が追加された。
Unityはレンダリングパイプラインとしてbuilt-in Rendering PipelineとScriptable Render Pipeline(SRP)をもつ。SRPを用いればC#によってレンダリングパイプラインを構築できる。Unity社による構築済みSRPとしてUniversal Render Pipeline(URP)とHDRPが提供されているThe Universal Render Pipeline (URP) is a prebuilt Scriptable Render Pipeline, made by Unity. Unity2020.1 docsThe High Definition Render Pipeline (HDRP) is a prebuilt Scriptable Render Pipeline, built by Unity. Unity2020.1 docs。
Universal Render Pipeline Universal Render Pipeline(略称: URP)はUnity公式が提供する構築済みSRPである"The Universal Render Pipeline (URP) is a prebuilt Scriptable Render Pipeline, made by Unity." 以下より引用。Unity. Rendering - Render pipelines - Using the Universal Render Pipeline. Unity Documentation, Version 6000.0. 2024-08-11閲覧.。
URPはライティングで特徴づけられるタイプのシェーダーを提供している。
物理ベースシェーディング(Lit & Particles Lit & Complex Lit) エネルギー保存則と微細形状(反射/屈折)This PBS model follows two principles: Energy conservation - ... Microgeometry - ... URP8.2 documents シンプルシェーディング(Simple Lit & Particles Simple Lit) Blinn-PhongモデルThe Shaders do not conserve energy. This shading model is based on the Blinn-Phong model. URP8.2 documents 焼き込みLitシェーディング Bakedライトのみを反映するシェーダー Unlitシェーディング(Unlit & Particles Unlit) ライティングなし
スクリプティング Unityではプログラミング言語C#を用いてプログラム(ScriptsGlossary - Scripts. Unity Manual)を書くことで、Unityが提供する機能の拡張をおこなうことができる。これをスクリプティングという。
UnityはC#を実行するために以下のフレームワーク(Scripting BackendScripting Backend: A framework that powers scripting in Unity Glossary - Scripting Backend. Unity Manual)を提供しているUnity supports three different scripting backends depending on target platform: Mono, .NET and IL2CPP. Glossary - Scripting Backend. Unity Manual。
Mono .NET IL2CPP
すべてのScripting Backendにおいて、フロントエンド(C# to CIL)にはRoslynが用いられているC# language version C# 7.3 Unity User Manual (2019.2) - C# compiler。Unity 2019.2現在のC#バージョンはC# 7.3である。
IL2CPP IL2CPPはUnity社が独自開発したScripting BackendであるIL2CPP (Intermediate Language To C++) is a Unity-developed scripting backend Unity User Manual (2019.2) -IL2CPP。IL2CPPを用いた場合、フロントエンドによって生成されたILはネイティブコードに(JITあるいはAOTで)変換されるのではなく、C++コードへといったん変換されるWhen building a project using IL2CPP, Unity converts IL code from scripts and assemblies to C++, before creating a native binary file Unity User Manual (2019.2) -IL2CPP。その後C++コンパイラによってネイティブコードにコンパイルされる。
Burst 最適化されたC#スクリプトを対象にしたコンパイラバックエンドとしてBurst(Burst Compiler)があるAlexandre MUTEL / Tech Lead on burst, Unity Technologies (2019) Behind The Burst Compiler. (PDF ver.)。
BurstはUnity 2019.1から正式提供されているバックエンドであるBurst コンパイラーは 2019.1 でプレビュー版から正式版になります。 Unity 2019.1 リリース. Unity BlogReleased packages Burst Unity User Manual (2019.2) -Packages documentation。BurstはILをLLVMを介してネイティブコードへコンパイルするBurst is a compiler that translates from IL/.NET bytecode to highly optimized native code using LLVM. Burst User Guide. Unity。いくつかの制限が課せられたC#(HPC#)スクリプトを書きBurstコンパイラを用いることで、従来(例: Mono)に比較して最大10倍程度の高い性能を得ることができる。内部的には、BurstはILからLLVM IRへのトランスパイルを担っており(つまりLLVM目線ではBurstはCIL to IRのコンパイラフロントエンド)、以降の段階でLLVMによる最適化・ネイティブコード生成をおこなうことで非常に高い性能を実現しているBurst is closer to a transpiler than a full compiler ○ Converts IL to IR (similar format) Alexandre MUTEL / Tech Lead on burst, Unity Technologies (2019) Behind The Burst Compiler. (PDF ver.)。
C# Job System C# Job SystemはUnity 2018.1より導入された、C#スクリプトの並列計算支援システムである「C# Job System」は両方とも、今回搭載された大きな新機能の最初のバージョンです。 Unity 2018.1 リリースThe Unity C# Job System lets you write simple and safe multithreaded code C# Job System - Unity Manual 2019.3。C# Job Systemを用いることで、並列計算につきまとう競合やデッドロックを避けながら高い演算性能を利用することができる。
IJobと NativeContainerを基本的な型とする。IJobを継承した構造体であるJobのExecuteメソッドで処理を定義しA “job” is a collective term in Unity for any struct that implements the IJob interface Creating jobs - Unity Manual 2019.3Create a method in your struct called Execute with the implementation of the job inside it. Creating jobs - Unity Manual 2019.3、インスタンス化したJobのScheduleメソッドをメインスレッドにて呼ぶことで、Unityが内部的に提供するJob QueueへJobが登録されるCalling Schedule puts the job into the job queue for execution at the appropriate time Scheduling jobs - Unity Manual 2019.3。計算結果はJobへの入力として渡したNativeContainerを介して取得できる。NativeContainerはガベージコレクションの対象外であるため、結果取得後はNativeContainerを破棄する必要がある。
C# Job SystemはBurstコンパイルとの共用を念頭に設計されており、C# Job Systemで並列化したコードをBurstコンパイルによって最適化すれば非常に高い並列演算性能を得ることができる。2010年代からコンピュータのコア数は増加傾向にあるため、高い並列演算性能を生かして経路探索やアニメーションなどで有効利用できる。例えばAnimation Rigging パッケージのコンストレイント(IKなど)はC# Job Systemを用いて実装されているWhile Animation Rigging is based on the PlayableAPI, all constraints are implemented using Animation C# Jobs. What about Playable API? - Unity Forums。
廃止されたスクリプティング言語・機能 かつてはC#以外にUnityScript(ECMAScriptの影響を受けた構文のカスタム言語)およびBoo(Pythonの影響を受けた言語)も使用可能だった。しかしUnity2018.3をもって完全に廃止されているNew 2018.3.0b11 Entries since 2018.3.0b10 Removed support for compiling UnityScript and Boo scripts. Unity 2018.3.0 Beta 11。また3.0のリリースが始まり、Unityはデバッギングスクリプト向けにMonoDevelopのカスタマイズバージョンを公開した。現在ではMonoDevelopの利用は廃止されている。
アセットトラッキング UnityにはまたUnity Asset Serverという開発者のゲームアセットとスクリプト向けバージョンコントロールソリューションが含まれている。これはバックエンドにPostgreSQLを使用し、オーディオシステムはFMODのライブラリ(Ogg Vorbis圧縮オーディオの再生が可能)で構築され、ビデオ再生はTheoraコーデックを使用、地形と植生エンジン(樹木のビルボーディングやUmbraを使ったオクルージョンカリングに対応)、Beastを使った内蔵ライトマッピングやグローバルイルミネーション、RakNetを使用したマルチプレイヤーネットワーク、内蔵パスファインディングナビゲーションメッシュを使用している。
プラットフォーム 複数のプラットフォームに対応しており、プロジェクトにおいて、開発者は携帯機器、ウェブブラウザ、デスクトップ、ゲーム機への配信をコントロールすることができる。また、ゲームが対応している各プラットフォーム用のや解像度設定を指定することができる。
アセットストア 2010年11月にスタートしたUnity Asset StoreはUnity editorで利用可能なリリースである。このストアには3Dモデル、テクスチャ、マテリアル、パーティクルシステム、音楽、効果音、チュートリアル、プロジェクト、スクリプティングパッケージ、エディタエクステンション、オンラインサービスといった4,400以上のアセットパッケージがある。
また、多くのエクステンション、ツールやタシャレン・エンターテインメントによるNGUI: Next-Gen UIのようなアセットパッケージ、デトックス・スタジオのuScriptといったビジュアルスクリプティングエクステンション、Tidy Tile Mapper、ドップラー・インタラクティブの2D/3Dタイル型ゲームデザインエクステンション、FingerGesturesという入力スクリプティングパッケージhttp://www.mixamo.com/c/mixamo-unity-asset-storeもストアで入手できる。
バージョン 最初のバージョンは2005年にAppleのWorldwide Developers Conferenceで提供が開始された。Mac上で機能やプロジェクトを構築するもので、他のプラットフォーム用のエンジンやツールの開発を継続するのに十分な成功を得た。2010年9月にUnity 3が公開、これはハイエンドなスタジオが所有しているツールを多く導入することに力を入れたものだった。また、自社がインディーズや小規模チームにゲームエンジンを手頃な価格のパッケージとして提供しながら大手の開発企業の関心を取り込むことができた。2012年終わり頃に公開されたバージョン4.0ではMecanimアニメーションやDirectX 11などへの対応がなされた。
Unity 3.5 Unity 3.5はUnityの開発プラットフォームに向けた最も大規模なリリースの1つで、既存技術向けに新機能や改善が図られhttp://www.lynda.com/Unity-D-training-tutorials/1243-0.html、Shurikenパーティクルシステム、向けのNavMesh、障害物回避、線形空間(ガンマ補正)ライティング、HDRレンダリング、マルチスレッドレンダリング、ライトプローブ、Google Native Clientへの対応、再記述された、のビルトイン対応、Adobe Flash Playerのアドオンプレビュー、GPUプロファイラー、指向性ライトマップがそれに当たる。
Unity 4 2012年6月18日に発表されたUnity 4では当初の公開ではいくつかの新機能が追加されることになっていた。リリースサイクルは過去のリリースのようにライフスパンの過程で機能追加などの複数のアップデートがされる予定だったが、将来の4.xのアップデートにより新しいGUIが保留となり、結局リリースされたのは2012年11月14日だった。
DirectX 11の対応やMecanimアニメーションといった新機能が加わった。モバイルグラフィックの機能強化として、リアルタイムシャドウ、スキンメッシュのインスタント化、ライトマップをベイク(焼き込み)したときに通常のマップを使用する機能、GPUプロファイラーの改善が実行された。さらに、Adobe Flashのアドオン対応もなされたが、既にUnity 3.5互換のベータ版ツールで可能となっていた。それでも対応アドオンの最終版ではUnity 4でしか動作しないようになっている。
Unity 4にはまた、デスクトップにゲームを公開するためのオプションも搭載された。アドオンを展開する時は潜在的にLinuxの様々な形式で動作し、主にUbuntuで動作させることに主眼を置いている。この展開オプションは追加料金無しでUnity 4の全ユーザーに提供される。Unityを使う技術者はゲームの標準的なチームにおいてUbuntuを使って作業をしているthree engineers from games company Unity 3D。バージョン4以降、自身のUnity Web Playerを通したソーシャルプラットフォームで改善したUnityのエクスペリエンスを立ち上げるためにFacebookを使った協働作業が行われているhttp://www.marketwatch.com/story/unity-technologies-releases-facebook-functionality-update-to-unity-4-2013-03-26。
Unity 5 2015年3月3日にリリース開始Unity 5 Launch – Unity Blog、2017年12月16日閲覧。。主な変更点は以下の通り。 Unity 4までは有償版のみ使用可能だった機能が、無料版でもすべて使用可能になった荒川 巧也・浅野 祐一『Unity5入門 最新開発環境による簡単3D&2Dゲーム制作』SBクエリエイティブ、2015年、3頁 ライセンス体系がUnity 4までの「Unity Free」(無料版)と「Unity Pro」(有償版)から、「Personal Edition」(無料版)と「Professional Edition」(有償版)に変更された グラフィックス強化 エディタの64ビット対応 IL2CPPの導入によるマルチプラットフォームのサポート強化 Unity Cloud Build(開発者のためのクラウドサービス)の開始
Unity2017 2017年7月11日にリリース開始Unity 2017リリース開始 – Unity Blog、2017年12月16日閲覧。。今まではUnity3,Unity4,Unity5とバージョンで続いて来たがこのサイクルは終了し、Unity2017と発表された。今後はUnity2017.xのサイクルとなる。
新バージョンの追加機能 Timeline SpriteMask Spriteベースのパーティクルアニメーション .NET 4.6の対応 ビルディングオプションでScript Only Buildが可能
Mecanim MecanimとはUnityのアニメーション技術で最初の数年間は同名企業が手がけていたが、その後買収によりUnityのカナダオフィスが手がけている。この技術は効率的なインターフェイスでキャラクターを流体的かつ自然的に動かすように構築している。またMecanimにはステートマシンやブレンドツリー、IKリギングを生成するツールが含まれ、Unity editorでアニメーションを自動的にリターゲットできるようになっているhttp://blog.mixamo.com/uncategorized/mixamo-and-unity-introduce-the-mecanim-animation-store/。
加えて、リターゲット可能なアニメーションのアレイはツールの起動時にUnity Asset Storeで入手できるようになっている。これらのアニメーションファイルの多くはモーションキャプチャーで使用され、ユニティ・テクノロジーズによって無料で提供されている。
他の機能強化 Shurikenパーティクルシステムは外力、ベントノーマル、自動カリングに対応している 3Dテクスチャ対応 ナビゲーション:動的障害物や回避優先度 UnityGUIのパフォーマンスやメモリ使用のメジャーな最適化 HTMLのような記述方式を使った、全プラットフォーム向けのダイナミックフォント Unity Web Playerの遠隔デバッギング 新しいプロジェクトのウインドウワークフロー 反復ライトマップベーキング 改善されたコンポーネント型ワークフロー カスタムクラス向けの拡張インスペクター パイプラインにインポートするキューブマップの改善 巨大なメモリとパフォーマンスの節約のためにジオメトリデータを改善 メッシュを効率的に非三角形ジオメトリのレンダーポイントとラインで構築 プロジェクトウインドウからの検索、ライブプレビュー、Asset Storeでのアセットの購入
Unity2018 2018年5月2日にリリース開始。主な変更点は以下の通りUnity 2018.1 リリース – Unity Blog、2018年7月15日閲覧。。 Unity 2018がメジャーリリース!新機能とUnite Tokyoの発表も解説 | TECH::NOTE|テックノート、2018年7月15日閲覧。 グラフィックス性能の向上 スクリプタブルレンダーパイプライン(プレビュー版) シェーダーグラフ(プレビュー版) - プログラマブルシェーダーをGUIで作成する機能 ポストプロセッシングスタック v2 C# Job System - マルチコアプロセッサによる並列処理機能 ECS (Entity Component System), Burst Compiler(いずれもプレビュー版) によるコード生成の最適化 Unityエディタの多言語対応 C#6.0、.NET standard 2.0、.NET 4.6対応 ProBuilder, PolyBrush - レベルデザイン機能の強化
Unity2019 2019年4月15日にリリース開始。主な改善、変更は以下の通りUnity 2019.1 リリース – Unity Blog、2021年11月6日閲覧。。 AR Foundation(プレビュー) グラフィックスの強化 LWRP(軽量レンダーパイプライン)でのAR Foundationのサポート(プレビュー) ステレオレンダリングモードの自動フォールバック エディターの改善 ダークテーマエディターが全ユーザーで利用可能(2019.4.8f1~ ) HD レンダーパイプライン(HDRP、プレビュー) Input System(プレビュー)
Unity2020 2020.1 2020年7月22日にリリース開始。主な改善、変更は以下の通りUnity 2020.1 が公開されました – Unity Blog、2021年11月6日閲覧。Unity 2020.1 is now available – YouTube、2021年11月6日閲覧。。 パッケージマネージャーの改善 開発者ツールの改善 エディターの改善、強化 バッググラウンドタスクウィンドウ プロファイラツールの改善 2D Physicsの強化
2020.2 2020年12月15日にリリース開始。主な改善、変更は以下の通りUnity 2020.2 TECH ストリームがダウンロード可能になりました – Unity Blog、2022年12月4日閲覧。Unity 2020.2 - 新機能の概要を確認する | Unity、2022年12月4日閲覧。。 C#8.0対応 Unity セーフモード スタンドアロンプレイヤーでのApple Siliconのネイティブサポート
またUnity2020.xより、今までの年3回のリリースから年2回のリリースサイクルに変更されている。
Unity2021 2021.1 2021年3月23日にリリース開始。主な改善、変更は以下の通りUnity 2020 LTS と Unity 2021.1 TECH ストリームリリースが公開されました – Unity Blog、2021年11月6日閲覧。Unity 2020 LTS and 2021.1 Tech Stream are now available – YouTube、2021年11月6日閲覧。。 Visual Scriptingのエディター統合 パフォーマンスの向上 2Dシステムの改善
2021.2 2021年10月26日にリリース開始。主な改善、変更は以下の通りUnity 2021.2 TECH ストリームリリースが公開されました – Unity Blog、2022年12月4日閲覧。。 Apple Silicon用エディターをサポート C#9.0対応
Unity2022 2022.1 2022年5月9日にリリース開始。主な改善、変更は以下の通りUnity 2022.1 TECH ストリームが公開されました - Unity Blog、2022年5月15日閲覧。。 エディターワークフローの向上 パフォーマンスの改善 プラットフォームの最適化 Androidデバイス上でのパフォーマンスの向上