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を開き,タイムアップした箇所で上記の関数を実行するにはどうすればよいか?(ヒントは上の復習コーナーに)
その他
  • 自習用のサンプルなどを例示する

Dictionaryの使い方(MBAAS関連)

MBAASはJSON互換だけど,JSONは遅れずDictionaryが受けられるらしい.

んで,Dictionaryを真面目に使ったらエラーでるのよ.

 

いける例

using System.Collections.Generic;

public class skillSender : MonoBehaviour {
	
		 static public Dictionary<string,int> skillPDic;//スキルチェックポイント用


	// Use this for initialization
	void Start () {

			skillPDic = new Dictionary<string, int> () {
				};

	}

NGの例

using System.Collections.Generic;

public class skillSender : MonoBehaviour {
	
		 static public Dictionary<string,int> skillPDic;//スキルチェックポイント用


	// Use this for initialization
	void Start () {

			Dictionary<string,int> skillPDic = new Dictionary<string, int> () {
				};

	}

 

 

 

Photoshop入門その6

色調補正

  1. モード変更
    1. 8bit/チャンネル
    2. 16bit/チャンネル
  2. 明るさ・コントラストの調整
  3. レベル補正
    1. 黒,グレー,白色点を指定
  4. 色相・彩度
    1. HSVモデルについても確認すること
  5. シャドウ・ハイライト
    1. HDR風画像など

 

Photoshop課題

  • 自分で撮影した画像5枚以上を用いて,スケール感を混乱させる画像を作成せよ
  • アイデアスケッチを提出すること(完成画像提出時に紙で提出)
  • 完成画像1枚以上,使用した素材画像全てを提出(完成画像だけ提出の場合は未提出扱いとなる)
  • 他人が撮影した素材は絶対に使用しないこと
  • 締め切り月曜クラス12月12日授業開始時までに,木曜クラス12月15日授業開始時までに
  • 提出先: Share

Unity入門-14

 

0秒になったら終了させる

  • まずは時間がゼロ秒になったら終わらせるプログラムを入れる場所を探す
  • 探し方概要
    • 概要:いろいろな場所にDebug.Log(“koko”);を書いて,1秒毎に変化する場所を探す
    • 入力した行が実行された時にコンソールkokoと表示される
    • コンソールのCollapseはオフにする(Collapse同じ内容は1行だけ表示する機能をオフにする)
  • 実際の探し方
    • 各関数{}内の最初か終わり近くにDebug.Log(“koko”);を記入
    • 保存→ゲーム実行→Consoleを確認 を繰り返し,秒変化と同じタイミングで現れる箇所を探す
    • ヒント:秒の変化と音(Tick)の再生は同期しているので,そのあたり,,,?
  • その場所に以下のプログラムを入力する
			if (gameTime < 1) {
				//go end
				StopCoroutine("loop");
				Invoke("goEnd", 2f);
			}

変数 gameTimeが1未満になったら,時間制御をしているコルーチンloopを止めて,goEndの関数を2秒後に実行 の意味

こちらは2秒後に実行されるので,少し余裕が持てます.goEndを実行するタイミング(ここでは2秒)を変えて自分が最も良いと思う時間に変更してみましょう

なお2fのfはfloat(実数)の意味です.Unity上では実数の場合はfとつけるルールがあります

 

これでもいけます

if (gameTime < 1) {
goEnd();
			}

変数gameTimegが1未満になったらgoEnd関数を実行(こっちは2秒待たないのでせわしない)

 

シーンチェンジはどこ?

  • シーン「end」にジャンプする関数 void ○○○(){   } はどこか再度確認すること(上でに書いてありますが)

変数宣言をいろいろ試す

  • 変数宣言をする場所がある
    • グローバル編
      • プログラムのどこでも使えるけど,このプログラム外では使えない
      • publicをつけるとインスペクタで設定できる.インスペクタで設定した値は,プログラムで宣言した値よりも優先される(プログラム側で変更はできる)
      • privateをつけるか何もつけない変数宣言はインスペクタには表示されない
    • ローカル編
      • 関数内で使える(ちょいとメモ代わりや,変数の受け口に使える)
    • 神編
      • staticは神
      • public static int mikeneko; と宣言すると,スクリプト名.mikeneko でゲーム内のどこでも使える
      • ただし関数などによってはstaticを嫌うものがあるので,その際はnamespaceなどを使ってusingする

Photoshop入門その5

レイヤーその2

  1. レイヤーマスク(白と黒で消す)
  2. レイヤースタイル(効果,ボタン作成などにも)
  3. 自由変形
  4. 変形・ワープ変形モード(ベジェカーブを手がかりに変形)
  5. パペット変形(関節のような変形)
  6. レイヤーの整理
    1. レイヤーの結合(レイヤーをまとめる)
    2. 画像を統合(1枚の画像にまとめる)
    3. 画像の書き出し(JPEGなど非可逆圧縮で保存=>送りやすい)

NCMBでデータストア管理

96時間はまったこと

  • NCMBデータストアはJSON互換だけどJSONは保存できない
  • NCMBデータストア一回のセッションに複数のログ(今回はスキルチェックの結果)を保存する場合は,Dictionaryで保存する
  • UnityのC#でDictionaryを使うには最初に「using System.Collections.Generic;」って言っておく
  • アクセス権を設定する場合,新規オブジェクトの場合は「NCMBACL acl = new NCMBACL ();」でいいが,既存の場合は一旦アクセス権を読み込んでから書き換える(参考サイト
  • データストアはACL設定しないと公開になる仕様らしい(ランキングとか用なので)
  • ACLのスクリプトでユーザ名の使い方その1
    NCMBUser user = NCMBUser.CurrentUser;
    string userName = user.UserName;
    			NCMBACL acl = new NCMBACL ();//今回のログは新規作成なのでnewでよい
    			acl.SetWriteAccess (userName, true);
    			acl.SetReadAccess (userName, true);

     

 

ハムスターで行こう!

唐突ですが,ハムスターメディアと切っても切れない関係にあります.

プログラミングがよく分からないという方は,今回の「Unityプログラミングはハムスターだらけ」で構造を理解してください.

 

Photoshop入門その4

やること

テストの解説

  • 再サンプルのチェックをOn/Offにするときはいつか?
    • ピクセル数を変えたいとき=ON(例:画像のデータ量を変更したいとき,ピクセル数を指定して変更したいとき)
    • ピクセル数を変えたくないとき=OFF(例:印刷解像度の変更)
  • DPI(Dots Per Inch)
    • PPIと同じ
    • 印刷する際のピクセルの密度の考え方
    • 1インチは25.4mmと考える

コンピュータのお約束その2

  • 一般的な1パケット容量は128バイト
  • 米印とアスタリスク
  • シャープとナンバーサイン
  • ニョロ(波ダッシュ)
  • スラッシュとバックスラッシュ
  • URLの末尾表記,ディレクトリ指定の場合は?
  • マルチバイト文字

例題

(1)自作の詩をネットで送信しようとした.1パケット0.3円の回線で送信する場合,いくら必要か.なお詩は日本語で512文字あり,文字のみを送信したとする.

(2)自作の詩をネットで1パケット0.3円の回線で送信する場合,いくら必要か.なお詩は英語で512文字あり,文字のみを送信したとする.

(3)1MBの画像データを1パケット0.5円の回線で送信するとき,パケット代はいくら必要か.画像データのみを送信したことにする.

(4)350DPIで印刷した場合に12.7cm幅となる正方形画像がある.この画像を1パケットを0.1円の回線で送信するときに,いくら必要か.小数点以下切り捨てて答えよ.なお画像はRGB各8bitとし,画像以外のデータは送信しないものとする.

Photoshop後半

  1. レイヤー
  2. レイヤー付きの保存(*.PSD形式が一般的)
  3. その他保存形式
  4. その他(時間に応じて)

 

 

Unity入門-13 スクリプトmyQuestをざっくり対訳してみる

対訳してみました.

元のスクリプトは

using UnityEngine;
using System.Collections;
using UnityEngine.UI;//UIを使用するのに必要
using UnityEngine.SceneManagement;//シーン遷移をするのに必要

public class myQuest : MonoBehaviour {

	[SerializeField, HeaderAttribute ("経由地の数")]
	public int points;

	//sound
	[SerializeField, HeaderAttribute ("効果音をドロップ")]
	public AudioClip getSound;
	public AudioClip tickSE;


	//default time
	[SerializeField, HeaderAttribute ("カウントダウンの初期時間")]
	public int gameTime;
	[SerializeField, HeaderAttribute ("残時間のUItextをドロップ")]
	public Text timeText;
	[SerializeField, HeaderAttribute ("残りの経由地数表示UIをドロップ")]
	public Text nokoriText;

	[SerializeField, HeaderAttribute ("エンディングのシーン名を入力")]
	public string endSceneName;

	//audio source get from this script attached
	AudioSource myaudio;


	// Use this for initialization
	void Start () {

		myaudio =	GetComponent<AudioSource>();
		timeText.text = "残り時間" + gameTime.ToString () + "秒";
		nokoriText.text = "のこり" + points.ToString () + "個";
		//start after nSec
		Invoke("timeCount", 3.5f);
	}
		
	void Update () {
	
	}


	//if hit destroy obj
	void RedirectedOnTriggerEnter(Collider mycollider) {
		//Debug.Log (mycollider.gameObject.tag);
		if (mycollider.gameObject.tag == "pointObj") {
			points--;
			nokoriText.text = "のこり" + points.ToString () + "個";
			myaudio.PlayOneShot (getSound, 0.7F);
			Destroy (mycollider.gameObject);

			if (points < 1) {
				//go end
				StopCoroutine("loop");
				Invoke("goEnd", 2f);
			}
		}
	}

	void timeCount(){
		StartCoroutine("loop");
	}

 

対訳はこちら(画像:クリックで拡大)

%e5%af%be%e8%a8%b3%e3%81%97%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86

次へ

game managerシステムみたいなの

 

よくつかう関数をいれとくのを作ります

using UnityEngine;
using System.Collections;

namespace globalManager{//名前空間

public class myManager : MonoBehaviour {//クラス名はmyManager


		public static void mytest2(){
			Debug.Log ("test");
		}

		public static void mytest3(int cat){
			Debug.Log (cat);
		}


}

}

 

このnamespaseでusingすると呼び出せます

using UnityEngine;
using System.Collections;
using globalManager;//必要

public class slaveScript : MonoBehaviour {

	void Start () {
		myManager.mytest2 ();
		myManager.mytest3 (5);
	}
	

}

これで,コンソールには

「test」「5」と表示されます