ゆにてく備忘録

Unityやその他学んだ事を忘れないために書くぶろぐ

【Unity】UGUIのImageで波エフェクトを作る

UGUIのImageで波エフェクトを作りました

使い方

https://github.com/n-taku/WaveEffectImageこのリポジトリの中の4つのファイル,ListPool.cs,ObjectPool.cs,Subdivide.cs,WaveMeshEffect.csを自分のプロジェクトにコピーする.

WaveMeshEffectコンポーネントを波エフェクトさせたいImageなどにつけて,コンポーネントのインスペクタからWaveInfoを編集する.

f:id:n_taku:20180825194305p:plain

demo

f:id:n_taku:20180825194316g:plain

スクリプト

WaveMeshEffectコンポーネントはBaseMeshEffectを継承していて,ModifyMesh関数で頂点を上下にoffsetしている.offset量はWaveInfoで指定したSin波を合成している

UGUIのImageで波エフェクト

ListPool.cs,ObjectPool.csはUnityのInternalな非公開クラスで,Listを使い回すのに使っている

Subdivide.csはImageの頂点を増やして分割している.【Unity】「モダンなUIの提案と実装」 - テラシュールブログで使われていたクラスを少し直したもの

【Unity】追尾レーザー,誘導ミサイルの実装

Unite2018の誘導ミサイル完全マスターのスライドの追尾レーザーと誘導ミサイルのスクリプトを実際に動かしてみました.

追尾レーザー

現在の速度,到達時間,ターゲットの位置を元に加速度を計算して動かします. 加速度に制限をかけない限り絶対に当たります.

f:id:n_taku:20180729154356g:plain

追尾スクリプト

誘導ミサイル

ターゲットの位置,トルクの強さを用いて,ターゲット方向に向きを変えて,その方向に移動する.係数によってはバネのようにゆらゆらしながら飛んで行きます

f:id:n_taku:20180729154403g:plain

誘導スクリプト

参考URL

【Unite Tokyo 2018】誘導ミサイル完全マスター

【Unity】Unity上から一括でリネームするEditor拡張

Unity上から一括でリネームするEditor拡張です.

アセットのリネームとAnimationClipパスのリネームとPrefab内のオブジェクトのリネーム機能があります.

使い方

WindowメニューからCustomSearchReplaceを選んで.
検索文字と置換文字を入れて,置換ボタンor全置換ボタンを押すだけ.

f:id:n_taku:20180407185001g:plain

スクリプトは以下

Unity上から一括でリネームするEditor拡張

【Unity】複数のコンポーネントを一度にコピー&ペーストするEditor拡張

複数のコンポーネントを複数のオブジェクトにコピーするEditor拡張です.

小さなことだけど,あったら使うかもしれない機能かなと.

使い方

  1. Inspector上のコンポーネントの歯車を押して,CustomCopyを選択.
  2. Windowが開くので,コピーしたいコンポーネントにチェックを入れてCopyボタンを押す.
  3. ヒエラルキー上もしくはプロジェクト上でペーストしたいオブジェクトを1つ以上選択して,Pasteボタンを押す.

f:id:n_taku:20180321183412g:plain

スクリプトは以下

複数コンポーネントのコピー&ペースト

【Unity】iPhoneXでのみStatusBarを表示する設定


iPhoneXでのみStatusBarを出したいみたいなことがあると思い,作りました.

IPhoneXStatusBarSetting.cs

機能としては,デフォルトでのStatusBarの設定をきる.実行時にIphoneXならばStatusBarを表示するという感じです.

StatusBarのデフォルト設定はPlayerSettingsのIOSの設定で切っても良かったんですけど,なんとなく,ビルド後にInfo.plistを変更してStatusBarを非表示にしてます

StatusBarの表示,非表示はViewControllerのprefersStatusBarHidden関数で制御でき,YESを返すとStatusBarの表示,NOを返すとStatusBarの非表示となります.UnityはIOSビルドでViewControllerを継承したUnityViewControllerBase+iOSというファイルを生成し,そこにprefersStatusBarHiddenが定義されているので,その関数をIphoneXの解像度での条件分岐に書き換えています

gist4b20e2e153f2e0d09484dddcca0e1861

以下で紹介されているスクリプトを参考に作っています.というかほぼ同じ

qiita.com

【Unity】uGUIでのiPhoneXの対応

iPhoneX対応のスクリプトを書きました.最後にスクリプトは貼っておきます.

iPhoneX対応について

ざっくり説明すると,iPhoneXは上部のディスプレイの上の部分の出っ張りと,ホームボタンの代わりとなるホームインジケータが表示される部分にボタンなどをおいてはいけません.ボタンをおいて良い部分はSafeAreaと言います.詳細は下

iPhone X - Overview - iOS Human Interface Guidelines

Unity対応

UnityではUnity 2017.2.0p1からSafeAreaを取得する関数(Screen.safeArea)が実装されました.それを用いて,UIのアンカーポイントを変更するスクリプトを書きました.例えば,画面の端にアンカーポイントを設定していたものは,実行時にSafeAreaの端に変更されます.Screen.safeAreaは現状iPhoneX以外はScreenと同じサイズを返します

SafeAreaBounds.cs

f:id:n_taku:20171119145644p:plain

このスクリプトをつけると,実行時にアンカーポイントをSafeArea内に自動で補正します.Editor上で解像度をiPhoneX(1125x2436)にして実行するとiPhoneXのsafeAreaのエミュレーションができます.

実行結果

SafeAreaBounds.csをつけた左下揃えのボタンと,デフォルトの右下揃えのボタンの比較です.

f:id:n_taku:20171119151455p:plain

f:id:n_taku:20171119151704p:plain

f:id:n_taku:20171119152821p:plain

最後に

多分デザインによって対応方法はまちまちだろうけども,とりあえず一案ということで.上のスクリプトは下を参考に作りました.

p12tic / iOSSafeAreasPlugin / source / — Bitbucket

SafeAreaBounds.cs

gista83409ec6274fc4cccd686da13e3bfe0