うえすと開発メモ

タグ:Unity

Unity認定エキスパートゲームプレイプログラマー試験を受けてきて、合格しました。


・動機
試験を受けた動機は、Unity大前さんの↓の記事を見て、
自分の現在の力量を測れるし、合格すればスキルセットのわかりやすい証明にもなるかな~と思ったからです。

・対策
とりあえず認定エキスパート試験用の公式コースウェアを7日間の無料期間だけ登録。
これの中身は全部英語で量も多く、しっかりやるのは辛かったので、各章の最後に出てくるミニテストみたいなのだけ翻訳しながら問いてみました。
本試験でも割と似たような形式の問題が出ていたと思います。

あとは、試験概要の認定試験トピックを見て、普段あまり触っていない機能のドキュメントを読んだりしました。


・会場
自分の住んでいる栃木県内に2箇所ある会場のうち、近い方の宇都宮テストセンターで受験しました。
IMG_0862
普段は専門学校のビル。
開始時間の15分前に到着する必要があり、本人確認書類は2種類必要です。
持ち物は何も持ち込めませんが、小さなホワイトボードとペンを貸してくれます。
試験はPCで行います。


・試験内容
大前さんの記事にもあるとおり、前提条件となる状況と併せて考えさせられる問題が多く、Unityを用いたゲーム開発経験を問われているようで、楽しい内容でした。

試験は日本語ですが、元々が英語の試験だからか、日本語訳が怪しい問題もありました。
問題数の割に時間はたっぷりあるので、迷った問題は後回しにして、後半時間をかけて解答していきました。

解答後にすぐ結果がでるのは良かったのですが、合否と点数しか表示されないので、どの問題を間違えたのかが見返せないのが残念でした。


・感想
久々にこういう試験的な物を受けましたが、普段触らない機能を勉強する動機にもなり、申し込みから試験終了までは適度に緊張しつつも楽しめたので、受けて良かったと思います。
(もちろん合格したから良かったというのもある)

証明としてAcclaimの資格バッジをもらえました。
acclaim
資格が直近で何かに役立つわけではないですが、単純に嬉しいです。


試験はエキスパートゲームプレイプログラマー以外にも複数あります。
Unity Certification
unitycertification
それぞれ役割が異なっているので、自分のスキルに合ったものがあれば受けてみても良いのではないでしょうか。
このエントリーをはてなブックマークに追加

iPhoneXではアプリを開いている間、画面の下部にスワイプでホーム画面へと戻るバーが常時表示されます。
home_button_iphonex1
Unityのアプリでこれを非表示にするには、
メニューから [Edit] → [Project Settings] → [Player] で PlayerSettings を開いて、iOSタブの Other Settings 内で [Hide home button on iPhone X] にチェックを入れるだけです。
hide_home_button_iphonex

この設定が追加されたUnityのバージョン一覧は、以下リンク先に記載があります。
ちなみに、この設定を有効にした場合でも、
アプリ起動時は表示されて、しばらくすると消えるのですが、
画面のどこかをタッチすると再度表示されてしまうので、残念ながら完全に消す方法は無いようです。
このエントリーをはてなブックマークに追加

Unityのタイムライン上で、各トラック内のクリップが持つパラメーターを、スクリプトから動的に変更する手順まとめです。

処理内容を箇条書きにすると
①タイムライン内のトラック一覧から、指定名称のトラックを取得
②トラック内のクリップ一覧から、指定名称のクリップを取得
③クリップのパラメーターを変更
の順番にやっていきます。

今回はUnity公式がAssetStoreで配布している「Default Playables」に含まれている
「Transform Tween Track」のクリップを書き換えてみます。



「Transform Tween Track」はクリップに指定されている Start Location から End Location まで移動するだけのシンプルなトラックです。
timelime_01
これの End Location を実行時に動的に書き換えて移動先を変更しようと思います。

まず、
①タイムライン内のトラックから、指定名称のトラックを取得
します。
// タイムライン内のトラック一覧を取得
IEnumerable<TrackAsset> tracks = (m_director.playableAsset as TimelineAsset).GetOutputTracks();

// 指定名称のトラックを抜き出す
TrackAsset track = tracks.FirstOrDefault(x => x.name == "TransformTweenTrack01");
ここで指定するトラック名は、Timelineウィンドウでトラックを選択中にInspectorウィンドウで設定できます。
timelime_02

次に、
②トラック内のクリップ一覧から、指定名称のクリップを取得
します。
// トラック内のクリップ一覧を取得
IEnumerable<TimelineClip> clips = track.GetClips();

// 指定名称のクリップを抜き出す
TimelineClip clip = clips.FirstOrDefault(x => x.displayName == "TransformTweenClip01");
ここで指定するクリップ名は、Timelineウィンドウでトラック内のクリップを選択中にInspectorウィンドウで設定できます。
timelime_03

最後に、
③クリップのパラメーターを変更
します。
// クリップのPlayableAssetを対応する型へキャスト
var transTweenClip = clip.asset as TransformTweenClip;

// End Location の値を変更
transTweenClip.endLocation.exposedName = System.Guid.NewGuid().ToString();
m_director.SetReferenceValue(transTweenClip.endLocation.exposedName, newEndLocation);
exposedNameに渡す値は何でも良いのですが、ユニークなキーが必要なので、ここではGUIDを使っています。


実際に使う場合、上記の処理を整理した以下のようなコンポーネントをPlayableDirectorのGameObjectに付与します。
※頻繁に使う場合は tracks や clips はキャッシュしたほうが良いと思います。


そして、下のような呼び出しでパラメーターを変更します。
[SerializeField] private PlayableDirector m_director;
[SerializeField] private TimelineParamSetter m_timelineParamSetter;
[SerializeField] private Transform m_newEndLocation;

public void OnBtnChangeClicked()
{
    // 再生停止
    m_director.Stop();

    // End Locationを変更
    m_timelineParamSetter.SetTransformTweenEndLocation("TransformTweenTrack01", "TransformTweenClip01", m_newEndLocation);

    // 再生開始
    m_director.Play();
}
※タイムライン再生中は変更が適用されないので、再生している場合は事前に停止する必要があります。
timelime_param_04


参考
このエントリーをはてなブックマークに追加



TextMesh Proは便利ですが、デフォルトフォントの参照を
「Assets/TextMesh Pro/Resources/」内の「TMP Settings.asset」というScriptableObjectの「Default Font Asset」というパラメタで持っているため、
ここに設定したフォントアセットはResourcesフォルダ外に置いていたとしても、ビルド時にはResources内に含まれてしまいます。
tmpfont01
最初から指定されている「LiberationSans SDF.asset」は1MBですが、
仮に日本語フォントアセットを2048x2048サイズで生成して「Default Font Asset」に指定した場合は、4MBのフォントアセットファイルがResources内に入ることになります。

これを、Resourcesのサイズは抑えた上で、サイズの大きいフォントアセットをデフォルトフォントっぽく使えるように変更します。

まずは「TMP Settings.asset」の「Default Font Asset」を「None」に設定して、
Resources内に含まれている「LiberationSans SDF.asset」は削除するか、
Resourcesフォルダ外へ移動させます。
tmpfont02

これでResourcesからフォントアセットは除けましたが、
Hierarchyメニューの「Create/UI/TextMesh Pro - Text」でTextMesh ProのGameObjectを生成した際に、デフォルトフォントが存在しないとエラーになります。
tmpfont03

このエラーを解消するために、以下のような設定でサイズの小さいフォントアセットを作ります。
tmpfont04
64x64サイズで4KB。(もっと縮めても良いかも)
↑で生成したフォントアセットを「TMP Settings.asset」の「Default Font Asset」に設定することで、Resourcesのサイズを抑えつつ、TextMesh ProのGameObject生成時のエラーが発生しないようにします。
tmpfont02

この状態でHierarchyメニューの「Create/UI/TextMesh Pro - Text」で生成すると、
サイズの小さいデフォルトフォントが適用されたボケボケのTextMesh ProのGameObjectができます。
tmpfont06
その後でInspector上からTextMeshProUGUIコンポーネントのFontAssetを、
Resources外のフォルダにあるサイズの大きいフォントアセットに差し替えれば良いのですが、毎回手で指定するのも面倒なので、カスタム生成メニューを作ります。

※フォントパスやTextMeshProUGUIの設定は適宜変更してください。

↑のスクリプトをプロジェクト内に配置して、
Hierarchy上でCanvas配下を選択した状態で、
メニューの「Create/UI/Custom TextMesh Pro - Text」で生成すると、
フォントアセットを差し替えた状態のTextMesh ProのGameObjectが生成されます。
tmpfont07

これで、Resourcesのサイズは抑えつつ
Resources外にあるフォントアセットをデフォルトで使用する形にできました。
このエントリーをはてなブックマークに追加

unityroom様で、2017-11-13 〜 2017-11-19 に開催された
Unity 1週間ゲームジャム お題「space」に参加して、
スペースドギーというゲームを制作しました。

このゲームで使用したアセットは以下になります。



短期間で集中して作るのは楽しいですね。
面白い作品が多くて刺激にもなります。
Unity 1週間ゲームジャム / お題「space」ゲーム一覧

Unity 1週間ゲームジャムについて詳しくはこちら
このエントリーをはてなブックマークに追加

このページのトップヘ