「技術メモ」カテゴリーアーカイブ

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関数の中だけが実行されます.

Unity GUI(4)ランダム値の確認

こんどは,さきほどの

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

void Update(){   }

の間に移動させ(void Start(){  }の間から出して),再生してConsoleを確認しましょう.

4

こうなります.

Update中の{}に書かれたものは,ゲーム再生中ひたすら繰り返されます.

 

UNITY GUI(3) 空のオブジェクトを作成する

それでは,Unityに戻り

メニューバーの Gameobject>Create Empty を選択します

HierarchyにGameObjectが作成されます.これを分かりやすい名前に変えてもいいですが,面倒なので,そのままでいいです.

先ほど作ったmyscriptをこの作成されたGameObjectの上へドラッグ&ドロップします

このスクリプトがGameObjectへアサインされました.

再生ボタンをクリックします.

コンソールを確認すると,そこには0か1が表示されています.3

 

Unity GUI(2)ランダム値

ランダム値を発生させてみましょう

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

このvoid Start()に囲まれた中を最初の1回実行します.最初の1回のタイミングは,UnityのPlayボタンを押した時の1回です.

この と  の間に

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

と入れてください.

int整数の変数を作ろう!(えさ箱)

cat は整数をいれておくための変数の名前(えさ箱の名前的な)

Radndom乱数発生

.Ramge範囲指定

(0, 2)範囲は0から2の間

の意味です.

Debug.Log(cat); はcatの変数の中身をコンソールに表示せよというものです.

これを記入して,保存します.

 

Unity GUI(1)準備

Unityのボタンやアイコンなど,GUIと呼ばれるパーツを作成してみましょう

なお,検索語は ugui (unity guiの意味)がいいです.

以前あったアセットに,NGUIというものがあり,それと混同されることがたまにあるので注意ください.

 

  1. Unityを起動します
  2. Asstesウィンドウ上で右クリックして create > c# script を選ぶ1
  3. ファイル名を変えられる状態になるので2myscript と入力
  4. もしも名前を変更前に確定してしまった場合は,後で修正します
  5. 作成したスクリプトをダブルクリックして開く.コードエディタが開きます.
  6. 最初の2行の
using UnityEngine;
using System.Collections;

後に

using UnityEngine.UI;

を追加します.

これはUIシステムを使えるようにするためです.UIを使わない場合は不要です.

冒頭の3行はこうなりましたか?

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

 

Unity入門-15

条件分岐に応じてリザルトを変更する

 

復習

  • シーン遷移のスクリプトはどこ?
  • シーン遷移するためには,build setupにシーンを入れておく
  • invokeは「ちょいまち」のこと

条件分岐

  • 経由地を全て取得=endシーンへ(現在の設定)
  • タイムアップ=新たに作成するタイムアップシーンへ

概要

  1. endを複製し名前と画像を変更
  2. タイムアップをしたら,タイムアップシーンへと飛ばす
  3. 実行して確認

編集する

badendシーンを作成する
  1. edukit内のend選択
  2. Edit>Duplicate で複製する
    enddup
  3. ファイル名がend 1になるので,名前を badend に変更
    badend
画像を入れ替える
  1. badendをダブルクリックして開く
  2. Hiearchy>Canvas>Imageを選択する
    canvas
  3. インスペクタのSource Imageで画像を「ざんねんでした」と表示されている画像(ui_1)にする
    imageswap
  4. リザルトは不要なので,Hierarchy>Canvas>timemat を選択し,右クリック>Delete で削除する
    timedelete
ビルドシーンに加える
  1. このシーンをビルドする対象に含める(でないとシーン遷移できない)
  2. (下図の1)File>Build Settings… を開く
  3. (下図の2)Add Open Sceneをクリックする
  4. (下図の3)badendが追加されたか確認して閉じるbuildscn
スクリプトを変更する1
  1. edukit>myQuest をエディタで開く
  2. 以下のスクリプトを追加する.どこに追加するとよいか?(これは滑り台のように1回実行されるもの)
	void gobadEnd(){
		SceneManager.LoadScene ("badend");//go badend scene
	}
スクリプトを変更する2
  • 同じくmyQuestを開き,タイムアップした箇所で上記の関数を実行するにはどうすればよいか?(ヒントは上の復習コーナーに)
その他
  • 自習用のサンプルなどを例示する