「Unity」カテゴリーアーカイブ

UnityからArduinoにシリアルで送信

文字列として数字を送ります

Unity側(要SerialHandler)

using UnityEngine;
using System.Collections;
using System;//use for time
using UnityEngine.UI;//use for UI


public class serialSend : MonoBehaviour {
	public SerialHandler serialHandler;
	// Use this for initialization
	void Start () {
		serialHandler.OnDataReceived += OnDataReceived;
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	public void sendBtn(){
		serialHandler.Write ("2");
	}



	void OnDataReceived(string message){

	}


}

Canvasでボタンを作成し,public void sendBtn()をアサインしてください

Arduino側

int i = 0;  // 文字数のカウンタ

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}
void loop() {

  if (Serial.available()) {

    byte var = Serial.read();
    var = var - 0x30;
    switch (var) {
      case 1:
        //hoge(var);
        Serial.println('1');
        digitalWrite(13, HIGH);
        delay(1000);              // wait for a second
        digitalWrite(13, LOW);
        break;
      case 2:
        //hoge(var);
        Serial.println('2');
       digitalWrite(13, HIGH);
        delay(2000);              // wait for 2 second
        digitalWrite(13, LOW);

        
        break;
      case 3:
        Serial.println('3');
        break;
    }
  }
}

文字列の扱いをcharでやると面倒なので(今回は数字だけなので)byteでやってみる

byteの数字は0が0x30らしいので,1(0x31)を送ってそれをひくと1になるらしい,,,

参考

シリアルモニタからArduinoへ数値を送る方法 – Qiita

シリアルモニタから数値を送り、Arduinoに数値に応じた処理をさせたいときがあります。しかし、以下のコードを書き込んでもちっとも反応してくれません。 sample1.ino void setup() { Serial.begin(9600); } void loop() { byte var = Serial.read(); switch (var) { case 1: //hoge(var); Serial.pr…” name=”description

LINK: qiita.com/hikoalpha/items/633c677f5cd12d536dcc

 

 

特定のオブジェクトの角度を出す

X軸の場合

using UnityEngine;
using System.Collections;

public class getAngle : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
		float myangle  = this.transform.localEulerAngles.x;
		Debug.Log (myangle);
	}
}

 

PrefabのToggleをGetする

いそいでいるのでスクリプトのみ

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

public class prefabinfoSend : MonoBehaviour {
Toggle mytoggle;
	// Use this for initialization
	void Start () {
		GameObject toggleObj = transform.FindChild("Toggledesu").gameObject;
		mytoggle = toggleObj.GetComponent<Toggle> ();
	}
	
	// Update is called once per frame
	void Update () {
	
	}


	public void pressed(){
		string objName = this.name;
		//Toggle mytoggle = this.GetComponent<Toggle> ();
	//	mytoggle.isOn;



		Debug.Log (objName);
		Debug.Log (mytoggle.isOn);
	}

}

 

NCMBのオブジェクトデータをJSONで読みこむとか

標準のJSONが使えないので,miniJSONを使用

PluginsフォルダにminiJSONをDLし,コードの頭に

using MiniJSON;//use miniJSON

が必要.

ん?jsonかんけいない?

 

using MiniJSON;//use miniJSON
///もろもろのプログラム

var jsonDict = obj["skill1100"] as Dictionary<string,object>;
int kazu  = jsonDict.Count;//JSONの長さを測る
Debug.Log(jsonDict["1102"].ToString());

 

Jsonデータを作成する

Jsonデータをむりくり作成

using UnityEngine;
using System.Collections;

public class jsontest : MonoBehaviour {

	// Use this for initialization
	public string playerName;
	public int lives;
	public float health;

	public string SaveToString(){
	playerName = "cat";
		lives = 10;
		health = 9.9f;
		return JsonUtility.ToJson(this);
		//Debug.Log (myjson);
	}

	void Start(){

		var myjsondata = SaveToString ();
		Debug.Log (myjsondata);
	}

}

 

Unityで作成した子オブジェクトを削除

子化したPrefabを削除します

ボタン用のスクリプトで使用しています

	public void resutPanelClose(){//パネルクローズ時に作成したprefabを削除する
		resultPanelObj.SetActive(false);
		foreach ( Transform n in resultContent)
		{
			GameObject.Destroy(n.gameObject);
		}
	}

 

NCMB データストアの検索結果が空なのにエラーが出ないで問題になる件

ユーザ名でデータストア検索しても,ユーザ名に紐付いてるデータがないときの処理など.(あまりつかわないかもしれないけど,)

エラー出ずに,スルーして,Listがゼロのまま読み取るので最終的にエラーでる.

Listの長さを計測してゼロのときにエラーと判定させるという方法で回避

	bool checker = false;
		string useinfoStr = PlayerPrefs.GetString ("userName");//get username from playerprefs
		NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject> ("usetInfo");
		Debug.Log ("user" + useinfoStr);
		query.WhereEqualTo ("playerName", useinfoStr);
		query.FindAsync ((List<NCMBObject> objList ,NCMBException e) => {//moto
			if (e != null) {
				//検索失敗時の処理
				//kokonihyouji
				alert1.SetActive(true);
				return;
			} else {
				
				if ( objList == null || objList.Count == 0 ){
					alert1.SetActive(true);
					return;
				}else{
				NCMBObject obj  = objList[0];
				PlayerPrefs.SetString("objID", obj.ObjectId);
				checker = true;
			}
			}
		});

if ( objList == null || objList.Count == 0 ){}

が肝

NCMB ユーザ情報の任意のフィールド値を呼び出す

NCMBの会員情報にuserTypeというプロパティでは呼び出せない値があり,それを呼び出したいとき

NCMBUser currentUser = NCMBUser.CurrentUser;//現在のユーザ情報をcurrentUserに格納
string myUserType = currentUser["userType"].ToString();
PlayerPrefs.SetString("userType", myUserType);//userTypeをPlayerprefsの_userTypeに格納

いや,これで良かったなんて,,半日くらいなやんでたのに,,