うえすと開発メモ

タグ:Unity

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

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

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


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



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外にあるフォントアセットをデフォルトで使用する形にできました。
このエントリーをはてなブックマークに追加 Clip to Evernote

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

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



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

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

以前作成したUnity UI(uGUI)で頂点カラーを付けるUIエフェクト(uGUI-Effect-Tool)に
だんだん透明になるアルファグラデーション用のコンポーネントを追加しました。

使い方は(Add Component >> UI/Effects/Gradient Alpha)でUIオブジェクトにつけるだけです。
ugui-effect-tool_gradient_alpha01
テキストの場合、全体か1文字づつか選べます。
ugui-effect-tool_alpha02
カラーグラデーションの方にも同様のパラメーターを追加しました。
ugui-effect-tool_gradient03 
カラーグラデーション、色合成についての以前の記事
このエントリーをはてなブックマークに追加 Clip to Evernote

このページのトップヘ