UGUI基本(4)

UGUIでボタンを作成する例

  1. 次のような画像を用意しますbutton1
  2. 画像を読み込み,Texture TypeはSpriteに,SpriteModeはMultipleにし,Applyをクリックし適用.
  3. その後SpriteEditorを開き,ドラッグして使用エリアを指定します.今回は真ん中で4分割指定しますbutton2
  4. 1枚の画像から4つのイメージを別々に使用できるようになりました.メモリの節約になるとか.button4
  5. メニューバー>GameObject>UI>Button を選択します
  6. 位置を調整し,幅と高さをSpriteのものを同じにします
  7. Source Imageには押される前のボタン画像を
  8. PressedImageには押された画像を指定しますbutton5
  9. 以下,動作例です

UGUI基本(3)

UGUIその3

  1. 作成したテキストの背景(映像の世界では座布団と呼んだりします)を設定します
  2. 画像をAssetにドロップし,選択します
  3. Texture TypeをSpriteにし,Applyをクリックしますuimage4
  4. メニューバー>GameObject>UI>Image で画像が入るUI要素を追加します(ヒエラルキーにImageが追加されます)uimage3
  5. Imageの設定を下図のようにしますuiImage
  6. ImageのSource Imageを読み込みます
  7. uimage5
  8. 文字要素(counthyouji)をImageの子にします
  9. 位置調整してできあがりuiimage2

 

 

 

UGUI基本(2)

ゼロ埋めをする

  1. 前エントリーのスクリプトに,少し手を加えるだけでゼロ埋めをすることができます.
  2. ゼロ埋めは桁数をそろえて見た目の良さを向上させるだけでなく,どの程度得点をとればよいか,そのモチベーションを発生させることにつながります.
  3. 以下はスクリプトです.変更箇所は黄色になっています.15行目は初期設定.29行目はコメントアウトしています.30行目はstring(文字列).format(の設定でフォーマットは)(”{0:D3}”3桁をゼロで,countIntを変換しなさい)の意味です
using UnityEngine;
using System.Collections;

//use for UI
using UnityEngine.UI;

public class hitcheck : MonoBehaviour {

	//variable
	int countInt = 0;  //
	public Text myText; //use for UI text


	void Start(){
		myText.text = "000";
	}


	void OnTriggerEnter(Collider mycollider) {
		Destroy(mycollider.gameObject);


		//sound

		//effect

		//add point
		countInt++;
		//myText.text = countInt.ToString ();
		myText.text = string.Format("{0:D3}", countInt);
	}

}

実行結果zeroume

UGUI基本(1)

Colliderのつづきです.今回はUIを表示します.

 

  1. メニューバー>GameObject>UI>Text を選択します
  2. HierarchyにCanvasとTextが追加されましたunity3
  3. CanvasはUnityのUI用の入れ物です.他のUi要素はこのCanvas下に入れます.複数のCanvasを設置することも可能ですが,特段の事情が無い限り1つにしておいてください
  4. Hierarchyからcanvasを選択し,Canvas Scaler(無ければメニューバー>Component>Canvas Scaler で追加),Reference ResolutionのXを1920,Yを1200にするunityi2
  5. Reference Pixel Per Unitを100に(画像は233になっていますが気にしない)
  6. Textの名前を変更します.この例ではcounthyoujiにし,RectTransform Anchor Presetを左上固定(下画像と同じに)にし,Posxを360,PosYを-100,Widthを600に,Heightを120にしますunityui
  7. 前回のスクリプトを以下に変更します.黄色い部分が変更箇所です
  8. using UnityEngine;
    using System.Collections;
    
    //use for UI
    using UnityEngine.UI;
    
    public class hitcheck : MonoBehaviour {
    
    	//variable
    	int countInt = 0;  //
    	public Text myText; //use for UI text
    
    
    	void Start(){
    		myText.text = "0";
    	}
    
    
    	void OnTriggerEnter(Collider mycollider) {
    		Destroy(mycollider.gameObject);
    
    
    		//sound
    
    		//effect
    
    		//add point
    		countInt++;
    		myText.text = countInt.ToString ();
    	}
    
    }
  9. 注意する必要があるのは,「数字(int)」と「文字列(string)」の扱いです.UIには数字を表示させることができませんので,29行目の.ToString()で数字を文字に変換しています
  10. スクリプトの説明は以下のとおりscriptsetumei
  11. 実行動画です,スタートすると数値が初期化されゼロになり,Cubeが当たると数字が1増えます

    おつかれさまでした

Collider基本(4)

PlayMakerをつかって,お掃除ゲームを作ってみましょう.

まずはCubeが当たると消えるプログラム.これはさきほどのと一緒.

つぎに,マウスの座標を検出し,マウスをクリックしている間は常にそのX,Z座標でYは1固定で移動させなさい.と設定.

マウスを放したら,離した位置で高さ3に戻します

そして,ランダム座標を生成し,ボールを作成.変数に1を足して,それが30より多いか少ないか比較させ少ないともう1回ボールを作成し,変数に1足す.多いと何もないところへ遷移しアクションがないのでなにも動作しない.

そんなプログラムです.

マウスをクリックするとCubeが低くなり,マウスを放すとCubeの位置が高くなります.

Collider 基本(3)

では,せっかくなのでPlayMakerでやってみましょう.

スクリプトを外したCubeにPlayMakerで同じ動作を組み込んでいきます

同じ物がプログラミングしなくても約1分30秒で作成できます.作成過程で変数を作成(動画の44秒付近,New variable…)していますが,この部分,プログラミングでは

	void OnTriggerEnter(Collider mycollider) {

Collider(これは変数の型) mycollider(変数名)です.こういう関数に渡す変数のことを引数(ひきすう)とか言うそうですが,さっぱり分かりません.だいたい引とか言いながらどこにも数字なんか出てきません

なんでこんな呼称にするかな,,,

市役所に行くと,建設当初からあった窓口OnTriggerEnter課があり,そこで受け付けてもらえる申請書の書式はColliderという種類で,その申請書にmycolliderと書いていると.すると,OnTriggerEnter課の職員はColliderの申請書に書いてあるmycolliderを探し,destroyすると,,,,それが下のコード

Destroy(mycollider.gameObject);

まぁ引数とは,役所の窓口に出す申請書的なものではないかと,,,

たぶんこの○○課のことをメソッドとか言うんでしょうが,そんなことは知らなくてもとりあえずは動く.

Collider 基本(2)

その2

何かが当たって消えるというものです.

上のCubeの設定はTriggerON,Hitcheckのスクリプトがアサインされています.

ボールにはRigidbodyの設定がされています.

このCubeをボールに当てると,ボールが消えます.Game実行画面ではCubeを動かせませんが,Scenes画面では動かせますのでコントロールした代わりに直接動かしてみます.

「何かを叩くと消える」を実装するのであれば,これで可能です.

また,OnTriggerEnterに,音を再生する命令など与えると音が,爆発するオブジェクトを生成するなどすると爆発します.

 

Collider 基本(1)

Colliderとは

Colliderは衝突判定のための形状をさします.Unity内で作成したオブジェクトには全てこのColliderがついています.

Cubeで作った坂に,Physicsを入れた球を落とすと,動画のように壁に当たります.壁のColliderを一時的にオフにするとすり抜けてしまいます.

このColliderは衝突判定にも使われます.

Asset内の適当なところで,右クリックしCreate>C#Script でC#を作成し,hitcheckという名前に変更し全文を以下のスクリプトを変更します.

using UnityEngine;
using System.Collections;

public class hitcheck : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	void OnTriggerEnter(Collider mycollider) {
		Destroy(mycollider.gameObject);
	}
}

このスクリプトは,Triggerにチェックを入れているオブジェクトにアサインします.

今回は壁にTriggerの設定を入れ(下の動画の46秒くらい),ボールが持っているRigidbodyに当たるとOnTriggerEnterの関数が実行されます.Triggerに当たったオブジェクトはOnTriggerEnterの変数mycolliderに格納され,Destroyで消去されます.

 

ボーンの設定(4)

ウェイト調整

  1. 各ボーンのモデルへの影響度合い(ウェイト)を調整することができます.スムーズバインドをした時点で設定するのが通例ですが,リグを設定した後でもスキンウェイトを調整できます
  2. モデルを選択し,ツールセットをリギングにし,スキン>スキン ウェイト ペイント□を選択しウェイトペイントツールを表示させます
  3. (ツールが表示されない場合)ペイントのツールをダブルクリックし,ウェイトペイントツールを表示させます
  4. 手足を動かし,ウェイトが破綻している場所を調べます
  5. ウェイトが破綻している箇所のボーンを選択します(下図1)
  6. ペイントモードなどを選択し,ペイントをする
    weightpaint1
  7. まずはスムーズ(上図4)で破綻しているあたりを塗り,調整する
  8. ウェイトが弱い,あるいは強い場合は,ウェイトの強さを設定したあと(上図3),ペイント操作の「置き換え」または「追加」などで(上図4)塗り,スムーズでならす
  9. 破綻がないように調整する
    weight
  10. なお,ペイントは頂点をクリックするように塗る
  11. ウェイト調整のやり直しは大変なのでウェイト調整前の状態を保存し,バックアップを残しておきましょう

ボーンの設定(3)

フロアコンタクトの設定

  1. キャラクタコントロールから編集>定義>プロパティの編集を選択
    floor1-2
  2. 足>足のフロアコンタクト の設定をオンにする
    floor2
  3. 左右どちらかの足のコントロールポイントを選択し,下図2の移動ロック,回転ロックをクリックしオフにする.もう一方の足のロックも外す
    floor3
  4. 自由なポーズをつけてみる
    pose1
  5. 適当なフレームへ移動し,ポーズをつけたコントロールポイントを選びSキーでキーフレームを打つ.移動させた全てのコントロールポイントにできたら,1フレーム目でまた繰り返す
    pose2
  6. モーションが作成される
  7. つづく