Unityに関連する記事です

 プログラムを始めたばかりのうちは、教材やサイトの記事などを参考に写経することから始まると思います。
そういった場合、処理内容が完成されていてエラーが出ませんので、書き写すことさえ出来れば、問題なくゲーム上で処理が動くようになります。

 逆にエラーが出た場合もエラーを解消させる方に目が行ってしまい、折角解消できたとしても
どういったエラーが問題でなぜ動かなかったのかまで、追及できないことがほとんどです。

 そのため、教材やサイトを参考に進めているのに、学習している実感がわかないという感覚になりがちです。

 自分でエラーを見つけるためには、前提として、プログラムの処理をしっかりと理解している必要があります。
また、プログラムを書いていくためにも、同様の理解が必要です。

 ここでは、エラーの原因を見つけるための手法を学習します。



Debug.Logを入れる


 一定の処理ごとにDebug.Logを入れて、処理の流れを確認します。
特にメソッドは、呼びだし命令がない限り実行処理されませんが、最初のうちは、書いてあるメソッドが書いてある順番にすべて処理されているように勘違いしやすいです。
そのような誤解を解くためにも、Debug.Logによって処理がどのように進んでいくかを確認することが大切です。

 Debug.Logを入れることを癖付けしておくことで、エラーの原因特定の際に役立ちます。

 処理の流れがわかってくると、Debug.Logをいれるべき場所も見えてきます。
ですが、最初のうちは、面倒であってもなるべく多くの場所にDebug.Logを入れておきましょう。


ピリオド(ドット)の意味を理解する


 C#のプログラムにおいてピリオド(ドット)演算子(.)は特別な意味を持ちます。これを理解できないと、C#のプログラムを読み解いていくことが出来ません。

〃燭梁綟されている変数名.publicな関数、またはpublicな変数、またはプロパティ

 この書式が基本書式です。この後にもさらにピリオドを使用することによって命令をつなげて書いていくことが出来ます。
このように処理がつながっていくことをアドレス処理といいます。ピリオド単位で型の情報が変わり、命令先が変化していきます。



 ここではTextコンポーネントを例に説明していきます。



 まずはTextコンポーネントを変数に代入して、変数からTextコンポーネントを扱えるように準備をします。

float time;
Text txtTime;

txtTime = GetComponent<Text>();

 これで代入が済みましたので、txtTime変数をつかうことで、Textコンポーネントの持つプロパティに対して命令を出すことが出来るようになりました。

 まずは「TextコンポーネントのTextプロパティの部分にtime変数の値を文字列として表示させる」処理を書いてみます。

〃燭梁綟されている変数名.publicな関数、または変数、またはプロパティ
  ↓ この書式に当てはめて
txtTime.text = time.ToString();
  ↓ 型で見た場合
Text => string = string

 「txtTime変数に代入されているTextコンポーネントを使うことを命令し . Textコンポーネントの持つTextプロパティに対して = の値を代入することにより
time変数の値を文字列として表示させる」という処理になります。
 ピリオドとイコールの位置と命令文の位置を同じに書いてあります。

 △鉢の型はどちらのstring型ですので代入が出来ます。

Unity上でTextコンポーネントを見た場合には、この部分に対しての命令になります。




 それでは続いて、同じtxtTime変数を使用した処理で「TextコンポーネントのColorプロパティの色を赤にする」処理を書いてみましょう。

〃燭梁綟されている変数名.publicな関数、または変数、またはプロパティ
  ↓ この書式に当てはめて
txtTime.color = Color.red;
  ↓ 型で見た場合
Text => color = dolor

 「txtTime変数に代入されているTextコンポーネントを使うことを命令し . Textコンポーネントの持つColorプロパティに対して = の値を代入することにより
文字の色を赤にする」という処理になります。
 ピリオドとイコールの位置と命令文の位置を同じに書いてあります。

 △鉢の型はどちらのColor型ですので代入が出来ます。

Unity上でTextコンポーネントを見た場合には、この部分に対しての命令になります。



 これらの例のように、ピリオドの位置と型を理解して、処理を読み解くように考えていきましょう


日本語化してみる


 問題となるのは、なんとなく処理が動いてしまっているため、分かったつもりになってしまっていて、処理の内容が理解できていないケースです。
この場合、写経している間はよいのですが、自分で始めからプログラムを設計する、それを組み立てるという段階になると、処理を書くことが出来なくなってしまいます。

 そこでまず、書き写すプログラムの処理をすべて日本語化して説明を書いてみることをおすすめします。
処理自体にもコメント的な文章がついていることもありますが、それをかみ砕いて、処理の内容まで書いてみるようにします。

 以下のようなスクリプトがあるとしましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    float speed;
    
    void Start()
    {
        speed = 0;
    }

    void update()
    {
        if(Input.GetMouseButtonDown(0))
        {
            this.speed = 10.0f;
        }
          
        transform.Rotate(0, 0, this.speed);

        if(speed > 0){        
            this.speed -= (0.9f * Time.deltaTime);
        }
    } 
}

 それではこの処理を、日本語化して説明してみましょう。


日本語化した処理


 上記の処理について、ご自分で日本語化してみてから、こちらを確認してみてください。

<= クリックすると開きます。



補足


 いかがでしょうか。説明は出来そうでしょうか。難しい部分があるのであれば、その処理の内容について、理解が深まっていない状態だと思いますので
もう一度、復習を兼ねて処理を書いてみましょう。どういった処理なのか、頭でイメージできている状態で書いていくのと
ただ漠然と書いていくのとでは、学習に大きな差が出てきます

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます