AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

UIの練習(2)

スクロールビューに引き続き、次は
UnityのuGUIとImageとSpriteとスライスについて - テラシュールブログ
こちらをやってみました。
windowのフレームに成るような画像を用意して、それをコーナーと間にspriteEditorで分割する仕組みです。

f:id:yasu9780:20150530082923j:plain
分割したら忘れずにapplyを押します。

このフレームを前回のScrollViewに適用してみました。
ScrollViewのcomponentのImageのSourceにSpriteEditorで分割したSpriteを登録します。
ImageTypeをSlicedにします。
PrefabのNodeの文字が黒だと読みにくいので、白にして、UIのEffectで黒枠文字にします。

f:id:yasu9780:20150530082917j:plain

おー。

AmazonでKindle本が50%還元中

oshimago-unity.hatenablog.com

 こちらを読んで気づきましたが、AmazonKindle本を50%ポイント還元中みたい。
 6/1までらしい。
 Unity関連で買いたい本が何冊かあるんですけど、半額なら買おうかと迷ってます。
 Kindleだからなー。

 個人的に狙ってるのが、uGUIの本と、Namcoの人が書いてる本と2Dの3冊が欲しい。

Unityではじめる2Dゲーム作り徹底ガイド スマートフォンでも遊べる本格ゲーム開発に挑戦

Unityではじめる2Dゲーム作り徹底ガイド スマートフォンでも遊べる本格ゲーム開発に挑戦

Unityゲーム開発 オンライン3Dアクションゲームの作り方

Unityゲーム開発 オンライン3Dアクションゲームの作り方

↑三冊ともKindle版を購入
ただポイントってすぐ付与されるわけじゃないのね。しばらくかかるのかな?
付与されたら、もう一冊買えますね(ゝω・)

amazon4000ポイントキタ━━━━(゚∀゚)━━━━!!

上記3冊に加えて、進撃の巨人最新刊も買いました。
いつもはレンタルですが、レンタルが読めるように成るまで何ヶ月もかかるし。
本来は新刊で買って、読んだらブックオフで売るのが一番かもしれませんが
半額なら買ってみました。

UIでRPG画面作成中

UIの機能を活用して、RPG戦闘画面を作成中

f:id:yasu9780:20150530224139p:plain

Canvasに背景画像を貼って、その子要素として、MonsterNodeとPlayerNodeを追加する形。
本来なら自動レイアウト機能を活用すべきかもしれない。
ただ、モンスターも1~4ぐらいの数の差しかないので手動でもなんとかなるレベル


個人的にはこういう横向きの戦闘画面が好きです。
f:id:yasu9780:20150530224528j:plain


今は、モンスターも勇者側もPrefab個別に作ってますが、
モンスターの数だけあらかじめPrefab用意するのも面倒なんで、
Prefabは一個で、画像をscriptで差し替えて生成する方式でやってみましょう。

少女画像の素材は複数の表情があるので、SpriteEditorで96x96でSliceしてMultipleで使ってます。
Monsterは一枚絵に合成したほうがいいのかもしれませんが、今のところ個別です。



女の子の顔の素材はこちらからusui.moo.jp

モンスターの素材は、こちらからpiposozai.wiki.fc2.com

Unity 2D Roguelike Tutorial動画見たー

Unity - 2D Roguelike tutorial

こちらの動画を全体を通して見ました。
あとソースを見たり、SpriteからAnimation作ってAnimatorの遷移作る当りは実際にやってみました。

勉強になったのは、

  • GameManagerはシングルトンになっている(シーン代わっても永続)

具体的にはこんな感じ
ゲーム起動時はCameraにAddされてるLoaderがGameManagerを生成するんですが、
1面クリアあいて、2面に飛ぶ時に、シーンを再読込するので、
その時に、以下の処理を使って、GameManagerが永続するようになっている

public class GameManager : MonoBehaviour {
  public static GameObject instance=null;
  void Awake()
  {
    if(instance == null)
      instance = this;
    else if(instance!=this)
      Destroy(gameObject);
    DontDestroyOnLoad(gameObject);
  }
}
  • 動く処理は、PlayerとEnemyが継承するabstractなClassになっている

 これはかえってわかりにくい気もしますが、
 おじさんもゾンビも同じ動く所は共通してるので、共通部分をabstractで記述しておいて、
 それぞれ継承して、overrideでmethod書き換えてました。

  • Chopの後は、Idleに自動的になるので、has exit timeがOn

 これは自分がいままで間違ってた。
 これまでのAnimatorでは、例えば、蹴りをすると、timerを使って時間稼いで、
 蹴りが終わった頃に、boolをfalseにして、IDLEに遷移させてましたが、
 考えてみたら、蹴りモーションが終わったら、自動的にIDLEに遷移するようにしておけば
 Script側でtimerを持つ必要はないわけです。
 蹴りに入る場合もtriggerでいい。
 これは勉強になりました。

  • Touch処理

 これは実機で動かしてみたいですが、
 こんな感じの処理。指を動かした時に、動き始めと終わりの間の移動ベクトルから、
 左右と上下どっちに移動させるかを求めて、Playerを動かしている。

if(Input.touchCount>0)
{
  Touch myTouch = Input.touch[0];
  if(myTouch.phase==TouchPhase.Began) touchOrigin = myTouch.position;
  else if(myTouch.phase==TouchPhase.Ended && touchOrigin.x>=0)
  {
    Vector2 touchEnd=myTouch.position;
    float x = touchEnd.x - touchOrigin.x;
    float y = touchEnd.y - touchOrigin.y;
    touchOrigin.x=-1;
    if(Mathf.Abs(x)>Mathf.Abs(y))
      horizontal = x>0 ? 1:-1;
    else
      vertical   = y>0 ? 1:-1;
  }
}
  • 壁を避けて移動する処理

 自分なんかだと内部的に配列もっていて、そこで移動方向をチェックして、
 それに合わせて画像を表示する方向で考えてしまいますが、
 とくにそういう内部配列は無く、PlayerからRaycast2dを飛ばして、
 移動できるなら移動するというやり方でした。
 内部に配列持つと、画像がずれたりして、ZombieのGame作る時に苦しんだので、
 そういうものかもしれません。
 このゲームの壁は、壊せない外周、壊せる内壁、壊せない内壁に別れてます。

Rogueの歴史

unityの2D Roguelike Tutorialですが、

https://unity3d.com/sites/default/files/940x180%20Header.png


私は、Rogueというのは、本来、小部屋が通路でつながってるダンジョンを自動生成するRPGと考えてみましたが、
これもRoguelikeだとすると、定義が広いですねえ。
自動ダンジョンだとRoguelikeと考えていいのだろうか?

関連でちょっと調べたけど、

Ultima 1979発売
Rogue 1980あたり発祥説
Wizardry 1981 米国で発売
ファミコン発売 1983
ザ・ブラックオニキス 1984/1 国内初RPGゲーム
ドルアーガの塔 1984/7
ドラクエI 1986


Rogue古いですねえw
ここで面白いのがナムコの「ドルアーガの塔
ドルアーガの塔って60面あるんですが、ダンジョン型ですが、
実は、内部ではランダム生成みたいなんです。要するに自動ダンジョンです。
せっき~のゲーム屋さん ドルアーガの塔 乱数の工夫の正体


ですが、一面 seed=1、2面 seed=2みたいに、seedが固定だから、
毎回同じダンジョンが自動生成される。
あの最終面の60面はseed = 0xFFらしいw
http://image.space.rakuten.co.jp/lg01/30/0000271630/86/img9c5e45f3zik8zj.gif

この方式のメリットとして、ダンジョンのデータを持たずに済むw
もともと、敵の出現位置はランダムなので、
あとは、アイテムの場所とか、そのへんまで自動化してれば、
自動化ダンジョンのドルアーガの塔が生まれていたとしてもおかしくなかったかもしれません。


ローグライクゲーム - Wikipedia

トルネコの大冒険 不思議のダンジョン - Wikipedia

風来のシレン - Wikipedia