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

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で消去されます.

 

プログラミングしないでFPS風

UnityのAssetStoreにあるPlaymakerを使って「プログラミングしないでゲーム風のものを作る」その第2弾です。

その前に、、いつものお約束。プログラミングはできるにこしたことがありませんよ〜!数学もね!

さてUnityで超簡単なFPSの骨格を作ってみましょう。

FPSは映像業界にいるとFrame Per Second(1秒あたりのフレーム数)ですが,ゲームの世界でがFirst Person Shooting(一人称視点でのシューティング)のこと.

つまり

  • 一人称視点
  • 撃てる

が要件ですよね.

ということで,ボウリング的な物は5分くらいで作れます.

以下画像はリアルタイム時間で再生されます.

最初に板を置いたり,ピンを並べます。登場するピンにはPhysics(物理演算)を入れて10kgに設定しています.

そしてここからPlaymakerです。(1)カメラにMouseLook2をいれてマウスの方向をカメラが向くようにします.これで一人称視点完了.カメラがマウスの方向を動くようになります。

同じくカメラに別のPlaymakerを入れ,(2)マウスのボタンが上がったら,(3)弾を作成します.

作成した弾を変数に格納しますが,プルダウンメニューから変数が作成できます.これば便利.

そして(3)変数に格納された弾にローカルZ軸に90の加速度を入れボールを射出します.弾には複製可能なPrefabという設定したものを使います.

(4)マウスを押したときの処理で最初に戻しておしまい.

これだけですね.

わずか4工程です。しかもクリックしてただけ、、、

この程度であれば作るのは簡単です.

しかし、作り込んでいくと作成した弾を消す処理や,倒れたピンをどうやって数えるかを考えなくてはなりません.

今回の条件では,ボールに関しては「-y座標になったら消す」でかまいません.ですが,これが山あり谷ありの地形だったらどうします?高さ1000にいて、マイナスになるまではかなり時間がかかります。

さらにはどうやってピンが倒れたって検出すればいいですか?床に接触したら検知?いいえ,ピンが置かれている時すでに接触してるので使えませんね.ピンの角度を検出?それも1つの手段ですね.

もう一つあるとすれは衝突検知エリアを少し上にずらすという方法でしょう.

では,どうやって他のピンではなく床に当たったって検知しますか?つまり単に衝突判定しただけではダメってこと。

こういうふるまいのルールをことをアルゴリズムって言います.

さてこの場合に限っては,タグというものを使います.味方のタグ敵のタグ建物などのタグなどがあります.

当たり判定の要素にタグを使い,味方のタグには当たり判定をしない(傷つけない)ということができるんですね.

こうしたことは比較的簡単に設定できます.でもプログラミングを学びながらアルゴリズムまで考えるのは本当に大変です.

プログラミングはできるだけ楽をしてむしろストーリーや,世界観キャラクタユーザの操作性をどうアルゴリズムに活かすかに時間をかけてみませんか.

だんだんとPlaymakerに慣れてきたら、実際にコードを書いてみましょう。次に何をすればいいのか、参考にできるプログラミングをどんなキーワードで検索すればいいのか自然とわかるようになっているはずです。

プログラミングしないでゲームを作る方法

さまざまな商用ゲームで使用されているUE4Unity

3Dゲームとかって,プログラミング大変だと思いませんか?

実はプログラミングしなくてもプログラムが組めちゃうんです!

UnityにはアセットストアでPlayMakerという,非常に強力なビジュアルプログラミングツールが販売されています.

ビジュアルプログラミングって,,そう,あのScratchと同じように,命令を線でつなぐことでプログラミングできてしまうのです.

しかもこれで作成したプログラムは,AdndroidiOSアプリにしてインストールしたり,販売したりすることも可能です.つまり,Scartchのような練習だけではなく「実際に仕事で使える」ツールなのです.

そしてなによりも素晴らしいのはプログラミング(実際のコード)を書く知識が自然に身につくのです.

例えばある動作をさせたいとき,その命令を知り,さらに実行するための準備が必要ですよね?

それがPlayMakerでトライ&エラーを繰り返しているうちに,コードに何が必要か分かるようになります!

なんだかスピード○ーニングみたいですが,プログラミングって動作のメカニズム(つまりアルゴリズム)が分からないとプログラムが書けません.でもそのプログラムはアルゴリズムがわからないとどの命令を使えばいいかわからない,,,結局自分は何をしたらいいかわからない,ので難しいと思っちゃう.で挫折するとなっちゃうわけです.

PlayMakerはどちらかというと文系向けのツールです.でもビジュアルプログラミングって今では工学系の会社でもでも使ってますよ〜(LabViewなど)

では「スペースキーを押すと上に移動する」というプログラムを組みましょう.

実際にコードを書くとすれば,

  • キー入力
  • 1秒間あたりの移動量をベクトルで計算
  • キーが上がったら処理から抜ける

,,,といった処理が必要ですが,これをPlayMakerでやってみると,(等速再生ですよ〜),

わずか2分30秒でできてしまいます.

しかも名前の入力以外にキーは打っていませんよね.そしてベクトルのベの字も出てきませんでした,

こちらは販売元の参考動画です.当たり判定の例.13分くらいを見てみましょう.

こちらはカギを取得するとドアが開く例.ダンジョンイベントに使えそうですね.

誰ですか?UE4では標準で搭載されているって突っ込み入れているのは.>https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/index.html

はい.もちろんUE4で作ってもいいんですよ.

どうやって作るか.そんな部分をお客さんは評価しませんよね.アプリのセールス文に

「1行1行手入力でプログラミングしました」

って書いてあったら積極的に買いたくなりますか?

つまりプログラミングはなるべく「楽をして」,その時間をお客さんが楽しませることに力を注ぎませんか?

もちろんコードが書けるにこしたことはありません.是非PlayMakerを使い,プログラムの構造を分かった上でコーディングにチャレンジしてみてください.

Unity用のリアルな地形を取得する3

Unityを起動し,Gameobject>Light>Directional Light で光源を追加します.

ki16

 

Gameobject>3D Object>Terrain で地形を追加します

ki17

 

TerrainのInspectorを確認します.歯車のタブをクリックし,下部のImport Rawをクリック

ki18

 

Rawファイルを選択し読み込みます.読み込みのインスペクタは,Terrain SizeのX,Yは実際の地形の大きさ,Yは画面内の最高点の高さを入力しImportをクリック.

ki19

 

地形が作成されました.お疲れ様です.

ki20

 

この地形にテクスチャを塗ったり,木を生やしたりなどできます.

 

地形の編集についてはこちらを確認してみてください.

なお,国土地理院のデータについては,完全に自由に使用できるわけではありませんので,使用できる範囲について注意してください.