おでんブログ

ゲームデザイナーな自分がUE4でつまづいたところを記録していくブログ

NinjaFoxRun Privacy Policy

Privacy Policy

Kenji Tokumaru built the NinjaFoxRun app as a Free app. This SERVICE is provided by Kenji Tokumaru at no cost and is intended for use as is.

This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal Information if anyone decided to use my Service.

If you choose to use my Service, then you agree to the collection and use of information in relation to this policy. The Personal Information that I collect is used for providing and improving the Service. I will not use or share your information with anyone except as described in this Privacy Policy.

The terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, which are accessible at NinjaFoxRun unless otherwise defined in this Privacy Policy.

Information Collection and Use

For a better experience, while using our Service, I may require you to provide us with certain personally identifiable information. The information that I request will be retained on your device and is not collected by me in any way.

The app does use third-party services that may collect information used to identify you.

Link to the privacy policy of third-party service providers used by the app

Log Data

I want to inform you that whenever you use my Service, in a case of an error in the app I collect data and information (through third-party products) on your phone called Log Data. This Log Data may include information such as your device Internet Protocol (“IP”) address, device name, operating system version, the configuration of the app when utilizing my Service, the time and date of your use of the Service, and other statistics.

Cookies

Cookies are files with a small amount of data that are commonly used as anonymous unique identifiers. These are sent to your browser from the websites that you visit and are stored on your device's internal memory.

This Service does not use these “cookies” explicitly. However, the app may use third-party code and libraries that use “cookies” to collect information and improve their services. You have the option to either accept or refuse these cookies and know when a cookie is being sent to your device. If you choose to refuse our cookies, you may not be able to use some portions of this Service.

Service Providers

I may employ third-party companies and individuals due to the following reasons:

  • To facilitate our Service;
  • To provide the Service on our behalf;
  • To perform Service-related services; or
  • To assist us in analyzing how our Service is used.

I want to inform users of this Service that these third parties have access to their Personal Information. The reason is to perform the tasks assigned to them on our behalf. However, they are obligated not to disclose or use the information for any other purpose.

Security

I value your trust in providing us your Personal Information, thus we are striving to use commercially acceptable means of protecting it. But remember that no method of transmission over the internet, or method of electronic storage is 100% secure and reliable, and I cannot guarantee its absolute security.

Links to Other Sites

This Service may contain links to other sites. If you click on a third-party link, you will be directed to that site. Note that these external sites are not operated by me. Therefore, I strongly advise you to review the Privacy Policy of these websites. I have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party sites or services.

Children’s Privacy

These Services do not address anyone under the age of 13. I do not knowingly collect personally identifiable information from children under 13 years of age. In the case I discover that a child under 13 has provided me with personal information, I immediately delete this from our servers. If you are a parent or guardian and you are aware that your child has provided us with personal information, please contact me so that I will be able to do the necessary actions.

Changes to This Privacy Policy

I may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. I will notify you of any changes by posting the new Privacy Policy on this page.

This policy is effective as of 2025-12-31

Contact Us

If you have any questions or suggestions about my Privacy Policy, do not hesitate to contact me at k.marutoku@gmail.com.

This privacy policy page was created at privacypolicytemplate.net and modified/generated by App Privacy Policy Generator

ゲームデザイン勉強ログ:シナリオ①コンフリクト

ゲームデザインの勉強をログとして残していく第1弾

シナリオはゲームデザインに大きく影響を与えていると思っていて、でもこれまできちんとシナリオについて学ぶことがなかったので、映画やゲームを体験しても「あー面白かった、ストーリー良かったなー」くらいの感想しか言えてませんでした…

シナリオって、当たり前ですが、特にレベルデザインには大きな影響を与えています。

たとえば、主人公が村人で村はずれの森で不思議な剣を手に入れ、突如襲い掛かってきたモンスターを倒す、というシーンがあるとき、レベルデザイナーはステージは森で主人公は初めて手に入れた剣で戦うことを前提にレベルを組みます。しかもそこは出発の村のはずれにあるので、村とダンジョンの関係性が保てるような、例えば牧歌的な森をデザインしていくでしょう。登場する敵も小動物のような雑魚モンスターが定番になりそうです。

シナリオはゲームの出来を左右する大きな要素でもあり、僕自身が興味を持っている範囲なのでちょっと勉強してみます。今回は、シナリオについてきちんと解説してくれているいい本を見つけたので、それを読みながらここに書き残していこうと思います。

 

参考図書:Video Game Story Telling (Evan Skolnick著)

コンフリクト

僕がシナリオ初心者だったのでこの概念については初耳でとても新鮮でした。こんな考え方をしてストーリーを読み解いた経験がありませんでした。

コンフリクトは日本語にすると「戦い、争い」となりますが、「衝突」や「障害」と捉えたほうが分かりやすいです。

コンフリクトとは「誰かが、何かをしたい、欲しい、必要だと思っていてが、その前に障害が立ちはだかっている状態」です。

例えば、バックトゥザフューチャーで、過去に戻ってしまったマーティは元の時代に戻りたいと考えますが、タイムマシンに必要な電力がその時代では手に入らない。

ゲームのトゥームレイダー(2013)では、奇妙な島から仲間を連れて脱出したいララ・クラフトですが、島のこれまた奇妙なカルト集団が彼らを捕まえてしまいます。

また、スーパーマリオブラザーズ2では(シナリオとしては語られることはありませんが)ピーチ姫を助けるためにマリオは右に進みますが、道中には落とし穴やクリボーなどの敵キャラクター障害として立ちはだかります。

といった具合で、コンフリクトにおける障害は、人物だけでなくその場の状況や環境、なんでもあり得ます。

では、良いコンフリクトと悪いコンフリクトの違いは何でしょうか?

それは障害が大きいほど良いコンフリクトになります。敵が強大で一見して太刀打ちできないほどの悪役がいると、ストーリーは大きな展開を見せます。ただし、コンフリクトのスケールの大きさが強いストーリーを生むわけではありません。街を襲うゾンビ、地球に落ちる隕石、銀河を支配する大宇宙帝国、それぞれスケールは大きいですが、それがストーリーの良さに直結しているわけではありません。この差はキャラクターがどれだけ大きな障害として感じているかによります。ストーリーを体験する私たちは人間なので、数千の人の命がかかわるスペクタクルなストーリーよりも、一人の人間の感情が大事なのです。

スターウォーズは銀河を舞台にした大きなスケールの物語ですが、ピクサーインサイドヘッドは小さな少女の頭の中で起きるお話で、どちらも素晴らしいストーリーになっています。

 

ヴィランのコンフリクト

コンフリクトは主人公にだけ必要なものではありません。主人公が対峙するヴィランにも必要です。彼らが求める混沌とした世界を、主人公は平和な世界に変えてしまうので、彼らは主人公を倒そうとします。

ではヴィランが悪事を働くのはなぜでしょうか?誰も悪事をしようとして悪を働く人はいません。お金が必要で盗みを働くキャラクターには共感できても、盗みを働こうとして盗みを働く人にはなかなか共感できないものです。

 

ゲームにおけるコンフリクト

ゲームの主人公はプレイヤーです。ドラゴンクエストの物語の中では主人公は勇者ですが、その勇者はプレイヤーが操作しています。プレイヤーにとっての目標は何でしょうか?それを妨げているものは何でしょうか?

プレイヤーにとっての目標はゲームのクリアです。そのクリアを妨げているのはゲームが提示するゲームプレイでしょう。ドラゴンクエストで言えばワールドマップで出現する数々の敵キャラクターや魔王ですね。プレイヤーは襲い掛かるモンスターを文字通り倒し、成長して最後には魔王に打ち勝ちます。

 

 

NinjaFoxRun

NinjaFoxRun

Android版 NinjaFoxRunをリリースしました。 

f:id:marutoku-oden:20210403171128j:plain

(English follows)

遊び方

プレイヤーはキツネの忍者となって敵城を駆け抜けていきます。

画面を上下にフリック入力すると上下に移動

右にフリック入力すると右へと突進攻撃

左は走るスピードが上がります。(より早く距離を稼げます)

 

Tips

  • 敵の投げるクナイは上下移動の攻撃をうまく当てると跳ね返せます。
  • 反対を向いたバリケードにSlashAttackをするとバリケードがはじけてクナイをまき散らします。

 

 

How to play

Player is a Ninja Fox and run through a big enemy castle.

Flick up or down, the player go up or down.

Flick right, the player attacks toward right.

Flick left, running speed of him increase. (you can reach far place faster)

 

Tips

  • You can parry the knife thrown by the enemy with your go up/down attack.
  • If you do slash attack toward a barricade directed to right, the barricade spread knives.

 

【UE4】Paper2Dで攻撃コリジョンと被ダメコリジョンを同時に扱うには

Paper2DのSpriteって複数のコリジョンをつけても個別に判定ができない。だから、これは被ダメ(身体用)とか、これは攻撃(武器)とかの判定ができない。

でどうするかを考えていたんだけど、

被ダメ用と攻撃用でSpriteを分けて、重ねて表示する

のがよさそうだった。

↓のような感じで、被ダメ用のコリジョン(左)と、攻撃用のコリジョン(右)の2つのSpriteを用意して重ねて表示する。Spriteは絵がなくても(Textureの指定なし)でもエラーは起きなかったので、攻撃コリジョン側はコリジョンだけのSpriteにできる。

とはいえ絵がないとコリジョンはつけづらいので、元のSpriteを複製してコリジョンをつけてからTextureをクリアすればOK。またコリジョンをつけなおしたいときはTextureをいったん復活させれば元に戻る。

f:id:marutoku-oden:20210216181524p:plain f:id:marutoku-oden:20210216181643p:plain

 

Spriteを二つに分けると↓のようにそれぞれ別で判別できるようになる。

Sprite(Sprite0)→被ダメ用

AttackCol→攻撃コリジョン

f:id:marutoku-oden:20210216182007p:plain

Overlapもそれぞれで判別できるようになる。
f:id:marutoku-oden:20210216181936p:plain

FlipBookでアニメーションさせている場合は、本体のアニメーションに合わせて攻撃コリジョン側のFlipbookもフレームを合わせる必要があるし、再生タイミングもきっちり揃えないとタイミングがずれちゃうかも。

↓本体のアニメーションと同じタイミングで攻撃コリジョンを切り替える必要がある。

f:id:marutoku-oden:20210216184603p:plain f:id:marutoku-oden:20210216184633p:plain

(NoCol_Spriteはコリジョンも表示もないスプライト。攻撃コリジョンが出てない間はこれを指定している)

格闘ゲームの前ジャンプをゲームデザイン的に解体してみる

僕はこれまでゲームデザイナーとして10年ほどアクションゲームの開発に携わってきた。特にゲームデザインとはなんぞやと学校で学んだことはなく、現場にいて先輩や実戦経験から学んできたことばかりで、体系的にそれらの学びを整理できてきていなかった。せっかくこういうブログを始めたので、自分の頭の中の整理をするためという名目で(稚拙な文章の言い訳にしたいだけだけど…)これまでの学びを書き残していこうと思う。もちろん所属している会社には気を遣うので出せない情報も多いが。

 

ゲームデザインに関してはこれが初めての投稿になるので、自分が好きな格闘ゲームについて書こうと思う。

 

友達の家でストリートファイター2を初めてプレイして、友達とリアルファイターに発展したことは小学校の良き思い出である。当時は友達の執拗な下段攻撃にとてもイライラしていた。

そこから全く格闘ゲームに触れることなく、最近になって仕事上の研究という大義名分で会社でストリートファイター5をプレイしていた。それがきっかけでハマり、今では自宅でプレイするようになってオンラインプレイでそれなりのランク(プラチナ)に到達できた。そこまでには3年ほどかかったが、これほどのめり込んで長く続けたゲームは自分史上でもほとんどない。

 

なぜここまでハマったんだろうか。

対戦格闘ゲームは何が面白いのだろうか?

 

なんて問いをしたら壮絶な議論が巻き起こって到底僕の手には負えない。

なので一人のゲームデザイナーとして、極限まで絞った要素について考えたい。

僕が格闘ゲームで大きな要素(アクションゲーム全体においてともいえる)だと思っているジャンプ。それも「前ジャンプ」に絞ってみる。

 

ストリートファイターは有名なゲームだし、細かいゲームルールについては割愛。

 

前ジャンプの仕様はこんな感じ。

  • 前斜め上方向にスティック入力すると前ジャンプを行う。自分が左、相手が右にいる場合は右斜め上方向(格ゲー用語でいう9)。
  • 前斜め上方向に高く飛び上がって放物線を描き、着地する。
  • 基本的に同じキャラクターなら常に同じ高さ、同じ移動量のジャンプになる(画面端に向かって前ジャンプした場合はそれ以上進まない)。

細かいことを書いていけばきりがないのでこの辺にしておく。アクションとしてはかなりシンプルじゃないだろうか。マリオのようにボタンを長く押すほど高く飛ぶわけでもないし、移動速度によって距離が変わるわけでもない。何度ジャンプしても基本的には同じ高さ、距離になる。入力もジャンプしたい方向にスティックを入れるだけだ。

 

しかし、ストリートファイターのジャンプはとてもシンプルなアクションだけど、このアクション一つがゲーム上でもつ意味はかなり広がりを持っている。

例えば、前ジャンプをすることで以下のようなことができる。

  1. 相手にジャンプ攻撃する
  2. 相手にめくりジャンプ攻撃する(相手のすぐ後ろに着地するようにジャンプ攻撃することで、相手と位置を入れ替えながら、相手の背面を攻撃する。防御しづらい)
  3. 相手を飛び越えて位置を入れ替える
  4. 素早く前に移動する(前に歩くよりも早い)
  5. 相手の攻撃をかわす
  6. 相手の対空攻撃を誘う

このように、「前ジャンプ」ひとつのアクションでさまざまな戦略的な意味を持つ行動が取れるようになっている。

相手との位置の入れ替えは、自分が画面の端に追い詰められている状況では大きな意味を持つ。危険な画面端から逃げ出すのだ。また、爆弾などの設置型の攻撃を持つキャラクターにとっては、位置を入れ替えることで相手にガード方向を混乱させる意味も持っている。

また、ストリートファイターではジャンプ攻撃が強力なため、相手も対策をとってくることが多い。そこで相手の反撃がギリギリ届かないような距離でジャンプすることで、反撃をスカして自分の攻撃を当てることができる。対策の対策だ。

現実世界の誰かと対戦することが前提のゲームなので、これらのアクションが駆け引きとしての意味を自然に持ち合わせている。一つのアクションが相手に与える意味は対戦相手や状況によって無限に広がっていくのである。

これらはすべて一つのアクションが持っている戦略だ。このように一つのアクションが複数の意味を持つことが面白いアクションゲームにおいて必須な要素だと僕は思っている。

 

もうひとつ、同じようにスーパーマリオブラザーズ2のジャンプを考えてみるとこれも傑作だ。世界でもっとも有名なビデオゲームを分析するなんて恐れ多くて非常に勇気がいるが…

仕様としてはこんな感じだろうか

  • Aボタンを押すとジャンプする。
  • 押している時間が長いほど、ジャンプの高さが高くなる(限界はある)。
  • マリオの横方向の移動速度によってジャンプの移動量が変化する。
  • ジャンプ中も多少の位置調整ができる。

そしてこのアクションでできることもかなり多い。

  1. 敵を飛び越える
  2. 敵の攻撃をよける
  3. ダメージを受けるギミックをよける
  4. 敵を踏みつける
  5. 亀の甲羅を滑らせる
  6. 奈落を飛び越える
  7. 段差に上る
  8. 空中のブロックを壊す
  9. 空中のブロックの上にいる敵をやっつける
  10. 飛び跳ねるスターをゲットする
  11. ゴールフラッグに飛びつく

ざっと出しただけでもこれだけある。マリオのジャンプはまさに発明で、一つのアクションでプレイヤーは様々な戦略をとることができるようになっている。マリオはゲーム側が用意したステージをクリアしていくゲームなので、ジャンプに持たせる意味はゲーム側の敵やギミックによって表現されている。積み木のブロックのように、一つのアクションでいろんな遊びかたができるような遊び場が作られているのである。

ストリートファイターやマリオに共通しているのは、これらのアクション自体はとてもシンプルだけれども、そこから生まれる戦略的な効果が枝分かれして使い道がたくさんあるということだ。

また、プレイヤーが開発者の意図を超えたアクションの使い道を発見して、より戦略性が増すようなケースも珍しくない。現にストリートファイターのめくり攻撃は最初プレイヤーが発見したものだ。

 

Jesse Schell著の「ゲームデザインバイブル」ではこれをエマージェントゲームプレイと呼んでいた。ジャンプを基本アクション。ジャンプによってできる意味を持ったアクションを戦略アクション。戦略アクションが偶然的に生まれていくようなゲームプレイをエマージェントゲームプレイと呼び、面白いゲームには欠かせないものとしている。Emergentは「現れる。創発。新興の」という意味。

 

ストリートファイターのジャンプもマリオのジャンプもこれにぴったりと当てはまっているように思う。

これから、ゲームのアクションを考えるときはシンプルな操作になっているか、それが生むゲーム上の意味はたくさんあるのか、常に意識してアイデアを出していきたい。

 

参考

https://kakuge.com/wiki/pages/%E3%82%81%E3%81%8F%E3%82%8A

Jesse Schell著「ゲームデザインバイブル」 

 

 

2Dキャラクター同士が衝突しない

Paper2Dを使っていてつまづいた箇所

てっきり、Spriteにコリジョンを設定しておけばキャラクターのコリジョンはOKだと思っていたのに、なぜかOverlapもHitもできない… キャラクターアニメーションのすべてのフレームにコリジョンを設定しているのに…

 

SpriteだけではなくFlipbookのコリジョンを設定してあげる必要があった。

Flipbookの詳細タブのCollision Sourceを変えてやればOK。

f:id:marutoku-oden:20210126210410p:plain

Each Frame Collisionにしてやれば、フレームごとに形状を合わせたコリジョンで判定してくれる。

 

Flipbookをループさせない

2Dゲームを作るのに便利なFlipBookをループさせないで再生する設定

f:id:marutoku-oden:20210126115026p:plain

Set Loopingのチェックを入れずにセットするとループしなくなる

けど、ただセットするとループさせたいアニメーションもループしなくなるので使い分けるようにしたい。本当ならアセット(FlipBook側)にその情報を埋め込みたいところだけど…

 

そこで↓

f:id:marutoku-oden:20210126115920p:plain Animationをアップデートしているところでどのアニメーションに切り替えようとしているかを判断してLoopの設定を切り替える。

それでも、アニメーション切り替え後になぜかアニメーションが1フレーム目でとまってしまうので、アニメーションを切り替えたかどうか(Set Flipbookのoutput)を見てPlayを実行。