![サムネイル画像](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV5IJvBCUC_h94P0YkxIGIcOg-WvX5YUK5BVjdXgXhTcSG7wg6UIRUEEoHKK999I1yKP_VFl8IcnphXRSdGU004YGHUwPTHvk8uPlKTIHtCXW9LsrexyprJWLytpIFwxUTXwkAddiubi-gQs7JPsTxLWMXwo4RzZnhBiJaWigPSwMC07UD8vRolBkn/s408/001.png)
![ゆにすちC#基礎編(この画像は、https://www.pakutaso.com/ さまから借用しています)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV5IJvBCUC_h94P0YkxIGIcOg-WvX5YUK5BVjdXgXhTcSG7wg6UIRUEEoHKK999I1yKP_VFl8IcnphXRSdGU004YGHUwPTHvk8uPlKTIHtCXW9LsrexyprJWLytpIFwxUTXwkAddiubi-gQs7JPsTxLWMXwo4RzZnhBiJaWigPSwMC07UD8vRolBkn/s833/001.png)
こんにちわ、横浜すみっこクリエイター
です。Unityでゲームを制作して販売するまでの軌跡を描くゆにすち!のC#基礎編です!
今回からは、新しいサブタイトルC#基礎編を冠し、スクリプトについて解説していこうと思います。
このC#基礎編では、あえてUnityに特化せず、C#の基礎の解説を中心とした構成としています。
プログラム学習は挫折しやすいところなので、これまで以上に丁寧に進めていくつもりです。
さて、前置きが長くなってしまいました。
今回はまず、C#を記述する場所としてスクリプトファイルを用意するところから始めます。本当に触りだけですが、自動生成されるコードについても併せて確認します。
スクリプトが何かやその作成方法については、過去の投稿「Visual Studio Code導入! | ゆにすち! - 準備編03」と「UnityとVisual Studio Codeの連携! | ゆにすち! - 準備編05」で触れていますが、いずれもVisual Studio Codeの動作確認のためで解説が浅めでした。今一度、スクリプトファイルにフォーカスを当てて解説していきます。ゆにすち!シリーズとは
このシリーズではUnityでSTEAM販売を目指す!略してゆにすち!と銘打ち、モデリングもプログラミングも企画も販売も何から何までぜ~んぶド素人の が、PCゲームを考え、制作して、販売するまでの風景を履歴として残していくものです。
このC#基礎編では、Unityでのコーディングに困らないよう、助走をつけるイメージでプログラムの一般的な知識を中心に学んでいきます。
この記事のポイント!
- スクリプトとは、何かを動かすためのプログラムコード
- スクリプトファイル = アセット
- コードブロックは、{}で機能や役割のカタマリを示す
- インデントは、可読性向上のための字下げ表現
- Startブロックは、最初に一度だけ実行される
- Updateブロックは各フレームごとに実行される
- ファイル名とクラス名は必ず一致している必要がある
Contents
スクリプトとは
![ゆにすち(「スクリプト」は何かを動かすためのコードです)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7f_MYCsDwi5TGdJLZoqFtpljC5yU_bfSSOayJDssHXMIm1941zwzmGkSPBVreKEEXqmWHBtF9C6nwv1Gi30Umj_rlGRoyNfem4WgpT7z9KIHPuaKH66bEcF9ilPxAGuKefxyOypI4d5_vnMU7n3zOyCPGPkgm_8IwLdur5QuoHHYLTJ4H6o_SD7hv/s833/002.png)
スクリプトは、Unityで何かを動かすためのプログラムコードのことです。
何かというのは、ゲームオブジェクトに限ったものではなく、ゲーム内の時間やシーンの遷移、設定値の変更など、あらゆるものを対象とします。
Unityでは、このスクリプトをC#というプログラミング言語で記述していきます。
スクリプトファイルの準備
スクリプトファイル = アセット
![ゆにすち(「スクリプトファイル」はアセットの一種です)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8a_r3Ypm60wDARW0NJls5nhbQpvD1S9RWzmMWZegOA_V_iSlROjU6K2KTcoH1wrxST-o92PTOu_pnlNym8No3w3lcCKiiR_BIPLCCvc5o2GSEgyA5rqsiLV82eSAAhoEm87d6S_DfWjWKilzP0WxPow8aCmEmRf5JaBYXCeuMJY86weTyXtNgKGNV/s833/003.png)
スクリプトを書くために、まずスクリプトファイルを用意しましょう。
スクリプトファイルは、アセットとして作成します。
フォルダーの作成
一般に、スクリプトファイルはScriptsという名前のフォルダー下で管理します。まずはそのフォルダーを作成しましょう。
Scriptsフォルダーでの管理は、あくまで慣習によるものです。スクリプトの挙動は、フォルダー名や階層には依存しません。![ゆにすち(フォルダー「Scripts」を作成します)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUzfA0UYBGbHrHsNptnJHQ975S1G-d3D6QNjLpX1FHUC49OEiR9NO3PUNXOWGox7ZU4is6AJb510mILFiIWob0noXAuqTdrjzmff7NJUe3fEnjXDgvkW_EKiFDZ2LUtZG1AisGGwnhQyfDVZ-G26vNJKJp3IsYcYBcEqIGHw7VX0_GUklOwXk0c3f4/s503/004.png)
プロジェクトウィンドウのAssets内で右クリックして、表示されるコンテキストメニューから作成 > フォルダーをクリックします。
作成されたフォルダー名をScriptsに変更します。
作成したフォルダーをダブルクリックしてScripts階層に入ります。
スクリプトファイルの作成
次に、スクリプトファイルを作成していきます。
![ゆにすち(作成すると名前の編集状態になるので、そのまま名前を決定する必要があります)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDSwWOnSkpDhgkFUN-gtRhjjRCVVr15ue3BxDz2OvS-MQ9KIQ3RXHoPW5LzxJIJIO8MRBzIZa3MeOCFU3IpMh03EvVrcw3zLGY_GO8_dDsMXIryXihhNf-AJzVDFh5ufKykAj8Kt7T9nTchrJU545ORAicT5n0_T4SXxIQn98eH7WIgI-eXgdxY3Gl/s833/005.png)
先に注意点を書いておきます。
ファイルを作成すると、ファイル名が編集状態になります。一度確定してしまうと、自動的に生成されるコードもそれに合わせて設定されてしまいます。スクリプトファイルを作成したタイミングでファイル名を変更するように心がけてください。
後述しますが、誤ってそのままのファイル名にしてしまったり、後でファイル名を変更したくなったりした場合でも、コードを編集すれば解決しますので安心してください。![ゆにすち(スクリプトファイル「FirstScript」を作成します)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6zDsWLcMB51pjlECq_V5UV73gUyVyuDOHje--fS8lcA1b9mOVngZgrMfEBfSDV8wtE36-oueQqQ2tV0YoPXmjO8xR8O3emF0A8hmYnBmwx9Ces5TpUj1AD87YHLPIwOlrZNVD6hSlcM8ZTAyP2m2gtE9lh-0_t-t9hCLouTgfBuQ1vj-19qV89VjR/s1503/006.png)
スクリプトファイルの作成方法です。ウィンドウ内で右クリックして、表示されるコンテキストメニューから作成 > C#スクリプトをクリックします。
ファイルがNewBehaviourScript.csの名前で生成されますが、ここでファイル名を編集しましょう。
今回はFirstScriptとしました。これでスクリプトファイルをアセットとして作成することができました。
スクリプトファイルの中身
ファイルを開く
作成したスクリプトファイルを開いてみましょう。ファイルをダブルクリックします。
VS Codeで開かれると思います。
別のツールで開かれた場合は、UnityとVisual Studio Codeの連携! | ゆにすち! - 準備編05をご覧ください。![ゆにすち(「FirstScript」を開きます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvNkWNKrxkq5Q3MN4TIt0TNXJbr7d7OmJoYFzOrEiZDRUloDnd9elOdK-lIu3VraCys-5qmgdNOXegWG3IuT78RoXmaadZjlIP_Hu58bpLOXN32u061kQlt60LTFz0Z0ZBbYF-sET3sMW43sBPrsJOeyeVX31MONxvB0BFNT-sEnXqTFEdmw_lsZHS/s502/007.png)
さて、自動生成されたコードの中身を少しだけ見ておきましょう。今の時点で知っておきたい内容に絞って紹介します。
ちなみに、5行目がclass FirstScriptとなって いない 方がいるかもしれませんが、原因と対策については後述します。コードブロック
![ゆにすち({と}でくくった範囲をコードブロックと呼びます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDwzS5AZp-4sZfbeSX-a-18WKfYnSkUAM2-hM-T2fsHo8N9NjzgdGz3sSWvpJpxzjgACLu8O12DWYKXMsKHzAZjqquFw4OfnoxusCiJpmFEL8ZsVO41npUcLdFoRZIF1VdTcGg-6ASl6W-_qmDp-OHjg2uLfNEIa2yD4z_iyXFxqhE0g7dvCP8u-VA/s516/008.png)
コードブロックまたは(単に)ブロックとは、機能や役割のカタマリであることを示し、{}(中かっこ / 波かっこ)で挟んで表現します。
ブロックの前には、そのブロックの種類や名前などをつけます。
たとえば、8~11行目のコードブロック
void Start()
{
}
は、voidという種類のStartという名前のコードブロック、ということになります。
()は、一旦気にしないでおきましょう。また、classという種類、FirstScriptという名前のコードブロックが、StartブロックやUpdateブロックを内包していることに注目してください。このようにプログラムコードは、コードブロックを組み合わせたり階層化したりして構成されています。
インデント
インデントとは、字下げのことです。
![ゆにすち(「インデント」は字下げのことです)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIpezjBmFLDGN0Yiqfv1CyKEnpRUEAufo7U_KwDxspEgsEYrJRWnfBnktQMwGTEJ18pmyFEj5q8xZMpcYZi3wgXdos9mGoXSKIJxYo22tLTWnm5Mq4kBUklCPmHE2QVJnoXvMJ6FyfLnKTg1PFi82-VTazDppT_X5ywiS60hCnQF9MuUhN3LlmDJnG/s550/009.png)
上の図を見てください。コードブロックの中では、コードの書き始めの位置が右にシフトしているのが分かると思います。
これはコードの読みやすさ(可読性、といいます)の向上のために、書き出し位置で階層の深さを表現するようにしたものです。
タブまたは半角スペースを使用して字下げします。お好みで選択して構いませんが、メンテナンス性の観点から混在は避けるべきでしょう。
何文字分の字下げにするか、これも任意で決めることができます。
インデントは、プログラム実行上、動作にはまったく影響しません。インデントの有無や、タブ・スペースも、何も変わりません。
ちなみに、このようなプログラム動作に影響しない部分の書き方を決めたルールのことをコーディングスタイルなどと呼んだりします。複数人で開発を進める場合は、事前にルールを決めておくと良いでしょう。
全角スペースは使えないので、うっかり使わないようにだけ注意してください。
Startブロック
![ゆにすち(「Startブロック」は最初に1度だけ実行されます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvwcJc_q7jTItLjXbW7vUMuofFYAAFHdL9l92agxwGQHzi8gacV7YKUXlPPs6X8TcWu_-zUJ1pkloa5OO-QhVx3sKvw_T6_GGMAFWKx-k25Yb79NO_ieHXCqxrOro_Nc81i353LgSnDiz5K0v3WxsvhmYBXIjz5uxKVRHavhWCbl2-Ef4Z1XUMzlor/s550/010.png)
Startブロックはスクリプト読み込み時、最初に1度だけ実行されます。
このコードブロックは主に、状態の初期化するために使用します。
たとえば、タイマーやキャラクターの位置等をリセットするコードをここに記述します。
Updateブロック
![ゆにすち(「Updateブロック」は各フレームで実行されます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNbehZAd4YU4yqZaH50w5XqO6o87ywvRdYxmupTqeRdkPWs_EFgmhqxe6bvvU_Vi_kFOSXTrtBuQ1T1yIdQJDr5S97kScQhYRV7XEZ2qwsTHN8aPES2VHuEeAQwg98K62Eqwlw6egiW22pEIQjC1R4z3CLZlCylfaxeIU8NypDBr4fUxbVValRudJW/s550/011.png)
Updateブロックは、各フレームで実行されます。
フレームというのは、プログラムを実行する時間的な単位と考えてください。
![ゆにすち(「フレーム」はプログラムの実行単位です)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsEgISn-4Na2rh_YHOzdEWM7CJzSpFyFPO2W-txwKxa4odP5bOTsJWVT1hS9gJC3AL3vMNLjgZAOcxyBDgC84KaHhV_lP0lHWrSbS4YFfywsOH065Ppjn_8CH3HIah_JxKp2wngZ2vuUO3PRlBRhErZfuj7TGUVo7SGbcVw-SS-a8hAjOam9DrVKpl/s550/012.png)
フレームの実行速度をフレームレートといい、単位はFPS(Frame Per Second)で表されます。30 FPSだと1秒間に30回、つまり約0.03秒に1回の頻度でフレームが更新されることになります。
Updateブロックの中に記述したコードは、それだけ高速で繰り返されるということです。
このコードブロックの中に時間がかかるような処理を書いてしまうと、1フレームの時間が伸びてしまい処理落ちとなってしまいます。
ファイル名とクラス名の一致
スクリプトを動かすためには、
スクリプトファイル名とクラス名が完全に一致
している必要があります。
1つのファイル内に複数のクラスが存在する場合は、: MonoBehaviourが付いているクラス名を指します。![ゆにすち(ファイル名を確定するときにクラス名もそろいます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKanhPpG1_OJ-fP3gbNapgX0G_D6VVPee5S7xBk_AtTlZ5bFlbr-U5c2z27APt3QHGxzktbnWACD0DO858p5tNjRmHDBgki9e-UR1LegfHDVVoQhJ0rIXbOZEJbliRPSuX2K9oI9eVOYK2mcqAU39__kKyqOK7dFB1sH567M1oHRyTQMRAhwG6rCH6/s833/013.png)
スクリプトファイルを作成したときに設定したファイル名が、そのままクラス(ブロック)名としてコードが自動生成されます。
前述のとおり、ファイル名を一度「NewBehaviourScript」で確定してしまったり、後からファイル名を変更したりした場合、クラス名は自動修正されないため、不一致となってエラーとなります。
ファイル名とクラス名が一致しているかを確認するようにしましょう。
ゲーム再生時に、エラーメッセージが通知されるので、そのタイミングでも気付けると思います。まとめ
さて、スクリプトファイルの作成と生成されたコードを少し眺めてみました。
一度に詰め込んでも頭がパンクしてしまうので、初回はこの辺にしておきたいと思います。
今回、重要でぜひ覚えて帰っていただきたいのは、プログラムはブロック単位で実行される、という部分です。プログラミングとは、このブロックを組み上げる作業にほかならないのです。
次回予告
Next time on... 【Unity】文字出力にトライ。「スクリプト」を実行してみよう!
文字を出力するコードを書いて、その中で浮かぶ疑問を解消していきます。
では、今回はこの辺で。
コメント
コメントを投稿