「C#」カテゴリーアーカイブ

Unityで日付

日付1日足して表示

 

	DateTime dt;
	public Text niti1;
	public Text niti2;
	// Use this for initialization
	void Start () {

		//今日の日付を取得
		dt = System.DateTime.Now;

		niti1.text  = System.DateTime.Now.Month.ToString() + "月" + System.DateTime.Now.Day.ToString () + "日";

		TimeSpan ts = new TimeSpan(1, 00, 00, 00);
		dt = dt + ts;
		niti2.text  = System.DateTime.Now.Month.ToString() + "月" + System.DateTime.Now.Day.ToString () + "日";
}

 

NCMBでprefab生成

プレファブ生成

 

//変数設定
	public RectTransform nodePrefab;
	public RectTransform content;

////以下スクリプト本体	

int mymax2 = 6;//forの回数
		for(int p = 0; p < mymax2; p++){
			var item = GameObject.Instantiate(nodePrefab) as RectTransform;  //プレファブを生成してitemに入れる
			item.SetParent(content, false);//それをcontenteの子にする(上で変数宣言している)
			GameObject labelobj = item.transform.Find("Label").gameObject;//その中からLabelというオブジェクトを検索する
			var idtextcompo = labelobj.GetComponent<Text> ();//Labelのはいったオブジェクトの中のテキストコンポーネントを取得
			idtextcompo.text = "test";//その文字列を設定

		}

 

NCMBで日付

必要なライブラリ

using NCMB; //use Nifty Cloub Mobile Backend
using System;

 

日付用の変数

//変数
 DateTime mydate;
		public Text nyuYear;//入所日年

		public Text nyuMon;//入所日月

		public Text nyuDay;//入所日日

//


string myString = nyuYear.text + "/" + nyuMon.text + "/" + nyuDay.text;
DateTime mydate = DateTime.Parse(myString);

NCMBObject obj = new NCMBObject ("myobj");//NCMBobjectのクラス名

			obj.Add("hiduke", mydate);//hidukeフィールド名にmydateを追加

			obj.SaveAsync ((NCMBException e) => {      
				if (e != null) {
					//エラー処理
				} else {
					//成功時の処理

					Debug.Log("good");//送信成功の意味

				}                   
			});

 

 

NCMBでオブジェクトのACLを変更

NCMBのユーザでなくオブジェクトのACLを変更する手順

動作したスクリプトを抜粋してるので動作確認無しです

NCMBUser user;
	string acltest;
	// Use this for initialization
	void Start () {
		user = NCMBUser.CurrentUser;
		string userName = user.UserName;

		//UserTypeフィールドにsuperの入っているユーザを検索してListに入れる
		NCMBQuery<NCMBUser> query = NCMBUser.GetQuery ();
		query.WhereEqualTo ("userType", "super");
		query.FindAsync ((List<NCMBUser> userList , NCMBException e) => {
			if (e != null) {
				UnityEngine.Debug.Log ("失敗 : " + e.Message);
			} else {
				foreach (NCMBUser users in userList) {
					pairUsers.Add(users.UserName.ToString());//SUの名前をリストに入れる
				}//foreachここまで
				acltest = userList[0].ObjectId.ToString();
			}
		});
		getuserlist();

	}


	void getuserlist(){
		string userName = user.UserName;
		NCMBQuery<NCMBObject> query2 = new NCMBQuery<NCMBObject> ("testobj");
		query2.WhereEqualTo ("player", userName);//Playerがusernameの結果を検索
		query2.FindAsync ((List<NCMBObject> objList ,NCMBException e) => {
			if (e != null) {
				//検索失敗時の処理
				Debug.Log("e");
				return;
			} else {
				if ( objList == null || objList.Count == 0 ){
					Debug.Log("e");
					return;
				}
				Debug.Log(objList.Count);
				int po = 0;

				foreach (NCMBObject objdata in objList) {//ne
					var acl = objdata.ACL;//ACL書き換え準備
					//読み込み権限全close
					acl.PublicReadAccess = false;
					//書き込み権限を全close
					acl.PublicWriteAccess = false;

					//userNameきっかけで読み書きアクセスお追加する
					acl.SetWriteAccess (user.ObjectId.ToString(), true);
					acl.SetReadAccess (user.ObjectId.ToString(), true);

					//他の方へのアクセス許可用
					acl.SetReadAccess (acltest, true);

					objdata.ACL = acl;//保存準備
					objdata.SaveAsync ((NCMBException z) => {      
						if (z != null) {
							//エラー処理

						} else {
							//成功時の処理
							Debug.Log(acltest);
							//objdata.ACL = acl;
							Debug.Log("good");//送信成功の意味

						}                   
					});
				}//for eachここまで

			}
		});
}

 

NCMB userのフィールド取得

会員ロールのカスタムフィールド”nyusyo”の取得

 

		NCMBUser currentUser = NCMBUser.CurrentUser;//現在のユーザ情報をcurrentUserに格納
		PlayerPrefs.SetString("nyusyobi", currentUser["nyusyo"].ToString());
		Debug.Log(currentUser["nyusyo"]);

 

NCMB object dateを整形する

NCMBObjectのUpdateDateを整形するはなし

ダメパターン

DateTime dt = objdata.UpdateDate;
string thisDay = dt.ToLongDatePattern();

これだと

Cannot implicitly convert type `System.DateTime?’ to `System.DateTime’

ってエラー出る

OKパタン

DateTime dt = objdata.UpdateDate.Value;
string thisDay = dt.ToLongDatePattern();

これで年月日(2016年11月29日)で出力される

objdataはサーバから取得したNCMBオブジェクト

Valueをつけるのがポイント

 

Unity GUI(8)画像のアサイン

次に,Image1を選択し,インスペクタのSource Imageにアセットのhidari の画像をアサインします.

15

image2にはmigi の画像をアサインします.

mysw() の中の Debug.Log (cat); の下に

	if (cat == 1) {
			migiya.SetActive (true);
			hidariya.SetActive (false);
		} else {
			migiya.SetActive (false);
			hidariya.SetActive(true);
		}

を入れます.

これはランダム値catが1と同一ならば,migiyaというGameObjectを見える状態にしなさい.そしてhidariyaは見えなくしなさい.

という意味です.else以下はその反対の動きですね.

先日のアプリでは,警告表示をやたら出すのに使ってました.

まだ押さないでとか,ネットワーク接続していません.とか,,

もどって,

そして作成したGameObjectを選択し,

16

migiyaにimage2をhidariyaにimage1アサインします.

ゲームを再生し,ボタンをクリックすると矢印がランダムで切り替わります.

なお,はりつけた画像とボタンが重なるとボタンをクリックできません.ボタンをすらしてください.

あるいは,Imageが押される対象になっているので,それをOffにするやり方もあります.Image1,2を選び,インスペクタの Raycast Targetのチェックをオフにします.こうするとImageがボタンでなくなるのので,Buttonだけが押せる対象になるのです.

17

おめでとうございますこれで1億の仕事もばっちりですね!

(1億の仕事とは)

http://gigazine.net/news/20160405-tsa-randomizer-cost-1-4-million/

Unity GUI(7) 矢印の準備

この画像をぞれぞれ右クリックしてダウンロードし,保存したファイルをAssets内にドロップします.

migi hidari

どちらか1つ選択してインスペクタ編集します

11

2つともTextureTyepeSpriteに変更し,Applyを押します.

両方の画像の変更が終わったら,

ヒエラルキーのCanvasを選び,

メニューバー>GameObject>UI>Image を選択します.

これをもう一度繰り返し,下図のように名前を変更してください(image1,image2)

12

Image1を選び

13

Width,Heightを図のように変更

Image2も同じにします.

14

こうなります

Unity GUI(6) ゲームオブジェクトをアサインする準備

myscriptをダブルクリックし,

public class myscript : MonoBehaviour {

    void Start () {

の間に

	public GameObject migiya;
	public GameObject hidariya;

と入力し,保存して,Unityに戻ります.

スクリプトをアサインしたGameobjectを選択すると,インスペクタに

10

と表示されます.

スクリプトでPublic宣言したものは,このようにインスペクタで扱えるようになり,変数などの場合は直接入力できるようになります.

public インスペクタで扱えるようにして

GameObject 変数はGameObjectですよ,

migiya  名前はこれね.

という意味です.

 

Unity GUI(5)ボタンの作成

次に メニューバー>Gameobject>UI>Button を選びます.

ゲーム画面上にボタンが現れます.インスペクタ画面適当な位置に移動させます.

5

次にボタンを押した時に実行するスクリプトを書きます.

void Updateの終わりの } の下の行に

	public void mysw(){

		int cat = Random .Range(0, 2);
		Debug.Log (cat);
}

とかきます.

 

void start と void updateの中に書いた2行は消しておきましょう.

public 他からでも見えるようにの意味

void mysw(){ はmyswという関数(命令の集合体)ですよ.

 ここまでね.

という意味です.

保存が終わったら.Hierarrchyからさきほど作成したButtonを選びます.

ボタンを選択すると,インスペクタOnClickという項目があります.

6

この + ボタンを押します

7

None(Object)と書かれている所に,さきほどスクリプトをアサインしたGameObjectをドロップします.

8

次に,No Functionをプルダウンし,myscriptmyswを選びます.

9

再生し,ボタンを押すとmysw関数の中だけが実行されます.