講義メモ ・p.050「スペースの入れどころ」から p.050 スペースの入れどころ ・基本的に単語の途中でなければ空白(半角スペース、Tab、改行)の挿入は自由 ・演算子は記号と単語があり、記号のものは前後の空白は任意  例: a = 1 + 3; a=1+3; //どちらでもOK ・単語である演算子の前後に(前が記号であれば後ろに)空白が必須  例: x = new Slime(); x=new Slime(); //どちらでもOKだが「x=newSlime」はNG ・(){}[],の前後の空白は任意だが、業務ではルールを決めることが多い ・なお、VSの「書式設定」機能で、あらかじめ業務ルールや好みのルールを設定しておくと便利  ①「ツール」「オプション」を開く  ②「テキストエディタ」「C#」「コードスタイル」「書式設定」を開く  ③「全般」でオートフォーマットをオン/オフにして、それ以降の各項目を調整 p.052 パブリック変数 ・パブリック変数はC#の文法であり、プログラムを構成するクラスが持つデータメンバ(変数)を外部に公開し、参照や変更を認める仕掛け(変更は制限可能) ・外部から想定外の操作をされてしまう懸念があるので、注意が必要 ・Unityでは実行時に実行画面から値を操作できるので、テストなどに便利 ・定義位置:classの中でstartなどのメソッドの外(前)  ※ startなどのメソッドの中で定義するとローカル変数扱いになる ・書式: public 型 変数名; p.053 Chap1_10_1.cs について ・スクリプトを作成し、保存したら、Unity側でInspectorにTextという入力可能なテキストボックスが表示される  ※パブリック変数名は「text」だが表示名は自動的に先頭が大文字になる ・テキストボックスに適当な文字列を入力してからプレイするとこれが表示される ・なお、実行中にテキストボックスの内容を変更しても、次回の実行には反映しない(前回の実行前の入力内容に戻される) ・よって、テキストボックスの内容の変更は実行を停止してから行うこと  ※実行中のプログラムに反映できるが、Start()は実行直後にしか動作しないので意味がない(Update()の内容には反映するが…) p.053 Chap1_10_1.cs using UnityEngine; public class Chap1_10_1 : MonoBehaviour { public string text; //文字列型のパブリック変数 void Start() { Debug.Log(text); //パブリック変数の値を表示 } } 補足:パブリック変数の初期化について ・パブリック変数の宣言において初期値を与える初期化を行っても、Unityの場合、Inspectorにおける入力が優先されるので、Chap1_10_1では結果的に空白になる ・なお、Start()メソッドの内でパブリック変数に代入すると、代入値がInspectorに反映する  ※よって、Debug.Logで表示しなくても変数値を確認できる p.054 入力結果をちょっと加工して表示する ・2項+演算子は左辺と右辺のどちらかまたは両方が文字列の場合、連結した結果の文字列を返す(加算にならない) ・これは、文字列リテラルの場合も、string型変数やstring型を返す式の場合も同様 ・例: Debug.Log("名は" + a); //aが整数でも実数でも文字列でも連結になる ・よって、2項+演算子を複数用いる式では加算になるか連結になるか注意  例: 1 + 3 + "倍" → "4倍"  例: "倍" + 1 + 3 → "倍13"  例: "倍" + (1 + 3) → "倍4" ・これは整数や実数を返す式と、(連結の様に)文字列を返す式の混在で一般的に起こることであり、部分式(式を構成する部分)ごとに戻り値型を把握するのがポイント アレンジ演習:p.053 Chap1_10_1.cs ・上記の例を試そう 作成例 using UnityEngine; public class Chap1_10_1 : MonoBehaviour { public string text; //文字列型のパブリック変数 void Start() { Debug.Log(text); //パブリック変数の値を表示 Debug.Log(1 + 3 + "倍"); //"4倍" Debug.Log("倍" + 1 + 3); //"倍13" Debug.Log("倍" + (1 + 3)); //"倍4" } } 補足:パブリック変数の型について ・C言語/C++/C#のコマンドラインパラメータも実行時に外部から値を渡すとして知られているが、これらは文字列のみが対象 ・対して、Unityのパブリック変数はstring型に限らない ・double型にすると、実数を渡すことが可能で、Inspectorの初期値は自動的に0になる(内部的には0.0) アレンジ演習:p.053 Chap1_10_1.cs ・double型のパブリック変数rとpiを追加する ・円周率としてpiを用いて、半径rの円の面積を「半径●の円の面積は■」という形式で表示しよう 作成例 using UnityEngine; public class Chap1_10_1 : MonoBehaviour { public string text; //文字列型のパブリック変数 public double pi, r; //実数型のパブリック変数 void Start() { Debug.Log(text); //パブリック変数の値を表示 Debug.Log("半径" + r + "の円の面積は" + (pi * r * r)); } } 参考:UnityとC#の円周率 ・円周率πは利用が多いので、UnityとC#それぞれに実装されている ・Unity;Mathf.PI; float型で単精度(3.141593) ・C#;System.Math.PI; double型で倍精度(3.14159265358979)  ※なお「using System;」を書いておけば「Math.PI」で良い ミニ演習:mini055.cs ・double型のパブリック変数で身長と体重を与えるとBMIを表示しよう ・BMIは体重(kg)÷身長(m)÷身長(m)で得られる ・身長はm単位ではなくcm単位で入力できるようにしよう 作成例 using UnityEngine; public class mini055 : MonoBehaviour { public double weight; //実数型のパブリック変数(体重(kg)) public double height; //実数型のパブリック変数(身長(m)) void Start() { Debug.Log("身長" + height + "cm、体重" + weight + "kgなので"); Debug.Log("BMIは" + weight / (height / 100) / (height / 100)); } } 参考:パブリック変数コメント ・パブリック変数にHeaderコメント機能でInspector表示用の説明文を記述できる ・パブリック変数の宣言の直前に独立した行で下記の書式に記述すると良い ・書式: [Header("説明文")] ・C#の「文」ではないので末尾にセミコロンは不要 ミニ演習:mini055.cs 続き ・パブリック変数コメントを追記しよう 作成例 using UnityEngine; public class mini055 : MonoBehaviour { [Header("体重をkg単位で入力してください")] public double weight; //実数型のパブリック変数(体重(kg)) [Header("身長をcm単位で入力してください")] public double height; //実数型のパブリック変数(身長(m)) void Start() { Debug.Log("身長" + height + "cm、体重" + weight + "kgなので"); Debug.Log("BMIは" + weight / (height / 100) / (height / 100)); } } 補足:実数の誤差について ・パブリック変数で実数を渡した場合、内部的に2進数に変換されるため誤差が発生する可能性がある ・UnityのバージョンによってはDebug.Logにおいて誤差をそのまま表示してしまう場合がある(Unity 2022.3など) ・C#では誤差を最小化する方法としてdouble型の上位型としてdecimal型が提供されている。 ・decimal型は金額計算などの誤差が許されない計算で用いられるが、メモリ容量が倍になるというデメリットもある ・また、Unityでもdecimal型は利用できるが、パブリック変数の型にすると、Inspectorでは表示されなくなる(実質的に使えなくなる)という制限がある 提出:ミニ演習:mini055.cs 続き 次回予告:p.056「組み込み型とは」から