あれをUnityで作ろう1

あれをUnityで作ります.

まずはMayaでcubeを作成し,

UVの編集>UVテクスチャエディタ でテクスチャエディタを開き,

ポリゴン>UVのスナップショット でUV展開の様子を保存します

u01

 

このcubeを選択し,

ファイル>選択項目の書き出し をおこない,FBX形式で書き出してください.

u05

 

これをPhotoshopで開き,枠線を頼りに下図を作成します.

u02

実際に使用するファイルはこちらからダウンロードできます.(枠線は隠してることに注意)

 

次に,Photoshopで凹凸の画像をグレースケールで作成します.レイヤーの組み合わせなどは下図を参考に

u03

実際に使用するファイルはこちらからダウンロードできます.(実際にはこのファイルは使いません)

PhotoshopCCであればこれをノーマルマップ形式に変更します.MacであればCrazy Bump,Winであればノーマルマップ変換用ソフトでこれをノーマルマップに変換します.

下図はCrazyBumpでの編集の様子です.

u04

作成したノーマルマップを書き出します.

実際に使用するファイルはここからダウンロードできます.

つづいて,Unityでの作業です.

c#のファイル名を間違ったとき

プログラミングは独学なので,他の一般的なプログラミングの話とは異なるかもしれませんが,,,

Unityでc#のファイルを作成したとき,うっかりファイル名を変え忘れたり,ファイル名を変えたのに動かないときがあります.

それには,ここを修正してください.

public class qwatch : MonoBehaviour {

この qwatchがファイル名と同じなら動作します.そうでない場合はエラーがでます.

例えば,neko.csというファイルをinu.csと変更したいとき,

public class neko : MonoBehaviour {

となっているのを

public class inu : MonoBehaviour {

と変えればいいわけです.

ところで,うしろの{ から 一番下の行の }までがプログラムの中身になります.

using UnityEngine;
using System.Collections;
using System;

public class inu : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}

	void Awake(){

		//StartCoroutine ("colorSwitch");
	}

}

黄色で示した5行目から17行目の間が,このinu.csで動作するプログラムです.なので,プログラムはこの{と}の間に書きましょう.

スクリプト事例ークイズ中の経過時間表示

staticで変数をグローバル化しているけど,これは使用したのか不明.

lapTimeのboolをOn/Offしてて,ポーズ中は時間経過をスルー if(false) させている.

ポーズ中は色を点滅= コルーチンのcolorSwitch()のとこ

これ,colorSwitch()のコルーチンを止めていないっぽいんで,7問だからいいけど,ポーズ以外はコルーチン止めたほうがいいかも.

using UnityEngine;
using System.Collections;
using System;
using UnityEngine.UI;


public class qwach : MonoBehaviour {

	public static float Quiztime = 0;//read from global
	public GameObject startPanel;
	public GameObject startKaitou;

	public Text timeTex; //Text用変数
	private bool lapTime;


	// Use this for initialization
	void Start () {
		Quiztime = 0f;
		startPanel.SetActive (true);
		lapTime = false;
		timeTex.color = Color.grey;
	}

	void Awake(){

		//StartCoroutine ("colorSwitch");
	}

	// Update is called once per frame
	void Update () {

		if (lapTime) {
			Quiztime += Time.deltaTime;
			timeTex.text = Quiztime.ToString ("f2") + "秒経過";
			;
			//timeTex.text = timeTex + "秒経過";
			//Debug.Log (time.ToString ());
		} else {
			//pause syori
			//StartCoroutine("colorSwitch");
				
			}
	
	}

	private IEnumerator colorSwitch(){
		while (true) {
	
				timeTex.color = Color.grey;
				yield return new WaitForSeconds (0.5f);
				timeTex.color = Color.white;
				yield return new WaitForSeconds (0.5f);
		}
	}


	public void qwPause(){
		StartCoroutine ("colorSwitch");
		lapTime = false;
	}

	public void qwStart(){
		StopCoroutine ("colorSwitch");
		timeTex.color = Color.white;
		lapTime = true;
	}


	public void qStart(){
		lapTime = true;
		startPanel.SetActive (false);
		timeTex.color = Color.white;

		startKaitou.SetActive (true);
	}

}

 

スクリプト事例ースコアをランキングして表示

PHP用のスクリプト(コア部分)

    $query = "SELECT * FROM `scores` ORDER by `score` DESC, `time` ASC LIMIT 20";//score timeの順にソート
    $result = mysql_query($query) or die('Query failed: ' . mysql_error());
 
    $num_results = mysql_num_rows($result);  
 
    for($i = 0; $i < $num_results; $i++)
    {
         $row = mysql_fetch_array($result);
		 echo $row['cName'] . "\t" . $row['name'] . "\t" . $row['score'] . "\t". $row['time'] ."\n";
    }

score(降順)と time(昇順)でソートしたデータの

色,名前,スコア,時間を表示している

 

ユーザ名重複をチェックしていないので,1人で何ランキングも表示される.ユーザ名重複チェックは,PHP側,Unity側のどちらですればいいのか,今後検討.

スクリプト事例ースコアをポストする

スコアをポストするそのコルーチン

ただし,エラーが出ても,コンソールに表示されるだけで,処理はなし(ダメやろ)

	// remember to use StartCoroutine when calling this function!
	IEnumerator PostScores(string name, string cName, string area,int quize,  int score, int time)
		{
		string hash = Md5Sum(name + cName + area + quize + score + time);

		string post_url = addScoreUrl + "name=" + WWW.EscapeURL(name) + "&cName=" + cName + "&area=" + area + "&quize=" + quize + "&score=" + score + "&time=" + time + "&hash=" + hash;

			// Post the URL to the site and create a download object to get the result.
			WWW hs_post = new WWW(post_url);
		Debug.Log (post_url);
			yield return hs_post; // Wait until the download is done

		if (hs_post.error != null) {
			print ("There was an error posting the high score: " + hs_post.error);
		} else {
			print("done ");
		}
		}

 

スクリプト事例ーネットワーク接続チェック

PUN使用のためのネットワーク接続チェックスクリプト.UIのパネルをsetactivateをfalseにする.

using UnityEngine;
using System.Collections;

public class netCheck : MonoBehaviour {
	public GameObject netAlertPanel;

	// Use this for initialization
	void Start () {
		if (Application.internetReachability == NetworkReachability.NotReachable) {
			//接続されていないときの処理
			netAlertPanel.SetActive (true);
		} else {
			netAlertPanel.SetActive (false);
		}
	}
	
	// Update is called once per frame
	void Update () {
	
	}


	public void closeAlert(){

		netAlertPanel.SetActive (false);
	}
}

 

スクリプト事例ー色相を動的に変更する

PNUで使用したコルーチンの中身

	private IEnumerator hotaru() {
		Debug.Log ("start rainbow");
		while (true) {
			//Debug.Log (destColor);
			float myHue = 0;
			currentColor =  Color.HSVToRGB (0.5f, 1f, 1f);
			destColor = Color.HSVToRGB (myHue, 1f, 1f);
		//	t += (Time.deltaTime) / duration;
		//	Camera.main.backgroundColor = Color.Lerp (currentColor, destColor, t);
		//	if (t > 1.0) {
		//		currentColor = destColor;
		//	}
			yield return new WaitForSeconds (1.0f);//color hold time
			t = 0;
			if (myHue > 1.0f) {
				myHue = 0;
			} else {
				myHue += 0.2f;
			}
		}
	}

 

スクリプト事例ートグルボタンのインタラクティブをOffにする

トグルボタンを押させない(インタラクティブをOffにする),ためのスクリプト.

setactivateをfalseするのは違う

using UnityEngine;
using System.Collections;
using UnityEngine.UI;//need this

public class btnDisable : MonoBehaviour {
	public Transform myButton;

	// Use this for initialization
	void Start () {

	}
	
	// Update is called once per frame
	void Update () {
	
	}

	//assign to btn obj this script, can access inspector.
	public void mybtnDisable () {
		myButton.GetComponent<Toggle>().interactable = false;
	}


}

 

MonacaのCordvaバージョンについて

Cordvaのバージョンは4.1.1以降にしろとGoogleさんより警告.

でないとアプリを削除するよと.

Moancaでビルドしたとこcordva5.xだと20MB越えてとてもデータ容量に見合わないと,cordvaの古いバージョンで作成したため出たエラー.

まとめ

Cordva5系 何もしなくても18MBファイルサイズが増える

Cordva3.x ビルドサイズは小さいけど,Googleさんよりセキュリティエラーが出る 3.5MB

Cordva4.x ビルドサイズ小,セキュリティもクリアしているはず 3.7MB 0.2MBの増で収まった

なお、元データは274KB.オリジナルのスプラッシュスクリーンつけるととたんに数メガ増える,,

練習モードと本番モード

練習モードと本番モードの切り替えはうまくいっていたけど,ボタンのテキストを入れ替えるということにした.けど,結局はボタンをつけかえればよかったのかもしれない.その後いろいろここが問題になったので.

あとToggle.isON = true;は使えるのに,Toggle.isOn = false;が使えないのが謎.結局解決できず.

onValueChangedで解決できるのかは未検証(そもそもValueが変わらないのでやっても意味ないと後回しに)