週末プログラミングで作るカジュアルゲーム~レーシング編~
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

週末プログラミングで作るカジュアルゲーム~レーシング編~

  • 18,911 views
Uploaded on

【増員】【#TechBuzz】#Unity Study 12th Asset Storeに出す為のUnity拡張入門 / 週末プログラミング / カジュアルゲーム(レーシング編) / ある個人事例 / サウンドにこだわる ...

【増員】【#TechBuzz】#Unity Study 12th Asset Storeに出す為のUnity拡張入門 / 週末プログラミング / カジュアルゲーム(レーシング編) / ある個人事例 / サウンドにこだわる

http://atnd.org/events/35237

の発表資料。

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
18,911
On Slideshare
18,755
From Embeds
156
Number of Embeds
2

Actions

Shares
Downloads
96
Comments
0
Likes
6

Embeds 156

http://baba-s.hatenablog.com 153
https://twitter.com 3

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 【 #TechBuzz 】 第 12 回 Unity 開発技術勉強会>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 2. 週末プログラミン グ で作る カジュアルゲーム 10 レーシング編 のひな>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 3. >> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 4. PICTURE START>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 5. >> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 6. 8>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 7. 7>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 8. 6>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 9. 5>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 10. 4>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 11. 3>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 12. 2>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 13. >> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 14. (= ・ ω ・)ノ<はじめ るよ~>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 15. じこしょうかい ( `・ ω ・ ´) 名前:のひな 六本木の会社で エンジニアやってます。 お仕事でも趣味でも Unity な日々。>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 16. 今日話すこと • 開発事例 – レーシングゲームのはなし 今回はどっちかというと初学者~中級者向け 細かな開発 Tips まとめ>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 17. じゃあ早速、>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 18. >> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 19. レーシングゲームのはなし>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 20. Accel Beat • 障害物を避けなが ら車を運転し、走行 距離を競うゲーム • 所謂ランニング系 のジャンル>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 21. Accel Beat • ダウンロード数 – 2万 DL くらい • ランキング – 最高 19 位くらい • iPad のレーシング カテゴリで>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 22. こんせぷと • デザイナ・エンジニアの二人で開発 • 1回のゲーミングが 60 ~ 90 秒くらいで 終わって、繰り返し遊んでもらう設計 • 片手で遊べるカジュアル感 • 演出にちょっとだけこだわる • でも、飽きちゃわないように1~2ヶ月 くらいで作り切る感じで(・3・)>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 23. Main のループの流れ • 基本的にはひとつのコースをループする • スタート地点からコースの端までたどり 着いたら、最初の地点に戻ってループす る>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 24. ステージ>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 25. ステージ • 基本的にはひとつの コースをループする – コースは全長 500m の ものを制作 – これをつなげていくこ とでステージにする • 今回は1レベル 3000m にしたので 3000m と前 後 3500m くらい>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 26. ステージ • 背景は SkyBox は利用しない – DrawCall がかかるのと思い通り の見た目にならなかったため • 背景専用のオブジェクトを用 意する – 1つのステージをループするとい う性質のため、自機の数百 m 先 に常に設置されるようにする • メモ:カメラワーク的に後ろを向 くことはないため、前方のみカバ ーすれば良い>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 27. ステージ • アニメ調な演出 – トゥーンシェーダ を基本的に用いる • Ippokratis Bournellis の Toon Shader($25.0) を 利用>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 28. ステージ • アウトラインの当て方 • 建物など板ポリゴンで表現するものは CutOut 系のシェーダを利用 – 今回は Transparent/CutOut/Soft Edge Unlit を 利用 – Base Alpha cutoff のパラメータを調整してや ることで、アウトラインを表現する • ガードレールなど、一部のオブジェクト は直接テクスチャにアウトラインを書き 込む>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 29. キャラクター>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 30. キャラクター • 基本的に画面上には一瞬でし か現れないので、認識できる 程度にローポリで制作 – けっこう雑に制作 • ステージ同様トゥーンシェー ダを利用する>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 31. キャラクター • 男性は少し工夫 – 髪型 • 板ポリゴンを何枚も重ねて アフロを表現 • トゥーンシェーダを利用す ると板ポリゴンのまわりに アウトラインを描いてしま うため、髪の毛だけはマテ リアルを分ける>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 32. レベル>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 33. レベル • 1レベル 3000m として 、車や歩行者、ドラム 缶などのオブジェクト を配置する • これをコース中にロー ドすることで、レベル とする – 今回は計 30 ( 90Km 分 )のレベルをランダムに ロードしている>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 34. レベル • ゲームの起動時と、自機をループした直 後のタイミングでロードする – ロードする場所はコースの終了地点より奥の 方 • コース内にロードすると、ループのタイミングで 急に出現したようになり、不自然な挙動となるた め • 事前にあったオブジェクトはループの際 に、自機と一緒にコース内に移動する – このとき、自機より後ろ側に行ったオブジェ クトはもう利用する必要がないため Destroy>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 35. ループの判定 • 最初はコースの終了地点に透明な BoxCollider を置いていた – 自機の移動速度によっては飛び越えて衝突し ないことがあったため断念 • コースの全長分以上の距離を走行したら 、戻るように変更 メモ:方法としては Collider に対して Raycast でも可>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 36. ポーズのしかた • 全オブジェクトに対して、以下の処理を かける = rigidbody.velocity; TempV TempAV = rigidbody.angularVelocity; rigidbody.velocity = Vector3.zero; rigidbody.angularVelocity = Vector3.zero; • アンポーズした際に、テンポラリに保存 した定数を rigidbody に戻してやる – ついでに isKinematic をオンにしておいた方 が安全かも>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 37. GUI • ほぼフォントで表現 – OverDrive というフリーのフォントを利用 • 一部画像 – エナジーバーとか • 下地 / バー / フレームの3階層 – ちなみにバーは 1 ピクセルの画像を条件に応じて拡縮して表現 • 他の UI との競合がありうるため – isTapGUI とかして判定用のメソッドも作っておく>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 38. 車>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 39. 車 • こちらも同様にトゥーンシェーダを用い る • 一部のアウトラインはテクスチャに直接 描き込み>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 40. 車 • マフラーからの噴出物 –煙 – アフターバーナー • パーティクルを置いてパラメータを調整するだけ>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 41. 自機の挙動 • 基本的にはつねに前方移動、インプット があったときのみ左右のいずれかを向く – 単純に移動方向に対して以下を適応 transform.position += (transform.forward * speed * Time.deltaTime); – 移動方向の算出も単純に以下のような感じ transform.Rotate(Vector3.up * curveSpeed * Time.deltaTime);>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 42. 自機の挙動 • 基本的には BoxCollider • 念のため Raycast も • Rigidbody の設定 – Constrains を Position.x 以外すべて Freeze する • ゲームの性質上、衝突時に跳ねたり、後退したり、向きが変 わったりということをしたくない • ただし、 Position.x だけはフラグを外す(左右の跳ね返りは 許容する) – これをやらないと壁への衝突時などに、物体に刺さって動かな くなるという現象が起きる>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 43. 自機の挙動 • オブジェクトとの衝突時 – 衝突したオブジェクトを前方に跳ね飛ばす • これも単純に以下のような処理を加えているだけ Velocity movement = transform.forward; movement.y = Mathf.Sqrt( movement.x * movement.x + movement.z * movement.z) * Mathf.Tan(Mathf.Deg2Rad * direction); movement = movement.normalized; targetObj.getComponent<rigidbody>().velocity = movement * driveSpeed * shotPower;>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 44. ポリスの挙動 • 基本的なロジックは自機と一緒 • 走行速度と移動方向だけ工夫して、単純な AI で 自機を追いかけるようにする – 走行速度 • 自機の速度に対して -1.5Km/h~+3.5Km/h くらいの速度で追 いかける – じわじわと追いついて来るような感じ – 移動方向 • 自機とポリスの x 軸の差が 5m 以上あれば、自機の方に向か って旋回する – 基本的には自機に衝突するように移動>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 45. 衝突時の爆発 • Unity Technologies の Detonator Explosion Framework を利用>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 46. おまけ • アイテムは演出上目立 つようにアウトライン を少しだけ派手にする – アウトラインはオブジ ェクトのまわりに、同 じオブジェクトを拡大 して法線をひっくり返 したものを配置して表 現する>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 47. おまけ • キャラクターに衝突すると漫画のコマの ようなポップアップで演出>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 48. おまけ • サウンド – SE は Resources.Load() で呼ぶとと重たいので、事 前に GameObject に貼り付ける – シーンをまたぐ直前に鳴る効果音は DontDestroyOnLoad() して、鳴り終わったら Destroy() する • バイブレーション – iPhoneUtils.Vibrate() が非推奨になったの で、 Handheld.Vibrate() を使いましょう>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 49. とまぁ、>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 50. 雑に詰め込みましたが>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 51. こんな感じ。>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 52. 参考になってたらいいけど。。 。>> 0 >> 1 >> 2 >> 3 >> 4 >>
  • 53. 以上です!ありがとうございま した。>> 0 >> 1 >> 2 >> 3 >> 4 >>