原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【Unity】アセット「Living Particles」の使い方を学ぶ

今週も・・・

わざわざ遠出してコンサートを観に行ったらカップルばかりの席に囲まれて、敗北感を味わいながらクラップハンズ&コールの二時間を過ごした皆さんこんにちは。

両サイドのカップルはどちらも体を寄せ合って観ていたらしく、左右のスペースが広がって私はジャンプし放題で超ラッキー、ってうるせえバーカ。バラード曲でお決まりのように彼女が号泣してそれを彼氏が慰める、という光景を見て見ぬふりをし続けた私が一番泣きたい。

 

 独身の日セール

そんなわけで精神的に荒れ放題な日々なのですが、先週の11月11日は中国では独身の日だそうで、それを記念してなのかUnityのアセットストアで一日限定のセールが行われました。その名も「独身の日セール」、一日限定とはいえ1万点以上のアセットが50%OFFの特大セールです、それに「独身の日」セールって名前、まるで私のために用意されたかのようなセールだしね、ってうるせえ、バーカ。

で、まぁ折角なので一つぐらいは購入しようと決めて、セール期限ギリギリだったのですが以前から気になっていたアセット「Living Particles」を購入しました。

 

vimeo.com

上の動画でもわかるように、この「Living Particles」一般的なパーティクルとは違ってオブジェクトの周囲でパーティクルの動作が大きく変化します。

お札や木の葉が宙を舞ったり、ウネる大地の中でフラットな地形ができたり、それがオブジェクトの動きに反応して動作しています。

使いこなすことができれば印象に残るダイナミックでインパクトのある映像が作れそうです。

 assetstore.unity.com

 

概要

「Living Particles」のパーティクルには大きく分けて3つのパターンがあります。

 

・オブジェクトの周囲を避けるように動くパターン

f:id:Karvan:20191118014250g:plain

 

・動く地面に平らな足場が作られるパターン

f:id:Karvan:20191118014113g:plain

 

・オブジェクトとの距離に合わせて形状が変化するパターン

f:id:Karvan:20191118013936g:plain

 

どのパターンでも特定のオブジェクトの周辺でパーティクルの挙動が変わりますが、これはParticle Systemだけで実現しているのではなくShaderとScriptもセットとなって実現している処理となっています。

 

なので「Living Particles」のパーティクルを使う場合は、Particle SystemとShader、ScriptがセットなったPrefabを使います。Particle System単体だけを取り出して使ってもデモシーンのようなエフェクトは実現されません

 

使い方

使い方自体は簡単で、ShineVFX/Living Particlesの配下にPrefabフォルダに各パーティクルのPrefabが格納されているので、それをゲームシーンにドラッグアンドドロップします。

f:id:Karvan:20191119215236p:plain

 

Inspectorで「Living Particle Controller」コンポーネントのAffectorにパーティクルに影響を与える(動きに沿って変化を与える)オブジェクトを指定します。

f:id:Karvan:20191119215323p:plain

 

必要な設定はこれだけです。簡単。

実際に使ってみるとこんな感じ

f:id:Karvan:20191119005316g:plain

 

なお、動く地面に平らな足場ができるパターンのものはPrefabに上記のコンポーネントの他に地面を制御するコンポーネント「Particle Grid Generator」が付加されています。

 

f:id:Karvan:20191119215638p:plain

 

動く地面を作成する範囲をX,Y,ZのSize項目で指定します。
また、Particle Sizeが地面を作るパーティクルのサイズ、各X,Y,ZDistanceが各パーティクル間の距離の指定となります。


ちょっと強引ですが上のゲームシーンで使ってみるとこんな感じ

f:id:Karvan:20191119005412g:plain

 

使い方は大体わかったんですが、これを制作中のゲーム(2.5DのSTG)の何処で使用するかってのは全く考えてなくて・・・うーん、どうしよう。

 

 

 

【Unity】今更ながらLineRendererで線を引く

秋深し

ちょっとした興味本位で何も知らないアイドルのライブを観に行ったら案の定、コールもMIXもジャンプのタイミングも分からなくて一時間半近く突っ立っているだけの時間を過ごした皆さんこんばんわ。

いや、ライブ前に少しは曲を覚えようと努力はしたのですが歌詞の意味がちっとも分からなくて断念しました。ごめんなさい。

あと、最近は女の子でも女性アイドルに対してガチ恋口上?「愛してるー」とか言うんですね。その愛を十分の一でいいから私に向けてください、よろしくお願いします。

 

線を引く

Unityに手を出してから早幾年、これまで余り必要に迫られていなかったので手を出してこなかったのですが、制作中のゲーム内でLineRendererを使って線を描画する必要が出てきました。

こんな感じに

f:id:Karvan:20191112232353p:plain

 

なので今回はLineRendererを使っての線描画にチャレンジです。

 

LineRenderer

LineRendererとはUnity標準で用意されている線描画用のコンポーネントで、 2点以上の座標を指定することで各点を繋いだ線を描画します。

「2点以上の」と記載した通り直線毎ではなく、繋がってさえいれば一つのLineRendererで多点間を繋いだ線を作れます。

 

LineRendererを使って線を引く手順は以下の通り

  1. オブジェクトにLineRendererコンポーネントを追加する
  2. 線の色や太さ、テクスチャ等を設定する
  3. 線の頂点数を指定する
  4. 各頂点の座標を指定する

 

ここで1,2は事前準備の手順で線の種類(色、太さ等)別に作成し、Prefab化することで線を作成する毎に使用します

3,4が実際に線を描画する時に必要な処理となっています。

 

事前準備の手順

LineRenderer専用のオブジェクトとするために、空のオブジェクトにLineRendererコンポーネントを追加します。

 

f:id:Karvan:20191112233023p:plain

 LineRendererを追加すると上図のような設定がInspectorに表示されるので、ここで線の色や太さ等を設定します。

 

色々細かい設定がありますが、主に使用するのは

  • Width:線の太さを指定します。
  • Color:線の色を指定します。
  • Corner Vertices:線の曲がり角を丸くしたい場合に指定
  • EndCap Vertices:線の終点を丸くしたい場合に指定
  • Loop:始点と終点を繋ぐ場合にチェックをONにします

ぐらいでしょうか。

ちなみにAlignmentの項目は線描画の向きを設定しています。

  • View:線がカメラを向くように描画する
  • Transform Z:オブジェクトのZ方向に描画する

 

色とは別に線にテクスチャを適用したい場合は、Materialを作成する必要があります。

f:id:Karvan:20191112233217p:plain

今回は上のようにビームっぽいテクスチャを使用しました。

 

LineRendererの設定が完了したらオブジェクトをPrefab化しましょう。
色や太さが違う線を描画したい場合は、種類毎に上の設定をしたPrefabを準備します。

 

線を描画

線の描画はスクリプトで行います。

 LineRendererのPrefabをInstaniateで生成して、LineRendererコンポーネントを取り出します。

// Lineオブジェクトの生成
GameObject beam = Instantiate(BeamPrefab,
                    new Vector3(0, 0, 0),
                    Quaternion.identity) as GameObject;
                    
// LineRenderer取得
LineRenderer line = beam.GetComponent<LineRenderer>();

 
LineRenderer描画する線の頂点数の設定して、各点の座標を指定します。今回はInspectorで座標を指定したListから座標を指定しています。 

// 頂点数の設定
line.positionCount = PointList.Count;

// 各頂点の座標設定
for (int iCnt = 0; iCnt < PointList.Count; iCnt++)
{
    line.SetPosition(iCnt, PointList[iCnt]);
}

LineRendererに座標設定した時点で画面に描画されます。f:id:Karvan:20191112233749p:plain

 
描画されたLineRendererは当然ながらオブジェクトとしてゲーム空間に存在しているので、動かすことができます。
動かす場合はUseWorldSpaceのチェックをOFFにします。
f:id:Karvan:20191112233812g:plain   f:id:Karvan:20191112233837g:plain
 

いざ使ってみる

製作中のゲームでは自機の進行を阻むバーとして使っております。
Colliderを設定しているので自機の弾も弾く仕様です。

f:id:Karvan:20191110195717g:plain

LineRendererって意外と簡単に使えます。

 

 

【Unity】TextMeshProでディゾルブシェーダを適用する

通常運行

夏は「花火だー、お祭りだー」の声に耳を塞ぎ、秋はハロウィンの狂乱に目を塞いでやり過ごし、やっと落ち着いたと思っていたら、駅前に大きなクリスマスツリーのイルミネーションが準備されているのを目にしてウンザリした皆さんこんにちは。

秋風が独り身には冷たい季節になってきたので、この三連休は部屋に閉じこもって「The Outer World」ばかりをしていました。

宇宙を舞台にしたFalloutみたいなゲームなんですが、敵を倒すには銃で撃つより鈍器で殴った方が早い、という謎仕様に戸惑いながら異世界の荒野を彷徨っています。当然ながらゲーム開発の進捗なんてない。どうしよう。

 

GitHubとUnity

さて、「GitHub For Unity」が正式版でリリースされたこともあってか、現在GitHubではUnity製のWebGLゲームや作業効率を向上されるプラグインが数多く公開されています。

 

私も度々お世話になっており、つい最近の記事でもGitHubで公開されていて私のゲームでも使用したプラグインについて取り上げたのですが、今回紹介するプラグインもそれらと同様にGitHubから導入することができます。

 

github.com

「DissolveEffectForTMPro」ではTextMeshPro使用できるディゾルブシェーダが公開されています。

f:id:Karvan:20191104232756g:plain

 

使い方

上記のリンクから「Releases」タブを選択、最新版のunitypackageファイルをダウンロードします。

 

次にAseets⇒Import Package⇒Custom Packageからダウンロードしたunitypackageファイルを選ぶことでUnityプロジェクトに導入されます。

 

ディゾルブシェーダを適用させたいTextMeshProオブジェクトのShaderを「Distane Field(UIDissolve)」に変更し、「Dissolve」欄にディゾルブパターンのTextureを指定しますが、ここでは白黒画像でアルファチャンネルの画像を指定します。

 

shaderの設定

f:id:Karvan:20191105232609p:plain

 

ディゾルブパターンに使用するTextureの設定

f:id:Karvan:20191105232642p:plain

 

最後にディゾルブを動作させるスクリプト「UIDissolve」をアタッチします。

f:id:Karvan:20191105232706p:plain

ディゾルブの縁の色を変えたい場合は「Color」を、ディゾルブパターンのTextureの適用範囲を変えたい場合は「EffectArea」の項目を変更します。

 

ディゾルブの効果の強さを示す「EffectFactor」の値を変化させるとディゾルブの動作を確認できます。

 

スクリプトでUIDissolveクラスのPlayメソッドをコールすると「Duration」で設定した時間で先程の「EffectFactor」の値が0⇒1へ変化し、TextMeshProの文字がディゾルブパターンに沿って消されていきます。

 

試しにステージ冒頭、攻撃目標を説明する演出に使ってみました。
こんな感じ

f:id:Karvan:20191104232641g:plain

サンプリングの関係でぎこちない消え方ですが、実際はスムーズに動作します。
ディゾルブパターンのデザインに凝ればもうちょっとカッコよくなりそう・・・

【進捗報告】底意地が悪いSTG

治らない、治る気配がない

先々週ぐらいから続いていた腰の痛みは徐々に解消されてきたのですが、鼻風邪の方はなぜか継続中で、くしゃみが全然止まらない。

熱があったりだとか寒気がしたりだとかは全くないのですが、花粉症のような症状がずっと続いています。秋でもブタクサとかヨモギの花粉症ってあると聞いたので、もしかすると其れかもしれない。やだなぁ・・・

 

障害物

さて、毎度ブログを更新するたびに進捗が進まない言い訳を書いている気がする次回先の2.5DSTGなんですが、これでも匍匐前進ぐらいの勢いで少しづつ前へ進んでいます。

 

前回の進捗報告では自機が弾を撃った!とか弾道のパータンが揃った!とか、STGとしての基礎中の基礎が実装された事を報告していましたが、果たしてそれからどれぐらい進んだのか・・・ご覧ください。

 

f:id:Karvan:20191027102358g:plain

 

障害物のようなオブジェクトが出てくるようになりました!!

しかも壊れる!!パチパチ。

 

まぁ、巷のSTGでも自機の進攻を阻むような障害物が出てくることはお馴染みなんですが、これまでは平らな壁が延々と続いていく世界だったので、障害物を置くことで2.5Dらしく立体感が出てきた気がします。どうもありがとう。自画自賛。

 

ちなみに壊れた障害物は当然ながらそれに当たったらダメージになります。

なので敵機の弾丸をかわしている最中にウッカリ壊してしまったら更に難しいことになります。こんな感じで

 

f:id:Karvan:20191027102527g:plain

 

ようは障害物を壊さないように注意して進むSTGってことです、底意地が悪いです。

はてさて、いつになったらボス戦の開発に手を出せるのか・・・

 

【Unity】範囲内の時間を制御・・・してるっぽく見せる(Rigidbody編)

Unity1Week

先週はunityroomの方でUnity1Weekが開催されていました。

unityroom.com

当初は私も微力ながら参加する予定だったのですが、前日からくしゃみが止まらくなる症状が出始め、かつ何故か腰が痛くなるという風邪なのか何なのかよく分からない体調不良に悩まされていた為、断腸の思いで断念させていただきました。


まぁ、unityroomに投稿される作品はUnity1Weekに限らず年々とレベルが高くなっていて、Tweeterなどで上げられている進捗報告の動画を観るたびにビックリしたり落ち込んだりすることも多く、仮に参加出来ていたとしても途中で挫折したかも、、、とか思ったり。参加された皆さん、お疲れ様でした。

 

時間を制御・・・してるっぽく見せる

さて、以前の記事で一定範囲内にあるオブジェクトに対して、あたかも時間を制御しているかのようにゆっくり動作させる、みたいなことをしたのですが、その時はDoTweenとAnimationのTimescale、Speedを変更する手法で実現していました。

www.karvan1230.com

しかし、オブジェクトを動かす手段はDoTweenやAnimation以外でも様々な手法があります。


特に最近では『Human Fall Flat』などが人気になったように物理演算によるオブジェクトの挙動を楽しむゲームも増えてきているので、オブジェクトの位置を直接制御するのではなく、オブジェクトに力を加えることで動かしていく方法も注目されてきています。


Unityで物理演算とえばRigidbody。
なので今回はRigidbodyでも同じようなことができないか探っていきたいと思います。

 

Rigidbodyを使って動かす

Rigidbodyを使ってオブジェクトを動かす場合はAddForceでオブジェクトに力を加えて動かします。AddForceでは力の大きさと、継続的な力、瞬間的な力、みたいな力の種類を選んで指定します。


今回は下図のようなモデルを用意しました。

f:id:Karvan:20191022165035p:plain

 

赤い弾にAddForceで横方向に瞬間的な力を加えます。
そして横に移動した赤い弾が球体内にいる間だけゆっくりと移動する処理を作ります。

 

弾が球体内にいるかどうかの判定は前回と同様にTriggerEnterとTriggerExitで判定するのですが、今回の場合はDoTweenの時のように赤い弾だけのTimescaleは変更できません。

また、継続的に力を加えるわけではないのでAddForceのパラメータを変更するわけにもいきません。では、どうするか・・・

赤い弾の速度を直接変更します。

 Rigidbodyではオブジェクトのmass(質量)とvelocity(速度)、angularVelocity(回転角速度)を参照&更新できるので、TriggerEnterでvelocity(速度)を遅くして、TriggerExitで元に戻してあげれば良いはずです。なんて単純な手法。

 

Rigidbody myBody;

void Start()
{
    // Rigidbodyの取得
    myBody = this.GetComponent<Rigidbody>();
}

private void OnTriggerEnter(Collider other)
{
    // 速度を遅くする
    myBody.velocity *= 0.2f;
}

private void OnTriggerExit(Collider other)
{
    // 速度を元に戻す
    myBody.velocity /= 0.2f;
}

 

オブジェクトが回転している場合はangularVelocityに対しても同じような処理を行います。また、OnTriggerExitで速度を元に戻したのに極端に速度が落ちている場合は、OnTriggerEnterでmass(質量)を軽く(=小さく)してOnTriggerExitで元に戻してあげればよい感じなります。

 では、実際の動作を見てください

f:id:Karvan:20191022165447g:plain

 

折角だから別の方法も考える

先程は速度を直接変更しましたが、折角Rigidbodyを使っているので別の手法も考えてみました。

次はこんなモデルを使います。

f:id:Karvan:20191022165733p:plain

 

上空にいるウサギはRigidbodyによって自由落下します。

このウサギに対して球体内にいる間だけ逆方向(=上方向)にAddForceで瞬間的な力を繰り返し加えます。要は抵抗を受けてゆっくり落ちるようにします。

Rigidbody myBody;

void Start()
{
    // Rigidbodyの取得
    myBody = this.GetComponent<Rigidbody>();
}

private void OnTriggerStay(Collider other)
{
    // 上方向に力を加える
    myBody.AddForce(0.7f * Vector3.up, ForceMode.Impulse);
}

 

OnTriggerStayはCollider内にいる間、絶えず呼ばれるのでその中でAddForceを行います。ただ、これだけだと球体から出た時に速度が元に戻らないので、先ほどと同じようにOnTriggerExitでRigidbodyの速度を早くします。

 

private void OnTriggerExit(Collider other)
{
    myBody.velocity /= 0.15f;
}

 

で、実際の動作はこんな感じになります。

f:id:Karvan:20191022170115g:plain

想定通り、落下するウサギにブレーキが掛ったような動作になりました。

これはこれで面白い動きかな、とは思うのですが、速度を直接変更する手法と比べた場合、逆方向の力の大きさとか、速度を戻す係数等はオブジェクトの質量や落下する距離によるので、本当にゲーム内で使う場合は繰り返し実行して調整する必要があります。ちょっと面倒ですね。


 

【Unity】DotweenのToを使ったオブジェクトの伸縮

衣替え

曇り続きならがらも蒸し暑かった夏も終わって朝夕は肌寒いほどとなってきました。衣替えの季節と言えますが、タンスにしまっていた秋冬用のズボンを取り出したら何故か縮んでいてウエストが閉まらない、という経験をした皆さんこんにちは。

私はカッターシャツのボタンが閉まりませんでした。縮んですねカッターシャツって。

 

DotweenのToってやつ

さて、DotweenにはDOMoveやDOJump、SequenceなどObjectのtransformに関しては様々なTweenメソッドが用意されていますが、任意のプロパティとかクラス変数などをTweenしようと思うとToメソッドを使うことになります。

 

iTweenのValueToと同じような機能なんですが、Hashtableを使うiTweenとは異なりDotweenではラムダ式での指定となるので慣れないとちょっと分かりづらいです。
「Number」というクラス変数を1秒で0~100に変化させたい場合の指定は以下のようになります。

 

float Number = 0.0f;
float TargeValue = 100.0f;
float TweenTime = 1.0f;

DOTween.To 
(
	() => Number, 		//何に
	(x) => Number = x,	//何を
	TargeValue,		//どこまで(最終的な値)
	TweenTime		//どれくらいの時間
);

 

変化させたい変数はVector3とかでも可能なのでかなり便利なメソッドなのですが、意外に必要となる場面は少なくてネットを漁ってもImageやMaterialのColorやAlphaを変える使用例ぐらいしか見当たりません。
なので、ちょっと強引ですがtransformにDotweenのToを使った使用例を考えてみました。

 

オブジェクトの伸縮

今回は下の動画のようなJumpするキャラクターに変化を加えます。

f:id:Karvan:20191015211627g:plain

 

キャラクターのJumpはDOJumpを使って動かしているのですが、それに合わせてキャラクターのlocalScaleを変化させます。
ジャンプ中は縦(Y)方向に伸びて横(XZ)方向は縮むように、逆に着地後は横に伸びて縦は縮むようにします。

 

// 縦(Y)方向に伸びて横(XZ)方向は縮む
this.transform.localScale = new Vector3(
    1.0f - 0.40f * Mathf.Sin(amountVal * Mathf.Deg2Rad),
    1.0f + 0.40f * (Mathf.Sin(amountVal * Mathf.Deg2Rad)),
    1.0f - 0.40f * Mathf.Sin(amountVal * Mathf.Deg2Rad));

// 横(XZ)方向に伸びて縦(Y)方向は縮む
this.transform.localScale = new Vector3(
    1.0f + 0.45f * Mathf.Sin(amountVal * Mathf.Deg2Rad),
    1.0f - 0.45f * (Mathf.Sin(amountVal * Mathf.Deg2Rad)),
    1.0f + 0.45f * Mathf.Sin(amountVal * Mathf.Deg2Rad));

 

単純な処理なんですがsin関数を使った単振動なので「amountVal」を0~180に変化させれば、localScaleは最終的に元に戻ってくれます。便利。

 

よって、この処理にDotweenのToを使って「amountVal」を変化させてやることになります。
なお、Dotween.Toでは変化中のコールバック(OnUpdate)が指定できるので、ジャンプ中と着地後それぞれでコールバックを指定して、その中で上の処理を使ってlocalScaleを変更させます。

 

public float amountVal = 0;

public void JumpCharactor()
{
    // ジャンプ処理
    Vector3 dispPos = this.transform.position;
    this.transform.DOJump(dispPos, 1.0f, 1, 1.0f)
                        .OnComplete(OnComplete_Jump);
	
    // amountValの変化
    DOTween.To( () => amountVal, 
                (x) => amountVal = x, 
                180.0f, 
                1.0f)
              .OnUpdate(CallBack_ChangeValues);
}

// コールバック:ジャンプ中のamountValの変化
public void CallBack_ChangeValues()
{
	// 縦(Y)方向に伸びて横(XZ)方向は縮む
	this.transform.localScale = new Vector3(
	    1.0f - 0.40f * Mathf.Sin(amountVal * Mathf.Deg2Rad),
	    1.0f + 0.40f * (Mathf.Sin(amountVal * Mathf.Deg2Rad)),
	    1.0f - 0.40f * Mathf.Sin(amountVal * Mathf.Deg2Rad));
}

// コールバック:Jump完了後
public void OnComplete_Jump()
{
    amountVal = 0.0f;
	
    // amountValの変化
    DOTween.To( () => amountVal, 
                (x) => amountVal = x, 
                targetVal, 
                1.0f)
              .OnUpdate(CallBack_AfterJump);
}

// コールバック:着地後のamountValの変化
public void CallBack_AfterJump()
{
	// 横(XZ)方向に伸びて縦(Y)方向は縮む
	this.transform.localScale = new Vector3(
	    1.0f + 0.45f * Mathf.Sin(amountVal * Mathf.Deg2Rad),
	    1.0f - 0.45f * (Mathf.Sin(amountVal * Mathf.Deg2Rad)),
	    1.0f + 0.45f * Mathf.Sin(amountVal * Mathf.Deg2Rad));
}

で、実際に動作させるとこんな感じ

f:id:Karvan:20191015211954g:plain

 

単純なJumpより楽しい動きになったのではないでしょうか。
あまり使用されないDotween.Toですが、意外と使い勝手は良いですね。

 

【Unity】ゲーム開発で頻繁に使う便利スクリプト

やっぱり休みの日は雨がいい

行楽シーズンで快晴の休日を一日中部屋で過ごし、ふと窓の外が夕焼けに染まっているのに気づいて激しい寂寥感に襲われた皆さんこんにちは。

どこか行こうにもどこにも行くところがないっては辛過ぎなので休みの日はずっと雨でお願いします。

「雨だからなぁー、どこにも行けないなぁー、部屋で過ごすしかないなぁー」って自分に言い聞かせるので

 

言い訳タイム

そういばここ最近は2.5DのSTG開発についてこのブログで触れることがありませんでした。

ありませんでした、というかブログで報告できるような進捗がほとんどないからで、というのも、会社から帰宅⇒PCを起動⇒Unityを立ち上げ⇒プロジェクトを開き⇒寝る、この繰り返しばかりで大事な「開発する」という工程がきれいさっぱり抜けているからです。

 

いや、一応やる気はあるんですよ。

毎日晩飯後には必ずUnityを立ち上げてプロジェクトを開くと何故か急に眠気が襲ってきて「ちょっと10分ぐらい・・・」の気持ちでソファーに寝そべると何故か翌日の午前2時にタイムワープしてしまうという特殊能力を抑えられない自分が憎い。

PS4で遊んでいるときはちっとも眠くないのに何故だろう?

 

便利スクリプト

そんなわけで、ゲーム開発に足を突っ込んでStab of Bee Projectの立ち上げからは2本しからリリースしてないのですが、それ以前からプロトタイプ的なものを作っていたり、UnityRoomへ投稿していたりするので、作成したプロジェクトはそこそこの数になっていたり。


そんな中でも毎度お世話になっている(使用している)便利スクリプトのご紹介

 

BetterDictionary

github.comUnity 向けに高速化されたDictionaryクラス
かつ、ボックス化の発生を防ぐことができます

 

StringOperationUtil

github.comString の連結についてパフォーマンスを改善することができます。
StringBufferを使うより簡便なステップで実装できます

 

PanelSlider

hoge465.seesaa.netuGUIのPanelをスライドイン/アウトさせる
AnimationCurveを使用してイージングを指定できます

 

ErrorReporter

fantom1x.blog130.fc2.comAndroid実機でエラーログをファイルに出力します
実機での動作テスト中には重宝します

 

Unityはコミュニティの層が厚いので、便利なツール(スクリプト)も色々揃っていて有難いですね。

 

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。