20250316_Unityの基本操作学んでみてる1

 

<やったこと>

・Unityの基本操作を学んでみた
    ・Unityのオブジェクトの新規作成/移動方法など
    ・スクリプトの新規作成
    ・スクリプトのオブジェクトに対するアタッチ
    ・オブジェクトを動かすコードを書く
    ・変数の宣言について
    ・IF文を使ってみる
    ・オブジェクトを消滅させる
    ・マテリアルの追加(Unity上)
    ・ぶつかったら消える
    ・オブジェクトにタグを付与する
    ・Prefab(プレハブ)機能 複製

<やったことに対するメモ>

Unityの使い方は以下をまずは見てみてます。
次世代型ITスクール ITeens Lab(アイティーンズラボ)さんのUnity講座

Unityのリファレンスも調べる時に便利そう

Unityのオブジェクトの新規作成/移動方法など


「スクリプトの新規作成」

スクリプトのオブジェクトに対するアタッチ

    作ったスクリプトをアタッチするには、オブジェクトに対して、
    ドラッグアンドドロップで設定できる

オブジェクトを動かすコードを書く」

    startメソッド:スタートした時に1回だけ呼ばれるプログラム
    updateメソッド:1フレームごとに実行されるプログラム

    updateに以下を記載するとオブジェクトがふっとんでった
    transform.Translate(Vector3.forward);
    この意味はTransformをTranslateするよという意味らしい。
    Translate:指示された距離動かすという命令

    Vector3は後ほどの動画で出てくるらしい
    forward をback,right,left,up,downに変えると進行方向を変えることができる。
    
    以下方向へ進む。
    forward:X
    right:X
    up:Y

    Vector3.forward * 0.1f でスピードを緩やかに出来る。
    ※小数点を書くときはfを末尾につけるらしい 
    

「変数の宣言について」

プログラムの基本については別途でやったことがあるのでほーっと思ったところだけ
publicを変数に付けるとUnity側のInspectorで、その変数値をUnity側でもいじることができる。
何もつけず変数を宣言するとprivate変数扱いになる。

「IF文を使ってみる」

「transform.position.z」
こちらの意味は対象オブジェクトの位置のZ座標がという意味になる。

if (transform.position.z >= 30)
{
    speed = -speed;
}
if (transform.position.z <= -30)
{
    speed = -speed;
}

を入れてみることで座標30と-30でオブジェクトが入ったり来たりしてくれた。


「オブジェクトを消滅させる」

以下メソッドでオブジェクトを消滅させることが出来る。
Destroy(gameObject);

「Rigidbody(リジッドボディ)」

物理演算を指示することが出来る

やり方は対象オブジェクトのインスペクターの下の
「コンポーネントを追加」
 →Rigidbodyを検索し追加。

Rigidbodyをコード内でいじる際以下の宣言を行う。
Rigidbody playerRb;
playRbは変数名になる。

playerRb= GetComponent<Rigidbody>();
上記関数でRigidbodyコンポーネントを取得してきて格納する

コンポーネントってなんだ?って一瞬なったけど
先ほど自分が追加したものですね。
オブジェクトにくっついてる部品みたいなイメージを持ちました。


playerRb.AddForce(Vector3.forward * power);
で物理演算時に前方向に力を加えることができた。

キー入力があったら対象の方向へ力を加えた。
if (Input.GetKey(KeyCode.RightArrow)){
    playerRb.AddForce(Vector3.right);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
    playerRb.AddForce(Vector3.left);
}
if (Input.GetKey(KeyCode.UpArrow))
{
    playerRb.AddForce(Vector3.forward);
}
if (Input.GetKey(KeyCode.DownArrow))
{
    playerRb.AddForce(Vector3.back);
}
if (Input.GetKey(KeyCode.Space))
{
    playerRb.AddForce(Vector3.up * power);
}

「マテリアルの追加」

・10回目
Blenderを使用予定なのでこの機能を使うかよくわからないけど!

やり方は、アセットメニュー内でマテリアルを作成。
解説動画と違ったのは
サーフェイス入力というメニュー内のベースマップという横で色指定ができた
テクスチャも貼ることができた
やり方は画像をアセット内にドラッグアンドドロップして

テクスチャタイプをスプライト(2DとUI)に変更。

その後マテリアルのベースマップの横の資格にアセット内に配置した画像をドラッグアンドドロップ!


そしたら色も反映されつつ画像の模様が適応された


ぶつかったら消える

  ぶつかったら消える自体のコードは以下の通り
Destroy(gameObject);

例えばこれを
StartやUpdateメソッドとは別に
private void OnCollisionEnter(Collision collision)というメソッド内に書いた場合
この collider/rigidbody は他の collider/rigidbody に触れたとき」に呼ばれるメソッド
なので他のRigidbodyを指定しているものにあたった時に呼ばれて消滅することになる。

オブジェクトにタグを付与する

何でもかんでもぶつかった時に消えられても困る。
◯◯にぶつかった時に壊れてほしい。
そんなときはオブジェクトにタグをつけて、IF文でそのタグかどうかを判断する。

タグの付け方はインスペクター内のタグから既存のもの新規のものをつけれる

プログラム内でこのタグの時とやるには
 if (collision.gameObject.CompareTag("Finish"))
を使用する。

全文としては以下の通りで
private void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Finish"))
    {
        Destroy(gameObject);
    }
    
}

Collisionは衝突した物体の情報を持ってるらしい。
アタッチしているものから見てぶつかった相手のタグを見るということかな?

コリジョン内のゲームオブジェクトのタグを取り出すみたいな感じ?

「Prefab(プレハブ)機能 複製」

敵キャラや障害物など複数同じものを作りたい時に使う機能

使い方は完成した障害物をヒエラルキービューからアセットにドラッグアンドドロップする。
使うときはアセットのところから配置する。

プリファブが適用されているオブジェクトは青色の名前になる


プリファブ化した後に親を変えても変更は適応されません。


変更した親のオブジェクトのインスペクターを開いて、プレハブメニューのオーバーライドを開いて全てを適応するを押下

そうすると他にも適用された
   


「オブジェクトから玉を発射させる」
Instantiate:インスタンシエイト:クローンを発生させる

①玉のプリファブを作る
②プレイヤー用のコードの中にpublicのtama変数を作成
③①のプリファブを②のtamaへ設定する。
④プレイヤーのコードの中で以下インスタンシエイトを実行する。
Instantiate(tama, transform.position + Vector3.forward * 2, Quaternion.identity);

発生させる(発生させるもの、発生させる場所、発射させる向き)

倒す的には以下コードを付けることで、あたったら消える。
※ぶつかるどちらかにリジットボディを付ける必要がある。
 private void OnCollisionEnter(Collision collision)
 {
     Destroy(gameObject);
 }





コメント

このブログの人気の投稿

20250315_Blenderでローポリオブジェクトを作ってみた

20250318_Blender