Unity 備忘録

Unity についてメモしておきたいことを書きます。個人用ですのでわかりにくい可能性があります

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

Unity備忘録①

メモ書きかつ、テキストだけ実験的に。

後から見直したくなったら画像とかつけるかも

 

ショートカットキー
qwertt
がそれぞれ
ハンドツール、移動、回転、スケールなどに対応。

インスペクターのTransformは左上をクリックして、
リセットを使うと元の大きさに戻る。
いろいろいじって面倒なことになったときに便利。

transform.position += new Vector3(x,y,z)
としてフレームごとにキーを押したらx方向に移動するようにする。

 

編集→環境設定→色から
プレイモードの色を変えられる。
プレイ中は設定が保存されないためそれをわかりやすくするための処理。


スピードをランダムにする場合
 speed = Random.Range(5f,15f);
などとすることができる。
Rangeの範囲の乱数。

 

プレハブ化
ヒエラルキーからプロジェクトのほうに
ドラックしてドロップする。

Prehabsなどのフォルダを作り
そこに入れる。
ヒエラルキーを見た時に水色になっていたらオッケー。


プレハブから生成したゲームオブジェクトを
そのプレハブのインスタンスと呼ぶ。
Instantiate(オブジェクト名,psition,rotation);
でボールを呼ぶことができる。

一定時間ごとに指定した命令を実行するための
InvokeRepeating("関数名",開始時間,リピート間隔);

を利用して一定間隔で関数を実行できる。


UIからTextを作成すると自動でやってくれる。
キャンバスから
Canvas ScalerのUI Scale Mode
のスケールモードから
画面サイズに拡大にするとよい


WebGLでビルドしたとき
デフォルトのフォントだと日本語が表記されない。

 

アツマールのスコアボードを使うには、プラグインを導入して
Atsumaru.scoreboards.setRecord("1",score.ToString());
Atsumaru.scoreboards.display("1");

これでとりあえずスコアボードを使用可能。
何故か、一個だけズレる


・フォント「源流明朝」
https://github.com/ButTaiwan/genryu-font


・参考「ドットインストール」
https://dotinstall.com/lessons/basic_unity_v2