Unity備忘録2
Unity備忘録
Fキーでヒエラルキーで選択しているオブジェクトに焦点を合わせる
右クリックしてドラッグすると、フライスルーモード(ハンドツールの一種)を使ってシーンビューのカメラを回転させることができます。これを実行している間、A と D でカメラを左右に、W と Sで前後に、Q と E で上下に動かすことができます。
■ボタンを押している間ずっと関数を実行する方法
https://sole-game-creater.com/unit-button-hold-it-down/
■回転を使う時
https://arma-search.jp/article/unity-rotation
回転の処理は、positionよりも少し面倒だったりする。
transform.Rotate (x,y,z);
で関数としてxyzだけ回転する処理をする。
条件分岐で回転する範囲を決める場合
例えばyが60以下なら60より大きくならないようにする処理は
if(transform.localEulerAngels.y >= 60)
{
transform.eulerAngles = new Vector3(0,60,0);
}
などで条件式を使う。
ここで注意点は、
インスペクター上では-359などとなるときに、
回転のyが60よりも大きいと判断する。
おそらく359などと正の値で考えていると思う。
条件式に、
&& transform.localEulerAngels.y < 299
などと追加すれば、
-300から-359の間では処理を実行しないようにする。
同様に、
transform.localEulerAngles.y >61 && transform.localEulerAngles.y <= 300
などとすれば
-60から60の範囲で角度を動かせるような処理を作ることができる。
あくまで一例。
if(transform.localEulerAngles.y >=60 && transform.localEulerAngles.y <290)
{
transform.eulerAngles = new Vector3(0, 60, 0);
}
if(transform.localEulerAngles.y > 61 && transform.localEulerAngles.y <= 300)
{
transform.eulerAngles = new Vector3(0, 300, 0);
}
■条件分岐で現在のシーン名を条件式に使う場合
SceneManager.GetActiveScene()
でSceneを戻り値として得る。
SceneManager.GetActiveScene().name
でStringを戻り値として得る。
if(SceneManager.GetActiveScene().name == "現在のシーン名")
{
実行する処理
}
で、現在のシーン名があっていれば処理を実行するといったことが可能。
これは、スクリプト数を減らしたり
ステージ数で分けられているゲームに使う時などに使えそう。
■複数のオーディオソースを使う
https://squmarigames.com/2018/12/19/unity-beginner-audiosource/
複数のオーディオソースを一つのオブジェクトにつけたとき
そのスクリプトには、
AudioSource[] sounds;
などとsounds変数を作り、配列として管理する。
音源を使用するときに
sounds = GetComponent<AudioSource>();
とするが、ここでsoundsは配列なのでGetComponentの末尾に複数形の「s」をつける。
sounds = GetComponents<AudioSource>();
実際に演奏などをするときは
sounds[0].Play();
sounds[1].Play();
などで実行できる。
配列は一番目の添字が0から始まるので注意。
使用SE・BGM
ロボットを殴る
ボタン押下5
ビープ音
飛んでバタフライ
■移動して往復するブロックを作る
MoveBlocksScript
右から動くのと左から動くのでboolを使う。
移動範囲をrangeMin,rangeMaxなどとしてpublic floatで管理する。
speedの符号によって条件分岐。
Mathf.Sign(speed);
で1か-1を戻り値として得る。
なぜMahtfとfが付くのかは謎。
position.xが一定値より大きくなったらspeedに-1をかける。
■別シーンに変数を持ち越してそれを別スクリプトで使用する
https://qiita.com/Akarinnn/items/00f58b7cbc7c5d659d92
「static」を使うことで持ち越すことができる
例えば、GameStageScriptという名前でスクリプトを作成し、
整数のint型でgameStageと変数を定義した場合。
pablic static int gameStage;
とすることで、他シーンに移動しても変数の値が保持される。
startの中に
gameStage= 1;
として
別シーンを作成する。
空のゲームオブジェクトを作成して、
Testと名前を付ける。
そのオブジェクトににTestScriptをコンポーネントする。
このTestScript内で、GameStageScriptのgameStage変数を使用する。
受け取る変数をstageNumberなどとすると
int stageNumber = GameStageScript.gameStage;
でTestScript内で保持した変数を扱える。
Debug.Log(stageNumber);
などとして確認する。
これを使用する場合、どのスクリプトにStatic変数を書いたか忘れないようにする必要がある。
もしも、staticを多く使用する場合は別途メモなどを残す必要があるだろう。
あまり多く使用しないのが一番いいと思う。
■アツマールに投稿する場合
参考になるサイト
〇プラグイン関係
https://najicore.com/atsumaru-unity.html
〇スコアボード等
https://najicore.com/atsumaru.html
〇画面サイズ設定、フッター等
https://bardaxel.jp/archives/665