k01ken’s b10g

He110 W0r1d!

Unity(3D/C#編)で詰まったところ

開発環境は、Windows 7 Professional(32bit) + Unity 5.6.3f1 Personal。

■特定の要素を消したい
要素を消したければ、Hierarchyタブから消したい要素を選択し、右クリックして、Deleteを選択する。


■エディタを変更する
自分の場合は、デフォルトでは、Visual Studio 2017(Community)が使われているんですが、起動すると自分の貧弱な処理能力のパソコンで動作が重くてエディタを切り替えることにしました。
1.Unity上部のEditボタンをクリックし、Preferences...をクリックします。
2.External Toolsを選択し、External Script Editorのプルダウンメニューから、Browse...を選択すると、パソコン内のエディタが選択できるので自分の場合は、TeraPadを選択しました。(C:\Program Files\TeraPad\TeraPad.exe)
3.スクリプトInspectorタブでOpen...ボタンをクリックすると、TeraPadが起動するようになります。後は、TeraPadで書いて、保存すると、自動的に、Unity側の内容も更新されるようになります。


■GameObjectの色を変える
1.ProjectタブのCreateをクリックして、Materialをクリックする。
2.ProjectタブのAssets内の作ったMaterialをクリックし、InspectorタブのAlbedoと書かれた欄の
3.白色の四角をクリックするとColorウィンドウという色の一覧表が出るので好きな色にする。
色を選択したら、Colorウィンドウの×ボタンで閉じる。New Materialタブで色が変更されたと思います。
4.ProjectタブのAssetsのマテリアルをドラッグ&ドロップでHierarchyタブの色を変更したい
GameObjectに持っていくことで、Sceneタブの特定のGameObjectの色が変更されたと思います。


■シーンを変える
1.複数シーンを作っておく
2.Unity上部のFile - Build Settingをクリック
3.Assetタブにある読み込みたいシーンすべてをウィンドウ内にドラッグ&ドロップして、そのBuild Settingウィンドウを×ボタンで消しておく。
4.後はC#スクリプト内に以下のコードを追加する。

// コード上部に
using UnityEngine.SceneManagement;

// メソッド内に入れる
SceneManager.LoadScene("読み込みたいシーン名");

5.そのスクリプトを自分が望むもの(例えば、ボタンなど)に適用させる。


■ボタンを表示させる
1.HierarchyタブのCreateボタンをクリックし、UI - Buttonをクリックする。そうすると、Hierarchyタブに、Canvas - Buttonが追加される。
2.Hierarchyタブ内の今作ったButtonの左側にある右向きの矢印をクリックし、Textを表示し、Textをクリックする。そうすると、TextのInspectorタブが表示されるので、InspectorタブのText(Script)にSTARTと入力し、Unityを実行すると、以下のように表示される。何度押しても、何も実行されない。
f:id:k01ken:20180603183041p:plain
・ボタンの位置は、Buttonをダブルクリックして、カメラをButton基準にしてからだと、動かしやすい。


■ボタンの作成+クリックイベントの追加
1.ボタンを作る - 上記に書いている。
2.ProjectタブのCreateボタンをクリックし、C# Scriptをクリックする。
3.作ったC#スクリプトをダブルクリックし、表示させ、以下のコードを入力する。

// 以下のメソッドを追加する
	public void OnClick(){
		Debug.Log("clicked");
	}

4.ProjectタブのAssets内にある先ほど作ったC#スクリプトを、HierarchyタブのButtonにドラッグ&ドロップする。
5.HierarchyタブのButtonをクリックし、ButtonInspectorタブを表示し、On Click()の欄の+ボタンをクリックする。
6.None (Oとなっている左下のところに、InspectorタブのButtonをドラッグ&ドロップする。
7.InspectorタブのNo Functionの部分をクリックし、作成したC#スクリプト名 - OnClick()を選択する。
8.実行して、成功しているならば、STARTボタンをクリックすると、Consoleタブにclickedという文字が表示されているはず。


■GameObjectを削除する
・GameObjectを削除するには、Destroyメソッドを用います。
・今回は、CubeとButtonを作って、Buttonをクリックしたら、表示されているCubeを削除するようなプログラムを作ります。■ボタンの作成+クリックイベントの追加を参考にして、作ってみてください。

	public GameObject Cube;
	void Start () {
		Cube = GameObject.Find("Cube");
	}
	
	public void OnClick(){
		Destroy(Cube);
	}

参考リンク
Destroy - Unity



■要素を動かす(自動)
1.Unity上部のAssetsボタンをクリックし、Create - C# Scriptをクリックする。
2.Assetsタブに、スクリプトが作成されているので、それをクリックし、Inspectorタブを見て、Open...ボタンをクリックする。
3.以下のコードを追加して、保存する。

private Vector3 m_pos;
void Start(){
m_pos  = transform.localPosition;
}

void Update(){
transform.localPosition = m_pos;
m_pos.y += 0.05f;
}

4.そのC#スクリプトスクリプトを適用させたいHierarchyタブの要素にドラッグ&ドロップして、後は、Unityを実行すると、その要素は、1フレームごとに上昇していく。

参考リンク
unity_move_gameobject - FreeStyleWiki
【Unity】C#でtransform.positionの値を変更する


■操作したいGameObjectを指定するにはどうすればいいか?

	GameObject obj;
	void Start(){
		obj = GameObject.Find("GameObject名");
	}

という風に取得する。なければ、nullが入るので、受け取る変数は、初期化していないとエラーになる。

参考リンク
GameObject.Find - Unity スクリプトリファレンス


GameObjectに手持ちの画像を貼りつける
1.事前にCubeとMaterialを作成しておく。
2.作ったMaterialを右クリックして、Import New Asset...をクリックし、任意の画像を選択するとAssetsに追加される。
3.Materialをクリックして、InspectorタブのShaderをStandardからLegacy Shaders - Diffuseをクリックする。
4.Selectと書かれた四角の部分にAssetsにある画像をドラッグ&ドロップする。
5.AssetsにあるMaterialをCubeにドラッグ&ドロップすると、Cubeの各面に画像が貼り付けられている。
f:id:k01ken:20180606193740p:plain
参考リンク
第4回目:オブジェクトにマテリアルやテキスチャを適用する(後編)|Tech Book Zone Manatee


■キー入力を受け取る
・Input.GetKeyだと押しっぱなしでも毎回機能する。押している状態で発生。
・Input.KeyDown - 押していない状態から押すと発生。
・Input.KeyUp - 押している状態から離すと発生。
参考リンク
UnityのInputで入力を扱う
【Unity】2D用の、キーボードで上下左右動かせるスクリプト · GitHub