「入門」タグアーカイブ

AI機能を用いたゲームの制作(1)

今回はAI(人工知能)を利用したゲームを制作する
この場合のAIとは流行のDeep Learning(深層学習)ではなく,最短距離を検索する経路探索アルゴリズムである
UnityではNavigation SystemでA*というアルゴリズムを利用してこれを実現している
https://docs.unity3d.com/jp/current/Manual/nav-InnerWorkings.html

1)Navigationの使い方

  1. File>New Scene で新規シーンを作成
  2. GameObject>3D Object>Plane で平面を作成
  3. InspectorでScaleを全て10倍にする
  4. Project内の StandardAssets>Characters>Prefabs から,(A)ThirdPersonControllerと(B)AIThirdPersonControllerをPlane上に配置する
  5. (B)AIThirdPersonCharacotrを選択し,InspectorにあるAI Character Control内Targetに,ヒエラルキーの(A)ThirdPersonCharacotrをアサインする
  6. メニューバー>Window>Navigationを選択
  7. 設置したPlaneを選択し(下図1),Navigationの設定からObjectを選択(下図2)し,Navigation Staticにチェックをれ(下図3),Navigation AreaからWalkableを選択(下図4)
  8. 右下のBakeをクリック(上図の5)し,歩行可能エリアを焼き付ける
  9. ゲームを再生してみる
  10. やたら速く追いかけられる
  11. そこで(B)AIThirdPersonControllerのInspectorにあるNav Mesh AgentSpeed(初期値は1)を変える.これで追いかけられるスピードを変更することができる

NPC(Non Player Character)を動かす一つの方法として,こうしたアルゴリズムが利用されている

 

2)歩行不可エリアの設定

  1. 次に,障害物を設置し,歩行不可エリアを設定する
  2. StandardAssets内ProtoType内のPrefabを適当に配置する(Projectに無い場合は,Assets>ImportPackages>Prototypingで読み込む)
  3. Prefabs内のモデルをPlane上に配置する.自由な位置に置いてかまわない
  4. 置いたPrefabを選択し,Navigation Staticにチェックを入れ,Navigation AreaからNot Walkableを選択
  5. 右下のBakeをクリックし,歩行不可能エリアを焼き付ける
  6. ゲームを再生する

追いかけるスピードを変化させることで,例えばゾンビが,撃たれたきっかけでスピードを落としたり,距離で判定しギリギリで追いつかないといった設定もできる

これらを利用して可能なのが

・鬼ごっこ

・障害物競走

・だるまさんがころんだVR(需要あるのか?)

などではないか.

3)ゲームを企画する

これまでのテクニックを用いて,AIを用いたゲームを企画し,実際に制作せよ.地形(Terrain)またはPlane上でプレイし,制限時間を設けること.

なんらかの勝ち,負けを判定し,結果を変えること

スクリプトはEdukit内の物を使ってかまわない(改造してもかまわない)

機能ではなく世界観やその世界が持つ独自のルールに注力すること

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

Photoshop入門その5

レイヤーその2

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

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. その他(時間に応じて)

 

 

Photoshop入門2

  1. 各種フィルタを試す
    1. ぼかし
    2. シャープ
    3. カスタムフィルタ
    4. 畳み込み演算を試してみる
  2. 選択範囲
    1. 矩形,円形選択
    2. 自由選択
    3. クイック選択
    4. 自動選択
  3. トリミング
    1. iPhone7,6ホーム画面サイズ1334×750
  4. 画像解像度と印刷サイズ
    1. リサイズの方法
    2. DPI(Dots Per Inch)
    3. ピクセル=画像を構成する最小単位
    4. ドキュメントサイズ=用紙サイズ
  5. 基礎知識の確認
    1. bitとByte
    2. 1KBは何B?
    3. 非圧縮でRGB各色8bitのときの1ピクセルの画像データ量
    4. bps
    5. MANABOのミニテスト

Photoshop入門1

概略

  1. Adobe PhotoshopやAdobe Illustratorなどは基礎的なツール
    1. Adobe Photoshop=フォトレタッチツール
    2. Adobe Illustrator=ドロー,DTP
    3. InDesign=DTP
  2. フォトレタッチの一例
    1. dove evolution
    2. Bigger Stronger Faster Part 9 11 4’33”から
    3. Photoshop SPEED ART / Nº1 / “Estrés”  (Martin De Pasquale)
    4. 最近では犬のリードを消す商売まで  http://1212.a-thera.jp/
    5. アプリなどで「盛る」>撮影した写真を加工することは日常に(e.g. snowなど)
  3. 実際の使用について
    1. サンプル画像をダウンロードし(ZIP形式)右クリック>展開 で解凍しておく
    2. 起動と終了
    3. 画像ファイルを開く(ダブルクリックしない)
    4. 保存形式の変更
    5. 使用する主な保存形式と拡張子
      1. Photoshop形式  *.PSD
      2. Portable Network Graphics   *.PNG
      3. Joint Photographic Experts Group  *.JPG
    6. 傾きの変更
      1. スマホのカメラでは自動化されていることもある
    7. スタンプツール
      1. 修正の基本
  4. (後半はCG課題制作の時間に)

Unity入門-11 ゲーム化の準備(2)

効果音をアサインする

  1. scriptへのパーツを登録を続けます
  2. edukitの中のseフォルダを開く
  3. lupse2を効果音のGetSound
  4. tickを効果音のTick SEsound
    (※画像では”script”となるべき部分がgamecontrollerになっています)
  5. 次に音再生の準備をする
  6. scriptを選択Component>Audio>Audio Source を選択する
  7. scriptAudio Sourceが追加されます
  8. Audio Sourceは音再生装置と考えてくださ
  9. これでscriptの準備は終わり

FPSControllerへスクリプトを追加する

  1. カメラのついているFPSControllerは,衝突判定にも使用できる
  2. edukitの中のhitObjSenderInspectorにアサインする
  3. hitinfo
  4. このスクリプトはプレーヤー(つまりFPSController)に,当たったColliderが何なのかを,scriptに送るプログラムである
  5. ゲームを再生し,チェックポイントへ向かい,音が出るか,時間表示は適切かなどを確認する

シーン遷移の準備

  1. File>Build Settings… を選択
  2. Add open sceneをクリックし,ビルドするシーンの一覧に現在のシーンを追加するbuidset1
  3. edukit内のopとendも追加し,edu/opのシーンが最上段にくるようにドラッグして移動させるbuild2
  4. BuildeSettingsのウインドウを閉じたあと,シーンを保存しておく

シーン遷移情報の設定

  1. edukit内opを開く
  2. opScriptを選択し,メインシーン名にゲームのメインシーン名を入力する(各自異なるので注意.画像例は02)opscne
  3. 保存し,ゲームを再生してみる
  4. ゲームスタートボタンが押せない場合、Canvas展開しsetsumeiPanelオフにするか(説明文が書けない),setsumeiPanelとその子のsetumeiのRaycast Targetをオフにする(パネルを残してマウスクリックを無視する設定)

レベル調整

  1. 何度かテストプレイし遊びやすく調整する
  2. また,プレイしたことのない人に遊んでもらい,難易度を調整すること
  3. 特に容赦のない他人や子供はバグ取りに最適です
  4. オープニング→ゲーム→エンディング と1周する状態になりバグも出ないようであればビルドを実行する
  5. File>Build SettingsでBuild Settingsの画面を開き,Buildをクリックする
  6. 保存先を設定すればビルドが開始される
  7. ビルドが成功したら,早速アプリを実行してバグがないか確認すること

提出について

  1. ビルド後,Mac版は1つのファイルが作成されるが,Windows版はアプリとそれが使用するファイルの入ったフォルダが作成される
  2. 提出時の際Windows版はアプリとそれが使うフォルダの2つを提出する必要があるので注意

おかしいとおもったら

  • なにかひっかかる感じがする>自分の位置を示すマーカー(白い球)が木などにひっかかっているかも.球のColliderのチェックを外すか,Yの値を上げてみる
  • 歩く音が出なくなった>マップビュー用のカメラにもAudioListnerがついているのが原因,歯車のアイコンでRemove Componentしましょう
  • 時間が0秒以下になってもゲームできてしまう>仕様です 時間に余裕をみてこのバグを取る回を設けたいと考えています

次へ

Unity入門-10 ゲーム化の準備(1)

概略

  • 複数シーンをまたぐゲーム化をおこなう
  • 今回は作成手順を理解するため,スクリプトは提供されたものを使用する

準備・パッケージの読み込み

  1. スクリプトなどが入ったedukit2.unitypackageをダウンロードする(ダウンロードはここから)
  2. Assets>ImportPackage>Custom Package… でダウンロードしたパッケージを読み込むimport
  3. Asset内にedukitというフォルダが作成される

タグの準備

  1. チェックポイント(今回はCube)を作成しフィールド内に配置する
  2. チェックポイントを選択し,InpsectorのタグからAdd Tagを選択
    addtag1
  3. タグとしてpointObjを追加するaddtag2

チェックポイントの準備

  1. 再度Isnpectorに戻り,作成されたタグpointObjを選択する
  2. BoxColliderIsTriggerにチェックを入れる(衝突しないですり抜けられるようになるり,トリガー=きっかけ を発生させることができる)
  3. マップビュー用のマーカーをチェックポイントの子にする
    cubeedit
  4. これを4回繰り返し,チェックポイント5個作成する (ただし以後は1個のみで説明しています)

スクリプトを空のオブジェクトに配置する

  1. Gameobject>Create Empty で空のオブジェクトを作成し名前をscriptにする
  2. Asset内にある(さきほど読み込んだ)Edukit>myQuest をscriptにアサインするaddscript
    (※画像ではscriptであるべき部分がgamecontrollerになっています)

解説

  1. GameObjectにどんなコンポーネントをアサインするかでそのオブジェクトの性質が変わる.カメラコンポーネントをアサインすればカメラに,Meshfilterをアサインすれば3Dオブジェクトに,今回はスクリプトだけをアサインしている
  2. この「空のオブジェクト」は便利な入れ物と考えてよい.CGソフトではNullや,ロケーターと呼ばれている

UIprefabを配置する

  1. Asset内にある(さきほど読み込んだ)Edukitの中のUIprefabをヒエラルキーにドロップします
  2. ゲーム画面にするとUI(ユーザインタフェイス)が表示されます
  3. このPrefabの中身は次の項目で使用します
  4. なおUIについてはこちらも参考に

スクリプトにパーツをアサインする

  1. 再びscriptを選択し,Inspectorに以下のような入力をする
  2. 経由地の数は5(半角)
  3. カウントダウンの初期時間は180(半角)
  4. UIprefabを展開し,対応するパーツ(下図参照)をアサイン
  5. エンディングのシーンにend(半角)と入力partsassign
    (※画像では”script”であるべき部分がgamecontrollerになっています)

つぎへ

 

 

Unity入門-9 ゲームフィールドの改善

コライダの設置

  1. 現在は地形の端に行くと世界の果てに落下するが,これを防ぐために衝突判定用のオブジェクト=コライダを設置し,それ以上先に進めないようにする
  2. まずCubeを作成し,Terrainを囲むように設置する
  3. 囲んだCubeのMeshRendererをオフにする。これで面が表示されなくなる
  4. この時,Box Colliderはそのままにする(これがコライダ)collider
  5. 緑の線(コライダ)だけが残るcollider2
  6. このコライダは衝突判定のための形状で,同様にカメラが搭載されているFPSControllerもColliderを持っているため互いにぶつかってこの壁を通れない
  7. これを応用すれば水の上も歩行可能になる
  8. 実際には地平線の先が見えないように,周囲は山を高くするなどしてユーザが没入できるような工夫が必要

カメラの視程を調整

  1. カメラの視程を調整し余計な部分が見えにくいようにする
  2. ゲーム画面のカメラはFirstPesonControllerにアタッチされている
  3. CameraのClipping PlanesのFarを100程度にする
  4. これで最短距離0.3m〜100mの範囲だけが描画されるようになるshitei

霧を出現させる

  1. Window>Lightingを選択
  2. Scenesを選択
  3. FogをONにする
  4. Fogを下図のように調整するkasumi

次へ

Unity入門-8 マテリアルなどの設定や応用

レイヤーで不要な表示を消す

  1. マップビュー用に作成したマテリアルが水面に反射してしまう
  2. これはCameraのレイヤーに関わりなく,(WaterProDaytimeを出していれば)WaterProDaytime全てのレイヤーを反射しているからである
  3. そこでWaterProDaytimeを選択し,Reflect Layersの中からmarkerのチェックを外すと水面にも表示されなくなりますrefrect

マテリアルその3 NormalMapをアサインする

  1. マテリアルにはノーマルマップ(法線マップ)をアサインできる
  2. GameObject>3D Object>Cube で立方体を作成するmatnormal
  3. Asset内に空のマテリアルを作成し(Asset右クリック>Create Material),分かりやすい名前に変更する
  4. 作成したマテリアルを選択し,InspectorのAlbedoの左にある○をクリック
  5. Select Texture画面が開くので,上段の検索フィールドにmudと入力すると,MudAlbedoSpeculraTextureが表示されるので,選択をする
  6. 次にNormal Mapの左の○をクリックし,同様に検索語にmudを入力し,MudRockyNormalが表示されるのでこれを選択する
    normal2
  7. 作成されたマテリアルをさきほど作成したCubeにアサインするnormal3
  8. 6ポリゴンしかないCubeが一見して超ハイポリゴンに見える
  9. 見た目の形状が変わっているため,光源が変化すると影も変化するnormalshado

Normal Mapとは

  1. 計算資源に限りのあるスマートホンや携帯ゲーム機といったデバイスには,距離などによってローポリ/ハイポリのモデルを切り替えるLOD( Level of Detail)を利用したり,Fogや視程を下げるなどして狭い範囲だけ描画するなどしている
  2. Normal Mapはポリゴンの表面にある法線を画像で指定する方法で,少ないポリゴンでも見た目を細かく見せることができるため,皮膚や服のシワ,壁や地面といった部分に使用される
  3. このNormal Mapは自分でも作成でき,画像などを加工してもそれなりなものを作成できるため,出かけた際は地面や壁や屋根の写真を撮影することをお勧めする

つぎへ