(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]

AASを新規プロジェクトに採用した際の運用方法や生じる問題の解決方法【Unity】【Addressable Assets】【Unite Tokyo 2019】


この記事でのバージョン
Unity 2018.4.8f1


はじめに

今回は『Unite Tokyo 2019』の講演の動画を見て勉強しつつ、

ついでに記事にまとめちゃおうという感じのやつです。


そして、題材にする講演は、

【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】です!

1年以内に世に出さないといけないタイトルで、Addressable Assets Systemを採用し、リリースまで持っていこうとする、そのてんやわんやな顛末です。

Addressable Assets Systemを時系列に追いながら、そのときの対応方法と運用方法、出た問題の解決方法を説明します。

出演:
中山 正法(株式会社サムザップ ネイティブエンジニア)



概要の通り、Addressable Assets Systemを新規プロジェクトの採用したお話です。

ちなみにAddressable Assetsについての概要や使い方についての記事は以前書いたので、



そこら辺の話は省いて、自分が気になった事、知らなかった事を抜粋していく感じにしました。


なお、Addressable Assets(System)は長いので、記事中ではAASと略しています。


目次

  • はじめに
  • 目次
  • アセット管理について
  • AASの概要
  • AASはUnityのバージョンの影響を受ける
  • アドレスはパスのまま使わない方が良い
  • ロードとリリース
  • 実行モードとプロファイラ
  • AASの歴史
    • AAS バージョン0.2 : UI系のバグが多発
    • AAS バージョン0.5 : 実機で起動しない
    • AAS バージョン0.6 : リモートからのロードに問題あり
    • AAS バージョン0.7 : StreamingAssets周りの変更
    • AAS バージョン0.8 : 名前空間がすべて変更
    • AAS バージョン1.1.3 : 実機で動かない
    • AAS バージョン1.1.5 : 脱プレビュー
    • AAS バージョン1.1.7 : ファイル名にハッシュなしが可能に
  • 注意点や不具合
    • spriteAtlasの使用時の注意
    • エラーハンドリングはAAS1.1.9から
    • サブアセットはUnity2019.3から
    • シリアライズフィールドはUnity2019.3から
    • nested prefabでクラッシュ
  • おわりに


アセット管理について

続きを読む

SceneView上でクリックした時などのイベントを取得する【Unity】【エディタ拡張】


この記事でのバージョン
Unity 2018.4.8f1


はじめに

今回はタイトル通り今回はSceneView上でのイベントを取得する方法のご紹介です!

f:id:kan_kikuchi:20191022085706g:plain


なお、エディタを再生していても、いなくても取得出来ます。


Event.currentとSceneView.onSceneGUIDelegate

続きを読む

コンポーネントの設定値をアセットとして保存&反映したり、初期値を変えたりする Preset【Unity】

この記事でのバージョン
Unity 2018.4.8f1


はじめに

Unityはコンポーネントの設定値をコピペする事が出来ます。

f:id:kan_kikuchi:20191019075435j:plain


ただ、このコピべの頻度が多くなると結構手間ですし、

そもそもコンポーネントの設定値の初期値を変更したいという事もある。


そこで使えるのが今回紹介するPresetという機能です。

f:id:kan_kikuchi:20191019080941g:plain


ちなみにPresetはUnity 2018.1から追加されたようです。


Presetとは

続きを読む

Steamの実績をUnityで実装する【Unity】【Steam】

この記事でのバージョン
Unity 2018.4.8f1


はじめに

今回はUnityで作ったゲームに、Steamの実績を実装する方法の解説です!

f:id:kan_kikuchi:20191012091400g:plain


ちなみにVRゲームでも全く同じ方法で実装可能です。

なお、Steamworksへの登録が済んでいる前提ですので、あしからず。


目次

  • はじめに
  • 目次
  • 導入
  • Steam(ブラウザ)上での設定
    • データ設定
    • 実績設定
  • 実装
    • 初期化
    • データ設定
    • データ取得
    • 実績解除
    • データと実績のリセット
  • 参考


導入

続きを読む

Steam向けアプリを申請した際にYour build has failed our review because your app appears to include sexually explicit content involving minors とリジェクトされた時の対処法【Steam】【リジェクト】

はじめに

以前、札束風呂VRというVRゲームをSteamでリリースしたのですが、



その申請時に

Your build has failed our review because your app appears to include sexually explicit content involving minors.

という内容でリジェクトされたので、


f:id:kan_kikuchi:20191008053832j:plain


今回はそれをどう解決したかという記事です。


リジェクト全文と解決方法

続きを読む

Steam向けアプリを申請した際にYour build has failed our review because it does not launch using the Steam client とリジェクトされた時の対処法【Steam】【リジェクト】

はじめに

以前、札束風呂VRというVRゲームをSteamでリリースしたのですが、



その申請時に

Your build has failed our review because it does not launch using the Steam client.

という内容でリジェクトされたので、


f:id:kan_kikuchi:20191008053832j:plain


今回はそれをどう解決したかという記事です。


リジェクト全文と解決方法

続きを読む

Addressable Assetsのアドレスの重複を検知する【Unity】【Addressable Assets】【エディタ拡張】


この記事でのバージョン
Unity 2018.4.8f1


はじめに

Addressable Assetsのアドレスはファイル名とは別に自由に設定できますが、

なんと同じアドレスを設定する事が出来てしまいます。

f:id:kan_kikuchi:20191004094933j:plain


しかも設定時、ロード時共にエラーも出ないので、

気付かず重複していて、思ったのと違うのをロードしていたなんて事にもなりかねません。

using UnityEngine;
using UnityEngine.AddressableAssets;//Addressablesを使うのに必要

public class NewBehaviourScript : MonoBehaviour {

  private void Start () {
    //AlchemistというAddress(3件重複している)のSpriteを非同期でロード
    Addressables.LoadAssetAsync<Sprite>("Alchemist").Completed +=  op => { 
      //ロード結果をログで確認
      Debug.Log(op.Result.name);
    };
  }
	
}
f:id:kan_kikuchi:20191002112503j:plain


という事で、Addressable Assetsのアドレスの重複を検知するエディタ拡張を作ってみました!

f:id:kan_kikuchi:20191004101449g:plain


なお、記事中の画像は以下のアセットを使っております。





AddressDuplicateDetecter

続きを読む

外部からは値が参照出来ない形に実装されているScriptableObject等の内容を無理やり取得する【Unity】【ScriptableObject】【エディタ拡張】【C#】

この記事でのバージョン
Unity 2018.4.8f1


はじめに

アセットストアのアセットや外部SDKなどをUnityで使う際、

ScriptableObjectが使われてる事はよくあります。


そしてそのScriptableObjectの値を使いたいのに、

外部からは取得出来ない形に実装されているという場合は少なくありません。


という事で今回はScriptableObjectの内容をで無理やり取得する方法を3パターンほど紹介する記事です!

なお、ScriptableObject以外のアセットやプログラムに使えるものもあります。

f:id:kan_kikuchi:20190924051920j:plain


なお、どのパターンでも以下のような

privateなフィールドのみを持ったScriptableObjectを例に使っています。

using UnityEngine;

/// <summary>
/// サンプル用のScriptableObject
/// </summary>
public class SampleScriptableObject : ScriptableObject {
 
  //外部から取得できない文字列
  [SerializeField]
  private string _text = "SampleText";
   
  //外部から取得できない数字
  [SerializeField]
  private int _num = 58;
 
}
f:id:kan_kikuchi:20190930051907j:plain



Reflection

続きを読む

Addressable Assetsのアドレスとラベルを管理する定数クラスを自動生成する【Unity】【Addressable Assets】【エディタ拡張】


この記事でのバージョン
Unity 2018.4.8f1
Addressables 1.2.4


はじめに

Addressable Assets System(AAS)はアセットのロード時にアドレス(文字列)を用います。

一応、AssetReference等を使って、文字列を使わない使用しない方法もありますが、

f:id:kan_kikuchi:20190925055148j:plain


場合によってはアドレスで指定したい場合もあります。

そんな時に、アドレスを直接入力してしまうと打ち間違いが発生してしまうかもしれませんし、

アドレスの変更への対応もしにくいです。


という事で今回は、アドレスを(とついでにラベルも)管理する定数クラスを自動作成してみました。


イメージとしては以下のようなアドレスの定数が列挙された定数クラスを自動で作成&更新し、

手入力をなくすと言った感じ。

f:id:kan_kikuchi:20190929050255j:plain
//定数クラスを使って、Keyを指定してロード
 Addressables.LoadAssetAsync<GameObject>(AddressableAssetAddress.CAMERA).Completed +=  op => { 
  Debug.Log(op.Result.name);
};


ちなみに、以前Resourcesでも同じようなものを作っていました。





AddressableAssetAddressClassCreator

続きを読む

ResourcesのシンプルさとAssetBundleの自由度を実現したAddressable Assetsとは(脱Preview記念リライト)【Unity】【Addressable Assets】

この記事でのバージョン
Unity 2018.4.8f1
Addressables 1.2.3


はじめに

Unityの鬼門の一つに「画像や音源等のリソースをどう管理するか」というものがあります。

「Resources使えば良いじゃないの?」と思う方もいるかもしれませんが、

実は公式で「Resourcesフォルダのベストプラクティスは使用しない事である」

なんて言われるぐらい推奨されていません。



じゃあ何を使えばいいのかと言えばAssetBundleなのですが、

「AssetBundleって難しいし、面倒くさいし、出来れば使いたくない!!」

というのが大方の意見かと思います。


それでもなくなくAssetBundleを使っていましたが、そんな現状を打破するために

なんとAddressable Assets System(通称AAS)というリソース管理の新システム

Unity2018.2から使えるようになりました!

そしてそのAddressable Assetsを使ってみようという感じの記事を以前書きました。



この時から基本的な使い方は変わっていないのですが、

メソッド名が変わったり、Previewが外れて正式版(?)になったりしたので、新しく書き直して見ました!


なお、記事中の画像は以下のアセットを使っております。





目次

  • はじめに
  • 目次
  • Addressable Assetsとは
  • 導入
  • 設定
  • 単体ロード
  • 複数同時ロード
  • インスタンスの生成と破棄
  • 事前ロード
  • 文字列(AddressやLabel)の直接入力を避ける
  • AssetReferenceに設定出来るタイプを制限
  • グループ(アセットのパッキング設定)
  • プロファイル(開発中とリリース時で設定を変える)
  • ResourcesやAssetBundleからの移行
  • Play Mode(エディター上でのAddressable Assetsの動作を変更)
  • RM Profiler(アセットのロード状態の可視化)
  • おわりに


Addressable Assetsとは

続きを読む