ゲームをつくるためのゲームエンジン。色々なものがありますが、やはり知名度もユーザーも多いのが「Unity」。とにかく簡単に物体に物理挙動を加えたり、衝突での反発などもできる。
しかし・・・これが問題。
必要な物を画面上に配置して、ロジックの部分をC#、JSで記載すればいいや・・・なんて思うとはまってしまう。
実際のゲームで考えると、最初から全ての物が配置されていることなんてない。一定の条件で敵が出てきたり、イベントが発生したりしないといけない。
そこで、「Prefab」(プレハブ)という仕組みで作成したオブジェクトをPrefabにして、そこから実際のオブジェクトとして生み出すことになる。
ここまで書くと、プログラムをやっている人にはわかるだろうけど、Prefabがクラスで、
そこからインスタンスしたものがオブジェクトということになる。
自作のクラスも作る必要が出てくるので、はっきり言ってスクリプトを書くのがメインになってくる。
まあ、それはそれで楽しいけど。
初心者向けの本などに書かれているボールを作って、床を作って動かすなんてのは簡単に出来るけど、実際に操作が入って色々な挙動を加えるとなると簡単にはいかない。
しかも、クラスやら型についても認識しておかないとスクリプトを書くのも大変。
はまってしまったのは、衝突を検出してからの動作。
自分をAとして敵をBとしてお互いに衝突した場合に攻撃を行い、ライフがなくなったら削除。という動きをやってみたのだけど、単体では良くても複数になると動きが止まるものがあった。
単純な動きでAは、右に向かって進む。Bは左に向かって進む。衝突したらお互いに攻撃。
Aの動きのなかで、衝突を検知したら呼ばれるメソッドの部分でBのスクリプトを呼んできて、LifeDownというライフを下がるメソッドを攻撃値を引数にして渡す。
ライフが0以下で自分を削除するというメソッドも追加。
それぞれのライフを自分で管理して、攻撃する側が相手のメソッドを自分の攻撃値を引数にして渡す。これのほうが管理が楽。
しかし、うまく機能しない場合がある。ほとんどは大丈夫なんだけど・・・
そこで、処理を変更。
Aの攻撃メソッドの部分で、相手のライフ値を下げるメソッドを実行するのは変更せずに、相手のライフ値を見て0以下の場合に削除するメソッドを攻撃側で実行するようにした。
処理としては、???と思うのだけど他のサイトなどでも攻撃側で消している。まあ、やってみようと。
そこで、実際にやってみるとうまくいった。
う~ん、なんか気持ち悪い。他にも出来るのではないだろうか?と思う処理はあるのだけど、Unityのドキュメントで確認しないといけないので、また今度。
そんな感じで、Unityって結局プログラミングが主体で、いつものようにAPIドキュメントを見ながらの作業。
とっかかりにはいいけど、プログラミングをやる!って意識で入っていかないと、ちと厳しい。
スポンサーリンク