【Unity/C#】thisキーワードの使い道について簡単に紹介
インターネットでC#のコードのサンプルを漁っていると、たまに出てくる「this」の文字。 これってなんね? と初心者の頃に戸惑った記憶がかすかにあるような気がしないでもないので、自分のおさらいがてらthisキーワードについて簡単に紹介します。(「おさらいがてら」なんて言ってますが普通に使ってましたすみません) C#のthisキーワード C#ではthisキーワードを使って、そのインスタ […]
あなたのゲームをいち早く完成させるための研究所
インターネットでC#のコードのサンプルを漁っていると、たまに出てくる「this」の文字。 これってなんね? と初心者の頃に戸惑った記憶がかすかにあるような気がしないでもないので、自分のおさらいがてらthisキーワードについて簡単に紹介します。(「おさらいがてら」なんて言ってますが普通に使ってましたすみません) C#のthisキーワード C#ではthisキーワードを使って、そのインスタ […]
Hierarchyウィンドウではゲームオブジェクト間で親子関係を設定することができます。適切に親子関係を設定しておくことで、Hierarchyウィンドウから情報を確認しやすくなり、開発やテストのスピードが向上します。スクリプトから親子関係を設定する場合はTransformのSetParentメソッドを使うのが便利なので、これをマスターしましょう。
パーリンノイズを使ってなだらかに高さが変化する地形オブジェクトを生成する機能をエディタから使えるようにしました。インスペクターウィンドウに表示されたボタンをクリックすることでシーン内に地形オブジェクトを生成してくれます。ライトのベイクをしたい時には事前にオブジェクトを生成しておく必要があったのでこの形でも実装してみました。
このブログで扱っているパーリンノイズに関する記事をまとめています。一部を見てもらうだけでもいいですし、どんな点で気をつけないといけないのかといった課題についても潤を追って対応しているので流れをおってもらってもいいかもしれません。
このページでは主にゲーム全体で使いたい設定値、定義値をstaticなクラスに記載する際、constとstatic readonlyのどちらを使った方がいいかなーという点を出発点に、コンパイル時定数と実行時定数の違いを掘り下げています。
UnityではMonoBehaviourを継承したクラスを作ることが多いですが、これ以外にもいわゆるC#で作成するような通常のクラスを作成して使っていくことで柔軟にコーディングできます。また、staticなクラスも適切に使っていくことで、ゲーム内のデータを保持したり設定値や定義値を保持することもできます。
パーリンノイズを使って自然に変化する値を計算し、TerrainのHeightMap(ハイトマップ)として設定します。Terrainは画面から操作するものと思っていましたが、スクリプトからも値を設定できるので便利です。
パーリンノイズを使ってなだらかに変化する地形を作成しましたが、パーリンノイズを加算または乗算によって複数回重ね合わせることで、より変化に富んだメリハリのある地形を作成することができます。加算、乗算の両方についてこの記事で実験しています。
ドローコールを減らすためには、ドローコールの処理をまとめるようにしましょう。まとめるためにはUnityのバッチング処理である動的バッチ処理、静的バッチ処理を活用します。ドローコールが減ればCPUの処理負荷が減り、CPUの処理負荷が減ればフレームレートが維持され、快適なゲーム環境を提供することができます。
なにか新しい技術や機能を試す時には、いきなりメインのプロジェクトで試すのではなく、検証用のプロジェクトを作って試すようにしましょう。万が一プロジェクトを壊してしまった時の焦燥感、やっちまった感は結構心にくるので、影響を抑えつつ検証するのがグッド。
メッシュを結合することでメッシュを描画する命令を行うバッチ数が減らせます。このページではバッチ数を減らしつつ、同じマテリアルのメッシュごとにまとめる簡単なサンプルを紹介しています。マテリアル単位でまとめることで元々のマテリアルの情報を維持できるのが嬉しい点です。
メッシュを結合する場合はインデックスバッファが16bitに達するとうまく結合してくれないんですよね。大量のメッシュを結合する場合はインデックスバッファのフォーマットを32bitに変更しておくと上限に引っかかることも少なくなると思います。
CombineMeshesを使ってメッシュを結合するサンプルを紹介しています。このページではパーリンノイズを使ってなだらかな地形を作成して、それらのオブジェクトのメッシュをまとめています。メッシュを結合することでどれだけパフォーマンスの負荷が軽減されるのか確認するのも勉強になりますね。
UnityではMathfクラスにPerlinNoiseメソッドというパーリンノイズを扱うことができるメソッドがあります。このメソッドを使ったサンプルとして、オブジェクトをインスタンス化する高さについてパーリンノイズを使って、ランタイムでなだらかな地形を生成してみます。なお、実際に使うにはパフォーマンス面で辛いので調整が必要です。
パーリンノイズ(Perlin Noise)を使う機会はたびたびありましたが、パーリンノイズそのものについての理解を深めようと思いちゃんと調べてみることにしました。実際にコードをかいて値を取得してみると面白いですね。色々と使いやすいノイズです。
MathfクラスのClampメソッドとClamp01メソッドは個人的に地味に使う機会の多いメソッドなので、ついつい紹介したくてこのページを書いてしまいました。数学的計算がたくさんできるMathfクラスはワクワクしますね。
Mathfクラスはリファレンスを眺めているだけでも色々と便利なメソッドがあってワクワクします(理系脳)数学というと敬遠してしまうこともありますが、プログラミングでは答えを見ながらコーディングできちゃうので、恐れることなく使ってみると案外楽しいかもしれません。このページではサイン、コサインを使った超シンプルなコードを紹介しています。
UnityでAndroid向けにゲームアプリをリリースしようとする時に見かけるAPIレベルについてOSのバージョンやSDKのバージョンとの関連を整理しています。ストアでリリースする際の要件にも関わってくる部分なので調べておきたい部分です。
Unityで使用しているAndroid SDKのパスと、Android Studio側で使用しているAndroid SDKのパスが異なる場合、どちらのパスを使うのか確認するダイアログが表示されます。個人的にはエクスポートしたプロジェクトでビルドするかどうかでどちらのSDKを使うか決めています。
UnityでAndroid向けビルドを行う場合はマニフェストファイルを自動的に作成してくれます。直接apkファイルを出力する場合は目にする機会がないこともあるので、apkファイルに含まれているマニフェストファイルについて簡単に紹介します。