「未分類」カテゴリーアーカイブ

練習モードと本番モード

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

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

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

カウントダウンのアルゴリズム

(1人でカウントダウン)

普通に差分書けばOK

(みんなでカウントダウン)

上記の方法では全員ずれが出る

ローカルの時計とNTPの時計を比較して差分を出し,その時間でカウントダウンする.カウントダウンは直前にしか見ないのでNTPの同期は1回でOK.

ただしコルーチンを頻繁に呼び出すのが怖かったので,1秒でコルーチンしている.つまり最大で0.99秒ずれる.

最近の端末はおもったより性能が良いので,0.1秒でコルーチンしてもいいかもしれません.(NTP呼び出しは1回だけにする)

 

改訂版:CSV読み込み

CSVのテキストはテキスト内に\nとかいてても,改行と認識されない.そこで,強制的に@を改行コードに読み替える方法で回避する

テキストの改行カ所に半角の@を入れる.そこが改行される.

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;//use for file read
using UnityEngine.UI;//use unity gui

public class quiz : MonoBehaviour {
	//public string[] qq;
	// Use this for initialization


	public ArrayList qq =new ArrayList();//question store to this array
	private int no;//this means number
	public int maxQ = 3;//count of quiz
	public Text quizText, kaisetsu; //Text用変数
	public Text bt1,bt2,bt3,bt4;//for assign btn tex
	public int answer;//answer number
	public int selected;//selected btn
	//public Toggle tog1, tog2, tog3, tog4;
	public ToggleGroup tgg1;//select btn group

	public GameObject kaisetsuPanelAlert;
	public GameObject seikaiPanelAlert;
	public GameObject ngPanelAlert;
	public GameObject selectAlert;

	void Start () {

		//Android is load from streming Assets floder
	 //
		//jar:file://" + Application.dataPath + "!/assets" + "/";  //example
		//
//		TextAsset csv = Resources.Load("question") as TextAsset;
//		StringReader reader = new StringReader(csv.text);
//		while (reader.Peek () > -1) {
//			string line = reader.ReadLine ();
//			string[] values = line.Split (',');
//			Debug.Log (values[0]);
//		}
		kaisetsuPanelAlert.SetActive (false);
		seikaiPanelAlert.SetActive (false);
		ngPanelAlert.SetActive (false);
		selectAlert.SetActive (false);
		//
		no = 0;//initialize of quiz count

		//ArrayList qq =new ArrayList();
		TextAsset csv = Resources.Load("question") as TextAsset;
		StringReader reader = new StringReader(csv.text);
		while (reader.Peek () > -1) {
			qq.Add (reader.ReadLine ());
		}

		//Debug.Log ((string)qq[1]);
		qread ();//show first question
	}
	
	// Update is called once per frame
	void Update () {
	
	}



	public void tog1press(){
		answer = 1;
	}

	public void tog2press(){
		answer = 2;
	}

	public void tog3press(){
		answer = 3;
	}

	public void tog4press(){
		answer = 4;
	}

	public void qread(){//next mondai

	//	for(no  = 0; no < maxQ; no++){
			
		tgg1.SetAllTogglesOff();
		string qqq=(string)qq[no];
		string[] values = qqq.Split(',');//values is string array


		//GameObject.Find ("SectionText").GetComponent<Text>().text=Section[ int.Parse(values[0]) ];
	//	string atxt = "";
	//	string atxt1 = "";
	//	string atxt2 = "";
	//	string atxt3 = "";
//		int mode = Random.Range (0, 10);
//		if (mode == 0)
//		{
//			atxt=values[2];GoodNo=1;
//		atxt1=values[1];
//			atxt2=values[4];
//			atxt3=values[5];
//		}

		string test1 = (string)values[0];
	//	quizText.text = (string)values[0];
		quizText.text = test1.Replace("@", "\n");

		selected = int.Parse((string)values [1]);//csv is text, so, covert to string
		bt1.text = (string)values[2];
		bt2.text = (string)values[3];
		bt3.text = (string)values[4];
		bt4.text = (string)values[5];

		string kaisetsuKaigyou = (string)values[6];
		kaisetsu.text = kaisetsuKaigyou.Replace("@", "\n");
		//kaisetsu.text = (string)values[6];

		if (no < maxQ) { //quiz count limit
			no++;
		}else{
			no = maxQ; //kokode resulthe,,
		}

//		Debug.Log(tgl);
		//}
	}


	public void answerCheck(){
		//Boolean selectCheck = tgg1.AnyTogglesOn;
		if (!tgg1.AnyTogglesOn()) {
			selectAlert.SetActive (true);
			return;
		}
			if (selected == answer) {
			seikaiPanelAlert.SetActive (true);
	//		Debug.Log ("seikai");
		} else {
			ngPanelAlert.SetActive (true);
		//	Debug.Log ("No!");
		}
	}

	public void hideKaisetsuPanel(){
		kaisetsuPanelAlert.SetActive (false);
		qread ();
	}

	public void showKaisetsunOK(){
		seikaiPanelAlert.SetActive (false);
		kaisetsuPanelAlert.SetActive (true);
	}
	public void showKaisetsuNG(){
		ngPanelAlert.SetActive (false);
		kaisetsuPanelAlert.SetActive (true);
	}

	public void hideSelecyAlert(){
		selectAlert.SetActive (false);
	}

}

 

oFをAndroidStudioでビルドのエラー

いくつかのエラーが起きた.

まずはNDKの場所について

(後述)なんかNDKの場所をoFのAndroidのプロジェクトのなんかのファイルを,絶対パスで指定した

 

次にビルドは通っても,仮装デバイスへインストールができないエラー.

エラーメッセージは

android Installation error: INSTALL_FAILED_CONTAINER_ERROR

とでる.

この解決方法としては,

AndroidManifest.XMLの中の

android:installLocation=”preferExternal”

android:installLocation=”auto”

に変更することでクリアできました.

この設定はプロジェクト毎に設定する必要があります.

mySQL覚え書き

自鯖のmysql

同セグメントからの他IPでも,sqlへの書き込みできない

phpは動作している

phpmyAdminでも動作は確認している

mysqlの設定ファイルが,ローカル向けになっているのが原因(外からは見えたりするのに)

sudo nano /etc/mysql/my.cnf

の設定ファイルを変更

bind-address = 127.0.0.1

#bind-address = 127.0.0.1

でコメントアウトしどこからでも接続可能にする(ただし危険)

物理的に外とつながらないサーバの予定なので,これでも一応OK.

外でタブレットを使い,クローズド環境でのWSの実験用の予定

作業2:2015年度版デザイン

(1)テーマカラーを決める

NFM2015のテーマカラーを決める.あるいは,使えるテーマからカラーを決定してもかまいません.

(2)2014→2015に変更する要素をピックアップし,変更する

2014年開催について→2015開催について 中身も

ただし,日程などは未定.

(3)募集要項など

明日以降の会議で決定します

(4)SNSチーム作成

SNSでつぶやいて〜