Unity 2019.3 リリース

プログラマー向けの新機能とアップデート

DOTS の大幅なアップデート、バージョン管理の改善、設定可能な Enter Play Mode、シリアル化の改善、物理演算のアップデートなど、Unity 2019.3 の開発者向けの新機能を紹介します。

新機能

プログラマー向けツールの重要なアップデートの概要を紹介します。完全な詳細については、リリースノートを参照してください。

DOTS Game Code の更新

DOTS パッケージの新しいバージョンでは、記述する定型コードが少なくてすみます。単純な [GenerateAuthoringComponent] 属性でカスタムオーサリングコンポーネントを置き換え、冗長な IJobForEach および IJobForEachWithEntity コンストラクトを、Burst コンパイラーC# Job System を使用するようになった単純だが高速な Entities.ForEach() に置き換えます。

新しい方法での DOTS コードの記述を開始するには、パッケージマネージャーから Entities パッケージ(プレビュー)をインストールします。

DOTS_game_code_update.cs (C#)
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.Entities;
using Unity.Jobs;
using Unity.Sample.Core;
using Unity.Transforms;
using UnityEngine;
[GenerateAuthoringComponent]
struct Velocity : IComponentData
{
	public float value;
}
class ApplyVelocitySystem : JobComponentSystem
{
	protected override JobHandle OnUpdate(JobHandle inputDeps)
	{
		float deltaTime = Time.deltaTime;
		return Entities.ForEach((ref Translation translation, in Velocity velocity) =>
		{
			translation.Value += velocity.Value * deltaTime;
		}).Schedule(inputDeps);
	}
}
詳細を見る

シリアル化の改善

新しい SerializeReference 属性では、C# クラスを値タイプではなく参照としてシリアル化できます。つまり、POCO(Plain Old C# Objects)で相互参照を行い、グラフやツリーなどの複雑なデータ構造を表現および管理するためのコードを簡略化できます。

フィールドにポリモーフィックデータを含めることもできます。たとえば、List<IAnimal> 型のリストには、イヌ(class Dog : IAnimal{})とネコ(class Cat : IAnimal{})を含めることができます。

シリアル化に対して参照とマークされたフィールドでは、本質的に null 値を表現できるようになりました。以前は、null フィールドをシリアライズすると、その型のデフォルトのコンストラクターを使用して常にデシリアライズされました。

従来、非 Unity 型のシリアル化ではポリモーフィズムが無視されました。Unity 2019.3 では、ポリモーフィックシリアル化により、以前はシリアル化プロセスを逃れなかったオブジェクト参照を維持でき、継承チェーンをより適切に参照できます。

Serialization_improvements.cs (C#)
using System;
using System.Collections.Generic;
using UnityEngine;

public interface IShape {}
[Serializable]
public class Cube : IShape
{
    public Vector3 size;
}
[ExecuteInEditMode]
public class BuildingBlocks : MonoBehaviour
{
    [SerializeReference]
    public List<IShape> inventory;
   void OnEnable()
    {
        if (inventory == null)
        {
            inventory = new List<IShape>()
            {
                new Cube() {size = new Vector3(1.0f, 1.0f, 1.0f)}
            };
            Debug.Log("Created list");
        }
        else
            Debug.Log("Read list");
    }
}
詳細を見る

設定可能な Enter Play Mode によるイテレーションの高速化

現在、エディターで再生モードに入ると、Unity は、スクリプティング状態のリセット(ドメイン再ロード)とシーンの再ロードの 2 つを行います。これには時間がかかり、プロジェクトが複雑になると、Unity Editor が再生モードに入るのが遅くなることがあります。そのため、「Project Settings」>「Editor」>「Enter Play Mode」オプションに設定可能な Enter Play Mode(実験的)を導入しています。 

これらのオプションにより、コードの変更がないときは「Enter Play Mode」プロセスからドメインやシーンの再ロードを無効にできます。テスト結果に基づき、これらの設定を変更すると、プロジェクトに応じて反復時間を 50-90% 短縮できます。

ドメイン再ロードを無効にしたときにスクリプトを正しく変更する方法の詳細については、ドキュメント内の再生モードの設定方法に関するページをご確認ください。

再生モードに入る前にゲーム状態をリセットする場合は、API とコールバックを通じてこの機能にアクセスすることもできます。

この機能は現在実験中なので、ぜひフォーラムにご意見をお寄せください。

詳細を見る

v3.4 から v4.1 への PhysX ライブラリのアップグレード

PhysX ライブラリを v3.4 から v4.1 にアップグレードしました。これには、新しい Temporal Gauss-Seidel ソルバーが含まれます。このソルバーでは、ジョイントのオーバーストレッチに対する耐性が高まり、以前にシミュレーション中に見られた不安定な動作が防止されます。新しいソルバーを有効にするには、「Project Settings」>「Physics」に移動します。 

新しいブロードフェーズ Automatic Box Pruning アルゴリズムも公開しました。このアルゴリズムでは、ワールド境界と細分化の量を自動的に計算できます。これは、既存の Multi-Box Pruning アルゴリズムからのアップグレードです。

また、より高速なメッシュミッドフェーズアルゴリズムがデスクトッププラットフォーム上で使用可能になっています。これは多くのリソースを消費する加速構造(R-Trees)の作成を必要とせず、MeshCollider インスタンス化時間が短縮されるため実行時に生成されるコンテンツに役立ちます。

MeshCollider のメッシュの遅延ベイキングを可能にする新しい API も追加しました。ロード待ち画面や、アドベンチャーゲームの会話シーンのような画面遷移シーンの背後で、計算量の大きいメッシュのベイキング処理を行うことができます。この API はスレッドセーフであるため、C# Job System 経由など、メインスレッドから関数を呼び出して一度に複数のメッシュをベイクできます。 

詳細については、NVIDIA の PhysX 4.1 SDK ガイドの PhysX SDK 3.4 から 4.0 への移行に関するセクションを参照してください。

詳細を見る

プロファイラーの改善:設定可能なフレーム数

2019.3 より前は、「Profiler」ウィンドウを通じてパフォーマンスを調べる場合、一度に 300 フレームからのプロファイルデータを参照できました。これは、本当に必要なフレームを捕捉するのに必ずしも十分な時間ではありませんでした。

設定可能なフレーム数により、そのキャプチャーウィンドウを延長できます。「Preferences」ウィンドウで、「Profiler」ウィンドウに表示するフレーム数(300–2000)を設定できるようになりました。

詳細を見る

プロファイラーの改善:プレイヤーでの Deep Profile サポート

この更新では、「Build」ウィンドウまたは BuildPlayer API ですべてのプレイヤーに対して Deep Profiling Support を有効にできます。

Deep Profiling Support を作成する場合、C# メソッドに出入りするときにタイムスタンプを記録できます。ただし、この C# 計測にはパフォーマンスオーバーヘッドが付随する可能性があるため、プレイヤーごとにオフに切り替えるオプションを追加しました。

詳細を見る

プロファイラーの改善:プレイヤーでのマネージアロケーションコールスタック

マネージアロケーションの追跡と分析は、Unity のプロファイラーの重要な機能です。
継続的なマネージアロケーションにより、ガベージコレクション(GC)が開始され、マルチフレーム遅延により滑らかなゲームプレイが妨げられます。アロケーションがいつ行われるかと、コード内でのそれらの起点をを知ることは、Unity でゲームを開発する際に不可欠な情報です。

2019.3 では、プレイヤーにマネージアロケーションのコールスタックを導入しています。これにより、プレイヤーのプロファイリング時に GC アロケーションが発生した C# 関数を確認できます。

このオプションは、コールスタックトグルを使用して有効にすることができます。

詳細を見る

バージョン管理の改善

Unity 2019.3 では、バージョン管理サポートも刷新されています。

これには、いくつかの UX と統合の改善、および Perforce 接続が失われた場合の自動再接続試行のような Perforce 統合の修正が含まれます。

特に、「Inspector」ウィンドウの上部でバージョン管理バーが使用可能になり、追加、ロック、アンロック、送信などの追加の操作を実行できるようになりました。

また、チェックアウトされていないアセットの「Inspector」では、右クリックして「Inspector」の無効なフィールドの値をコピーできるようになりました。

UI のすべての改善点と修正点の詳細については、リリースノートをご確認ください。

リリースノートを確認

Addressables

このリリースには、新しい Addressable Asset System(Addressables)が含まれています。これにより、「アドレス」によってアセットを簡単にロードする方法が提供され、コンテンツパックの作成と展開を簡略化することでアセット管理のオーバーヘッドの処理も簡単になります。要するに、Addressables を使用すると、チームは複雑なライブコンテンツを効率的に管理できます。

Get started

Netcode

DOTS サンプルで使用されている FPS Netcode は、DOTS をベースに構築されており、類似するアーキテクチャを持つネットワーク化したゲームを簡単に作成できるようにします。これには、クライアント側の予測、権威サーバー、補間、ラグ補償が含まれます。 

FPS Netcode の概要については、Tim Johansson 氏による Unite でのセッションをご覧ください。

詳細を見る

今すぐ Unity 2019.3 をダウンロード

上記すべての機能その他に今すぐアクセス。

弊社のウェブサイトは最善のユーザー体験をお届けするためにクッキーを使用しています。詳細については、クッキーポリシーのページをご覧ください。

OK