C#で初心者の為のUnity3D開発~その1

2015.2.13 投稿の記事です
#開発環境
Mac OS X 10.9.1
Unity4.61

##今回の目次
１.Unityの基本的な操作

２.C#でオブジェクトを操作してみる
　
##１.Unityの基本的な操作
まず最初にUnityを開くとこんな画面が出てくると思います

![Screen Shot 2015-02-13 at 15.30.34.png](https://qiita-image-store.s3.amazonaws.com/0/61739/e0cca735-6426-338d-78ee-64829c91c166.png "Screen Shot 2015-02-13 at 15.30.34.png")


これはUnity側が作ってくれている既に完成されているプロジェクトなので新しいプロジェクトを作成しましょう。
(画面上部にある再生ボタンをクリックすると遊ぶ事も出来ます)
　

![Screen Shot 2015-02-13 at 15.43.16.png](https://qiita-image-store.s3.amazonaws.com/0/61739/d1c0e877-bee9-3af3-dab6-e1594bf2fc7b.png "Screen Shot 2015-02-13 at 15.43.16.png")

一番左で再生、真ん中で停止します
　
　
###プロジェクトを作成
まずメニューバーから
File > New Project を選択します
するとこんなウィンドウが開くと思います

![Screen Shot 2015-02-13 at 15.53.27.png](https://qiita-image-store.s3.amazonaws.com/0/61739/aea38da9-f7ef-bbab-1148-e2c0e3a093ad.png "Screen Shot 2015-02-13 at 15.53.27.png")
　
次にSetをクリックして保存場所とプロジェクトネームを決めてSaveしましょう。(Unityは様々なファイルを自動作成するので、保存場所はDesktopは控えた方が良いです)

今回は保存場所をDocuments
プロジェクトネームをUnityTestにします

![Screen Shot 2015-02-13 at 16.05.45.png](https://qiita-image-store.s3.amazonaws.com/0/61739/3014d9dc-9753-ae78-cf62-f13a918378f0.png "Screen Shot 2015-02-13 at 16.05.45.png")

　
packageのインポートは今回やらずに
早速CreateProjectで作成しましょう！
　
　
###オブジェクトを配置してみる
最初はAssetsも何もありません
Main CameraだけがSceneに配置されています

|用語|意味|
|:-:|:-:|
|Asset|objectファイル等、開発の為の素材です|
|Scene|映画のシーンのような物でゲーム等はいくつかのSceneから成り立っています。Scene毎にAseetを配置出来ます|
|Camera|再生ボタンを押した時にカメラ視点になります|
　
　
さて四角いキューブを配置してみましょう
メニューバーから GameObject > 3D Object > Cube を選択します

![Screen Shot 2015-02-13 at 16.39.33.png](https://qiita-image-store.s3.amazonaws.com/0/61739/8d5939cc-f827-a1ef-c1af-c3fed93e9cf9.png "Screen Shot 2015-02-13 at 16.39.33.png")

最初はこのSceneのワールド座標の中心に配置されます
ワールド座標とは3Dで開発した事のある人は、心得があると思いますが
このSceneという世界のX軸,Y軸,Z軸で表すオブジェクトの位置の事です
ワールド座標の中心とは、全ての軸が0の状態になります
　
　
さて、この座標を変更してカメラに良い感じに収まるようにしましょう

オブジェクトを動かす方法は２つあります
１つ目はキューブを直接クリックしてドラッグする事で自在に配置する事が出来ます・・・がこの方法だと大雑把にしか配置出来ないので
キューブから出ている3色の矢印を使いましょう

赤はX軸、緑はY軸、青はZ軸に対応して動かす事が出来ます
（この矢印が出てない人はキューブをクリックするか、Wキーを押しましょう。後ほど説明しますが、Q,W,E,R,T,それぞれのキーで操作を変更出来ます）

動かし過ぎた時は
option(alt)キーを押しながらドラッグで見回し
option(alt)キーとcommandキーを押しながらドラッグで視点移動が出来ます


矢印を使ってキューブを動かしましたが
もっと細かく配置したい時に２つ目の方法を使います
　
![Screen Shot 2015-02-13 at 17.18.46.png](https://qiita-image-store.s3.amazonaws.com/0/61739/54519671-17e8-a430-b98c-a5ecbfeca741.png "Screen Shot 2015-02-13 at 17.18.46.png")
　
Cubeをクリックした時に右側のinspectorにある
Transformコンポーネントの値をいじります

|inspector|種類|
|:-:|:-:|
|Position|オブジェクトの位置座標|
|Rotation|オブジェクトの回転座標|
|Scale|オブジェクトの大きさ|

それぞれ文字通りその値を変更すればオブジェクトが変動します
今回は位置を動かしたいので、PositionのZ軸を-6にします

これでカメラの前にきたので再生ボタンを押してSceneを実行してみます

![Screen Shot 2015-02-13 at 17.33.07.png](https://qiita-image-store.s3.amazonaws.com/0/61739/6b5dce37-e014-29bd-f79f-51dc4714753f.png "Screen Shot 2015-02-13 at 17.33.07.png")

こんな感じになりました。
暗いですね、再生ボタン隣の停止ボタンでSceneの編集に戻りましょう

光源を作ります。メニューバーから GameObject > Light > Directional light　を選択します
Directional lightはそのワールドの太陽の方向のようなもので
位置は関係無く向きが関係します。今回はデフォルトのX軸50,Y軸-30でいこうと思います。

光の強さは右側のInspectorにあるLightコンポーネントにあるIntensityの値で変更できます。

さて再生してみるとちゃんと真っ白なキューブが映りました

###オブジェクトの種類
Cubeを置いた時のようにメニューバーから
GameObject > 3D Object で様々なオブジェクトがあります
いろいろ置いてみると分かりますが、何も無いオブジェクトもあります

それについてはここでは触れませんが、作り過ぎた邪魔なオブジェクトは画面左にあるHierarchyから右クリックしてDeleteします

###Sceneのsave
ひとまずここまで作ったSceneを保存しましょう
File > Save Scene でProjectの時の様に保存場所と名前を決めます(command + s でも保存出来ます)
SaveしたSceneは画面下部のAssetsの中に保存されます

![Screen Shot 2015-02-16 at 14.47.56.png](https://qiita-image-store.s3.amazonaws.com/0/61739/2b047c5e-b068-298b-a15c-83c1c7d2777b.png "Screen Shot 2015-02-16 at 14.47.56.png")

今回はTestSceneと名付けました


##２.C#でオブジェクトを操作してみる
次はC#Scriptでオブジェクトを動かしてみましょう
メニューバーのAssetsから、もしくは画面下部のAssets内を右クリックして Create > C#Script を選択します
Assets内に「C#」と書かれた紙が表示されるので、名前をTestScriptにしておきましょう

そのScriptをドラッグしてHierarchy内のCubeに入れてやりましょう

早速TestScriptをダブルクリックなりして開いてください
そしたらMonoDevelopというunity標準のツールが開かれてTestScriptの中身が表示されます
![Screen Shot 2015-02-16 at 15.07.42.png](https://qiita-image-store.s3.amazonaws.com/0/61739/8141ed23-14bb-91db-8ce3-f29325674cf6.png "Screen Shot 2015-02-16 at 15.07.42.png")

|関数|動作|
|:-:|:-:|
|void Start()|オブジェクトが作られた瞬間に呼び出される|
|void Update()|毎フレーム呼び出される|
※フレームとは1秒間にも何回も再生されている細かい時間単位です

とりあえずコードを書き加えましょう

```TestScript.cs
using UnityEngine;
using System.Collections;

public class TestScript : MonoBehaviour {

	private float speed = 0.1f;

	// Use this for initialization
	void Start () {

	}
	
	// Update is called once per frame
	void Update () {
		if (Input.GetKey ("up")) {
			transform.position += transform.forward * speed;
		}else if(Input.GetKey("down")){
			transform.position += transform.forward * -speed;
		}

		if (Input.GetKey ("right")) {
			transform.position += transform.right * speed;
		}else if(Input.GetKey("left")){
			transform.position += transform.right * -speed;
		}
	}
}
```
Input.GetKey (“キー名”)でそのキーが押されているかを判断しています
transform.position += transform.forward * speed;ではpositionの座標をspeed分だけ動かしています。


MonoDevelopはUnityとの同期が早いので保存せずとも反映されています
再生して試してみたら動きました！


今回、基本的な説明が多かったので
次回ではもっと多彩なことをやってみようかと思います。