プラグイン集

無料ブログはココログ
2021年11月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

サンプルJS

  • ユーロバカ一代の締切
    ・・・初期化中・・・

« 主婦ゆに! | トップページ | はじめようMinecraft »

2015年3月26日 (木)

主婦ゆに!3章を読むp=3、no1

書籍版主婦ゆに!は、第2章までしかないので、第3章以降は、Togetterまとめから追跡するしかない。書籍版とは違い、まとめ具合が弱い?結構シーンが飛び飛びなので、追うのに苦労する。書籍にするためにもう一度精査するというのはやっぱりいいことだね。

ゴボウ巻きスクリプトを改造していく主婦。ついでに、スノーボールミクを実現すべく別シーンも制作する。そんな主婦に立ちはだかったのが、スクリプト(プログラミング)の壁。主婦ゆに!第3章の3ページ。(ページあたりのツイート数の設定とか変えてない場合。)

正直言って、講師側のお前ら、素人にそんなボコボコ新専門用語出してどうするんだ?お前らみんな高橋麻奈の2番煎じか?もっと分かりやすくするために頭使え。しかもお前らの(プログラミング)言語で話しても空中戦になるばかりで、言っても仕方ないだろ。お前ら”プロ”グラマなんだろ?”アマ”グラマじゃ無いんだからさ。

return;とかの説明の前に、主婦ゆに!3章3ページ時点でどうなっているかをおさらい。
かなり細かくいきますので、覚悟するか、ブラウザバックするかした方がいいです。
※厳密さは捨てます。理解しやすさ主眼に行きます。高橋麻奈以上の嘘をつきます。説明のできない、”プロ”グラマの皆様は黙っててくださいね。

ちょっと前(第3章の2ページぐらい)の状況:
主婦「Unityちゃん、Unityスクリプト書くよ。」
Unityちゃん「分かった。最低限StartとUpdateを書いてね。」----①
主婦「(よくわからないけど、Updateの中にtransformの文書けば、オブジェクトが動くのね。)ゴボウ巻きは、こんな感じでどう?」----②
Unityちゃん「分かった。(エラー無いし)やってみる。」----③
結果:ゴボウ巻きのオブジェクトが動いた。

裏側では、革新的な事態が起こってますが、ここでも先にルールを出します。(むしろ慣れている”プロ”グラマだから忘れてないか?)
プログラムは、上から下へ厳密に1行(;まで)を解釈していきます。※コンパイラ方式は違うだろという方→黙ってろ!ガウ
その;までの行は、演算子の順位と結合規則によって厳密に運用されます。Unityの資料が無いので、C言語の資料でごめんなさい。

Oprator1算数でもおなじみの括弧が最優先、足し算より掛け算の方が先、代入は最後の方と言うルールです。その際に括弧や足し算の前後の関係を見て左が先か、右が先かの優先順位を決定します。括弧が無ければ左側から順番に計算をします。例外は!や~の否定をしたり、整数から小数への変換(いわゆるキャスト・鋳込みと言う物)は右から左に計算します。

なので、transform.position.y += 0.1;は無事に、右側の0.1が左側のtransform.position.yの元データに加算され、加算された新しい値をtransform.position.yに格納することができました。やったぜ、大勝利だ!!
これが、プロでも忘れがちなプログラミング(というより、コンピュータの計算)のルールです。
お待たせしました、主婦さんがやっていた革新的な事態への説明?に入ります。

①の時点で、主婦さんがプロジェクトのCreateメニューからUnity Script(メニューにはJavaScriptって書いてあるけど、読み替えてね。)を作りました。Unityちゃんはスクリプトにこんなことを書いててくれました。//以降は私流の和訳です。もちろん正しくはありませんが、ニコニコ的に言う大体あってるで行きます。

#pragma strict //Unityちゃん、スクリプトの文法は厳密にチェックしてください。(C言語派へ:-Wall的な奴、VB派へ:Optoin Strict on、主婦へ:このカッコ内は読まなくていいです。)

function Start () { //Startと言う名前の関数(function)です。引数(Starの後に書いてある括弧()の中身の事。)はありません。Unityちゃんは、ゲーム起動時の最初の1回だけこの関数を呼びます。

}//中身が空で終わります。

function Update () { //Updateと言う名前の関数(function)です。引数(Updateの後に書いてある括弧()の中身の事。)はありません。Unityちゃんは画面を書くたびにこの関数を呼びます。

}//中身が空で終わります。

日本語部分が無くなったものがUnityちゃんが作ってくれます。#pragma~文はおまじないで処理されたみたいですが、厳密にUnityScriptの文法チェックしてねというお願いを、真っ先にUnityちゃんにしていたのでした。
次のfunction 関数名 () { ~ } が関数です。functionが先で関数の名前が次に続きます。その後の()は引数と言われる部分ですが無いので省略。
ここを設定すると、数字や文字などを渡せるようになります。まだ主婦ゆに!3章3ページまでしか読んでないけど、たぶんやったはず。

そして、主婦さんは②で下のようなUnityスクリプトを書き、ゴボウ巻きにセットしました。Unityスクリプトを設置したので、Unityちゃんはゲーム起動時にゴボウ巻きスクリプトの、function Start(){  }を実行する(呼び出す・見に行く:←ここの表現は人による)ようになり、画面書き換えのたびに、function Update(){  }を実行する(呼び出す・見に行く:←ここの表現は人による)ようになります。

functionと付いているので、@GOROman先生は関数と発言していると推測(もしくは彼・彼女はC言語系統のプログラマでしょう)。
んじゃ、メソッドは何か。ぶっちゃけ、関数です。区別しなければならない時が来たら区別してください。
Unityスクリプトは一番外側のclass プロジェクト名{  }が省略されていると考えて、メソッドと言う発言をしたのでしょう。この場合のメソッドは関数と同じと考えてOKです。練習と経験を積んで分けなければと思ったときに分けてあげてください。

#pragma strict

class Syufuyuni1 { //←ここと

    function Start () { 
        
    }

    function Update () { 
        
    }

}  //←ここが省略されている

C#を意識して上のコードのように考えれば、メソッドと言える。

読まなくて良し:VB使いとして言わせてもらえば、これはサブルーチン。値を返さないから。関数は、値を返してこそ何ぼの物。値と言うのは数字に限らず文字列や何かしらのビット列なりの何でもを指す。アセンブラーな方も関数じゃなくてサブルーチンと言うだろうな。Javaの方は値を返すかどうか関係なくメソッドだな。

IT用語って例の感じに同じ意味を指すのに言葉が何個もある。自分がぱっと思いつくのは、ウイッグ。結局のところズラ(カツラ)じゃん。そんな感じで何通りも同じ意味を指すのに言い返されまくっているのがIT用語の特徴。

やっとこさ③。これで、monoDevelopを閉じたときにUnityちゃんが文法のミスを指摘して、コンソールに出力してくれます。#pragma strict書いたからしっかりやってくれます。これ(この何もないコードの状態)でUnityの再生ボタンを押すと、”何もしない”をしてくれます。

returnに向けてもうちょい。最初の方のビデオの学習で、こんな感じのコード書いて、コンソールにOden World. => 3939って感じの奴を出したと思う。

#pragma strict

 function Start () { 
    //Start関数が始まった。最初の命令が実行されるぞ。
    Debug.Log("Oden World. => 3939");//←ここの命令が実行される。(関数に入った。)
}

 function Update () { 

}

Startの関数が始まって、中の命令をやりだすことを、関数に入ると言います。同様に、関数やり終わってfunction Start () {  }の最後の}にたどり着くと関数を出ると言います。抜け出すという場合は、関数の命令群の途中でやめてしまう事を指します。Unityちゃんに関数をここでやめる指示するのがreturn;文です。やめるのでそれ以降はやりません。
遊○王で言えばやることが残っているのに、「ターンエンドだ。」と言うのと同じ。

return;でここでやめる事は分かったよ。でも何処に返るの?と言う意図での発言なら鋭い。こういう人は速く上達する。return;で関数やめたら何処に返るか。Unity本体に返ります。
遊○王で言えば主婦さんがターンエンドしたので、Unityちゃんが「私のターン。」と描画処理とか音の処理とかを始めます。それで、次のコマに移って、ゴボウ巻きスクリプトを実行する必要が出ると、Unityちゃんがターンエンドを宣言します。そして、主婦さんが書いたUpdate関数(メソッド)の実行を始めます。(主婦さんのターンですね。)関数の途中でreturn;が無ければ、関数の最後の”}”まで処理を行います。そして主婦さんのターンが終了し、再びUnityちゃんのターンになります。

長かった。これでやっとreturn;の説明ができた。return;の卒業クイズです。直近に出てきたコードの中にreturn;が2ヵ所隠れています。どこでしょう。これ分かったらreturn;は卒業でしょう。

答え:function 関数名 () {}の閉じ括弧”}”の直前。

#pragma strict

function Start () { 
    Debug.Log("Oden World. => 3939");
return;}//←終了括弧}直前にreturn;が隠れている

function Update () { 

return;}//←終了括弧}直前にreturn;が隠れている

関数最後の閉じ括弧”}”にたどり着いたら、自動でreturn;します(暗黙宣言ともいわれるかな。)。関数の終わりだから当然ですね。なので、わざわざ関数の最後にreturn;を書く人は少ないです。※戻り値を返さなければならない場合を除く。戻り値がある場合はreturn x;とかやって値を返します。
読まなくて良し:もっと言えばプログラミング言語によりreturnを書く・書かないが別れたり、同じ言語でも宗派のよって書く・書かないが別れます。

主婦さんの関数なんだからy=f(x)でx突っ込んだらyが返ってくるんだから、何かぶち込んだら、何か帰ってくるという認識はそれは正しい。VBって省略してたVisual Basicだと値が返ってくるものが関数で値が返らない(JavaやCで言うvoid)はサブルーチンだから。みんな関数のC言語がおかしいと言えなくない。
読まなくて良し:ただおかしいとは言い切れない。C言語の上級者はあえてvoidで値を返して、適宜データを変換して使う事がある。

何か書くこと忘れている気がするので、この辺にブログ編集都合上の少々余白。


次の話題、メソッドの範囲とifの範囲。これは、スコープ(変数範囲とか有効寿命とか言われる奴が分かると早い。)ゴボウ巻きスクリプトの関数(メソッド)の範囲とif分の範囲を図示するとこんな感じ。
Block_2{}で囲まれた範囲という解釈でOK。たぶん後でやると思うけど、ifの中で宣言した変数を{}の外で使おうとすると使えない。functionの外に変数を宣言すると、どの関数(メソッド)でも数字や文字列が使える。といういう事をやるでしょう。


key.なんちゃらについて

Input.GetKey~は、Upならキーを離した時、Downならキーを押し込まれた瞬間、何もついて無ければ、押されている間で反応します。それだけ。どの瞬間で動かしたいかで使い分ける。~したらXXするシリーズ。

ユニークと言うのは、「変わった」・「おかしな」と言う意味ではなく、「一意の」とか「被りのない」という意味。キーボードにMyナンバーとか住基番号振ってあると思って。
その番号を直接指定してもプログラミングできるんだけど、後で読んだときに判らなかったり、人に見せるときに判らなかったりするので、人に判りやすいようにKeyCode.Cという名前が付いている。
う~ん、ポケモンで言えばわかりやすいか?ポケモンのNo150番と言うより、ポケモンのミュウツーと言う方が分かりやすいのと同じ理屈。ポケモンと言う部分が、KeyCodeの部分で、Cの部分がミュウツーという仕組みだ。裏側では150番というコンピュータに判りやすい番号が動いている。

キーを直接指定できて便利そうだが、こいつにはトラップがある。ゲームを配って、ユーザーがキーを変えたいと言ってきた時に困る。
EditメニューのProject Setting→Inputで現れるインスペクターに登録してあるキーならば、実行時に変更ができる。

インスペクター
Iput_inspector4ゲーム開始画面のグラフィクスの隣のタブに、キーの変更画面がある。
Input_unity3ここを変更すれば、変更したキーでゲームを遊ぶことができる。

だけどもKeyCode.何とかで指定したキーを変えるには、自分で別途キーコンフィグ画面を用意する必要がある。なので、操作はこのキーと言うよりも、何とかと言うキーからの入力があるかの判断に使うのが妥当。(もちろんプログラミングに慣れてきてからの話ね。)
最初は勉強で書いてみて、「これ、どうやってキー変えるの?」→「あっ」とか「おぉ」とか体験して学習する方がいいから。


えい、もうポリモーフィズムとかインターフェース書いてしまえ。

ポリモフィズム(多態性とか多相性とかいう奴。)まとめサイトだと、高橋麻奈の二番煎じやってるな。ワンとかニャンとか。きたみりゅうじ本で成長した自分にとっては、きたみりゅうじさんのキノコ君じゃないけど、ワン・ニャン、だから何なのよ。と思う。

これは、プログラマーの歴史と言うか哀史見た方が分かりやすい。

エンジニアの性質:
・エンジニアと言うかプログラマは、人一倍ものぐさ。だって自動化させるためにプログラミングしてるんだから。
・アリモノ再利用したい。新しく作れるけど、バグ取りどうするの?(→最初のものぐさへ)
・似て非なるものを何とかしたい。(→最初のものぐさへ)
と言う事を頭に置いといて。

DVDのプレイヤーソフトを作っていたが、社長の思い付きで急きょBlu-rayに対応しなければならなくなった。play関数で両方に対応できればな・・・
昔:play_dvdとplay_blurayと言う二つの関数を作らなければならなかった。
今:ポリモーフィズムのおかげで、メディアの区別なくplay関数でDVD、Blu-rayの他にSDカードやCDも再生できるようになった。
この場合の鳴けという命令に対応するのが、再生play命令。ワンやニャンに対応するのがDVDやBlu-rayの再生。(似て非なる機能を何とか使えるようになった。)

図面から面積を計算する関数を作っていた、これも社長の思い付きで急きょ体積も計算できなければならない。もちろん今作っている面積も計算できる必要がある。残念ながら、mensekiもtaisekiも関数として別の人が使っていて、calcしか使えない。
昔:calc_2d、calc_3dの両方を作って対処。2dの書き換えを3d側に忘れたりなどで、バグが多く怒られた上に、サビ残でソースを直した。
今:同じ名前で引数違いの関数が作れる。(オーバーロード)、立体は、面積に高さ掛けてればいいので、体積側から面積関数を呼び出し、値を受け取り高さを掛ける。(アリモノ再利用)その値を返すことで体積も計算OK。
動いたところで、社長の追加の一撃、「小数」にも対応してね。引数を小数にした関数を同一構造で作って完成。(本当は、もっと簡単化できる。)(整数と小数という似て非なるものを何とかしたい)
よかったよかった。

分からない例で申し訳ないけど。多相性はうまく使えば便利。
特に複数人プログラミング時やライブラリと言う便利機能使うとき。
プログラミングは同じ名前の変数や関数を基本的には使えない。(ポリモーフィズムや名前空間、スコープなどで回避は可能だが。)
でも人間大体同じ事を考えて、変数名や関数名が人と被るんだわ。括弧書きにも書いたけど、ポリモーフィズムが導入されると、結構解決できるんだわ。こればかりは、経験積んでもらって、アレ使えない?こんなにソース書いてられない!とか苦労してやっと良さがわかるものだから、うまく説明できない。

インターフェースは、プレイヤーの話だったらもっと機能として充実したものかな。※プレイヤーはclass実装されているので、newすれば使えます。

GOROman@禁酒36日目 @GOROman2013-12-20 17:47:09

多くの入門書 と呼ばれる入門書が入門書の体を成していないのは、結局、ターゲットである初心者のキモチで書かれてないからですね。結局、わかってる人がわかっていない人の立場で書くのはスゲーむずいのです。なぜならわかっちゃってるので。逆にわからない人は概念がわからないわけで。

盛大なブーメランを見た。高橋麻奈の2番煎じで分かれば、世の中プログラマだらけだし、プログラミングの授業の単位落とす奴はいないわ。
でもひとこと言わせてもらえば、人は経験や思考が違うからプログラミングしててどこで引っかかるかは千差万別なんだわ。「俺はサクッと分かったが、あいつは分からないらしい。でもアイツの分かるあれは、なぜか俺には分からん。」ということが結構ある。私の弱点は、ずばりOpenGL。あれだけは本当に分からない。

正直、このハイスペック主婦がなぜreturn;で?になるのかが正直分からん。主婦が(自分の処理の途中なんだけど)ここで終わり!を宣言して、Unityちゃんに番(CPU)を譲るという処理なんだが。(←分からないなら忘れてください。)


C#とUnityScriptどっちが強い?

Unity使うならあまり大差がない気がするが、WindowsでUnityの次を考えるならC#だろう。C#は普通のWindowsのソフトも作れるしXboxのソフトも作れる。
普通のWindowsソフトはゲーム以外にメモ帳・表計算とかのビジネスソフト・はがき作成などなど、ありとあらゆるソフトが作れるようになる。

p=5ぐらいまで見て、拾えるところ拾った。今日は肝心のUnityスクリプト書いて無いけどいいか。

« 主婦ゆに! | トップページ | はじめようMinecraft »

プログラミング」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: 主婦ゆに!3章を読むp=3、no1:

« 主婦ゆに! | トップページ | はじめようMinecraft »