SlideShare ist ein Scribd-Unternehmen logo
1 von 53
【 #TechBuzz 】
     第 12 回 Unity 開発技術勉強会




>>   0   >>   1   >>   2   >>   3   >>   4   >>
週末プログラミン
                                グ
                                で作る
                                カジュアルゲーム




         10
                                レーシング編



                                 のひな



>>   0   >>   1   >>   2   >>     3   >>   4   >>
>>   0   >>   1   >>   2   >>   3   >>   4   >>
PICTURE
              START
>>   0   >>   1   >>   2   >>   3   >>   4   >>
>>   0   >>   1   >>   2   >>   3   >>   4   >>
8
>>   0   >>   1   >>   2   >>   3   >>   4   >>
7
>>   0   >>   1   >>   2   >>   3   >>   4   >>
6
>>   0   >>   1   >>   2   >>   3   >>   4   >>
5
>>   0   >>   1   >>   2   >>   3   >>   4   >>
4
>>   0   >>   1   >>   2   >>   3   >>   4   >>
3
>>   0   >>   1   >>   2   >>   3   >>   4   >>
2
>>   0   >>   1   >>   2   >>   3   >>   4   >>
>>   0   >>   1   >>   2   >>   3   >>   4   >>
(= ・ ω ・)ノ<はじめ
            るよ~



>>   0   >>   1   >>   2   >>   3   >>   4   >>
じこしょうかい ( `・ ω ・ ´)
     名前:のひな

     六本木の会社で
     エンジニアやってます。

     お仕事でも趣味でも
     Unity な日々。

>>    0   >>   1   >>   2   >>   3   >>   4   >>
今日話すこと
     • 開発事例
      – レーシングゲームのはなし




               今回はどっちかというと初学者~中級者向け
               細かな開発 Tips まとめ

>>    0   >>    1   >>   2   >>   3   >>   4   >>
じゃあ早速、




>>   0   >>   1   >>   2   >>   3   >>   4   >>
>>   0   >>   1   >>   2   >>   3   >>   4   >>
レーシングゲームのはなし




>>   0    >>   1   >>   2   >>   3   >>   4   >>
Accel Beat
     • 障害物を避けなが
       ら車を運転し、走行
       距離を競うゲーム

     • 所謂ランニング系
       のジャンル



>>    0   >>   1    >>   2   >>   3   >>   4   >>
Accel Beat
     • ダウンロード数
      – 2万 DL くらい


     • ランキング
      – 最高 19 位くらい
          • iPad のレーシング
            カテゴリで




>>    0    >>   1    >>   2   >>   3   >>   4   >>
こんせぷと
     • デザイナ・エンジニアの二人で開発
     • 1回のゲーミングが 60 ~ 90 秒くらいで
       終わって、繰り返し遊んでもらう設計
     • 片手で遊べるカジュアル感
     • 演出にちょっとだけこだわる

     • でも、飽きちゃわないように1~2ヶ月
       くらいで作り切る感じで(・3・)

>>    0   >>   1   >>   2   >>   3   >>   4   >>
Main のループの流れ
     • 基本的にはひとつのコースをループする
     • スタート地点からコースの端までたどり
       着いたら、最初の地点に戻ってループす
       る




>>    0   >>   1   >>   2   >>   3   >>   4   >>
ステージ




>>   0   >>   1   >>   2   >>   3   >>   4   >>
ステージ
     • 基本的にはひとつの
       コースをループする
      – コースは全長 500m の
        ものを制作
      – これをつなげていくこ
        とでステージにする
          • 今回は1レベル 3000m
            にしたので 3000m と前
            後 3500m くらい


>>    0    >>   1   >>   2   >>   3   >>   4   >>
ステージ
     • 背景は SkyBox は利用しない
       – DrawCall がかかるのと思い通り
         の見た目にならなかったため
     • 背景専用のオブジェクトを用
       意する
       – 1つのステージをループするとい
         う性質のため、自機の数百 m 先
         に常に設置されるようにする

           • メモ:カメラワーク的に後ろを向
             くことはないため、前方のみカバ
             ーすれば良い




>>     0    >>   1   >>   2    >>   3   >>   4   >>
ステージ
     • アニメ調な演出
      – トゥーンシェーダ
        を基本的に用いる
          • Ippokratis
            Bournellis の Toon
            Shader($25.0) を
            利用




>>    0     >>     1     >>     2   >>   3   >>   4   >>
ステージ
     • アウトラインの当て方
     • 建物など板ポリゴンで表現するものは
       CutOut 系のシェーダを利用
      – 今回は Transparent/CutOut/Soft Edge Unlit を
        利用
      – Base Alpha cutoff のパラメータを調整してや
        ることで、アウトラインを表現する
     • ガードレールなど、一部のオブジェクト
       は直接テクスチャにアウトラインを書き
       込む
>>    0   >>    1   >>    2    >>   3    >>   4    >>
キャラクター




>>   0   >>   1   >>   2   >>   3   >>   4   >>
キャラクター
     • 基本的に画面上には一瞬でし
       か現れないので、認識できる
       程度にローポリで制作
      – けっこう雑に制作
     • ステージ同様トゥーンシェー
       ダを利用する




>>    0   >>   1   >>   2   >>   3   >>   4   >>
キャラクター
     • 男性は少し工夫
      – 髪型
          • 板ポリゴンを何枚も重ねて
            アフロを表現
          • トゥーンシェーダを利用す
            ると板ポリゴンのまわりに
            アウトラインを描いてしま
            うため、髪の毛だけはマテ
            リアルを分ける



>>    0    >>   1   >>   2   >>   3   >>   4   >>
レベル




>>   0   >>   1   >>   2   >>   3   >>   4   >>
レベル
     • 1レベル 3000m として
       、車や歩行者、ドラム
       缶などのオブジェクト
       を配置する
     • これをコース中にロー
       ドすることで、レベル
       とする
      – 今回は計 30 ( 90Km 分
        )のレベルをランダムに
        ロードしている

>>    0   >>   1   >>      2   >>   3   >>   4   >>
レベル
     • ゲームの起動時と、自機をループした直
       後のタイミングでロードする
      – ロードする場所はコースの終了地点より奥の
        方
          • コース内にロードすると、ループのタイミングで
            急に出現したようになり、不自然な挙動となるた
            め
     • 事前にあったオブジェクトはループの際
       に、自機と一緒にコース内に移動する
      – このとき、自機より後ろ側に行ったオブジェ
        クトはもう利用する必要がないため Destroy
>>    0    >>   1   >>   2   >>   3   >>   4   >>
ループの判定
     • 最初はコースの終了地点に透明な
       BoxCollider を置いていた
      – 自機の移動速度によっては飛び越えて衝突し
        ないことがあったため断念
     • コースの全長分以上の距離を走行したら
       、戻るように変更

      メモ:方法としては Collider に対して Raycast
       でも可
>>    0   >>   1   >>   2   >>   3   >>   4   >>
ポーズのしかた
     • 全オブジェクトに対して、以下の処理を
       かける = rigidbody.velocity;
        TempV
          TempAV = rigidbody.angularVelocity;

          rigidbody.velocity = Vector3.zero;
          rigidbody.angularVelocity = Vector3.zero;



     • アンポーズした際に、テンポラリに保存
       した定数を rigidbody に戻してやる
      – ついでに isKinematic をオンにしておいた方
        が安全かも
>>    0      >>       1      >>       2      >>       3   >>   4   >>
GUI
     • ほぼフォントで表現
      – OverDrive というフリーのフォントを利用
     • 一部画像
      – エナジーバーとか
          • 下地 / バー / フレームの3階層
            – ちなみにバーは 1 ピクセルの画像を条件に応じて拡縮して表現


     • 他の UI との競合がありうるため
      – isTapGUI とかして判定用のメソッドも作っておく



>>    0     >>   1   >>    2     >>   3   >>   4   >>
車




>>   0   >>   1   >>   2   >>   3   >>   4   >>
車
     • こちらも同様にトゥーンシェーダを用い
       る
     • 一部のアウトラインはテクスチャに直接
       描き込み




>>    0   >>   1   >>   2   >>   3   >>   4   >>
車
     • マフラーからの噴出物
      –煙
      – アフターバーナー
          • パーティクルを置いてパラメータを調整するだけ




>>    0    >>   1   >>   2   >>   3   >>   4   >>
自機の挙動
     • 基本的にはつねに前方移動、インプット
       があったときのみ左右のいずれかを向く
      – 単純に移動方向に対して以下を適応
      transform.position += (transform.forward * speed * Time.deltaTime);


      – 移動方向の算出も単純に以下のような感じ
      transform.Rotate(Vector3.up * curveSpeed * Time.deltaTime);




>>    0     >>       1      >>       2      >>       3      >>       4      >>
自機の挙動
     • 基本的には BoxCollider
     • 念のため Raycast も

     • Rigidbody の設定
       – Constrains を Position.x 以外すべて Freeze する
           • ゲームの性質上、衝突時に跳ねたり、後退したり、向きが変
             わったりということをしたくない
           • ただし、 Position.x だけはフラグを外す(左右の跳ね返りは
             許容する)
             – これをやらないと壁への衝突時などに、物体に刺さって動かな
               くなるという現象が起きる



>>     0    >>    1    >>    2   >>     3   >>     4   >>
自機の挙動
     • オブジェクトとの衝突時
      – 衝突したオブジェクトを前方に跳ね飛ばす
          • これも単純に以下のような処理を加えているだけ
          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   >>
ポリスの挙動
     • 基本的なロジックは自機と一緒
     • 走行速度と移動方向だけ工夫して、単純な AI で
       自機を追いかけるようにする
      – 走行速度
          • 自機の速度に対して -1.5Km/h~+3.5Km/h くらいの速度で追
            いかける
            – じわじわと追いついて来るような感じ
      – 移動方向
          • 自機とポリスの x 軸の差が 5m 以上あれば、自機の方に向か
            って旋回する
            – 基本的には自機に衝突するように移動


>>    0     >>   1    >>   2   >>    3   >>    4   >>
衝突時の爆発
     • Unity Technologies の Detonator
       Explosion Framework を利用




>>     0   >>   1    >>   2   >>   3    >>   4   >>
おまけ
     • アイテムは演出上目立
       つようにアウトライン
       を少しだけ派手にする
      – アウトラインはオブジ
        ェクトのまわりに、同
        じオブジェクトを拡大
        して法線をひっくり返
        したものを配置して表
        現する

>>    0   >>   1   >>   2   >>   3   >>   4   >>
おまけ
     • キャラクターに衝突すると漫画のコマの
       ようなポップアップで演出




>>    0   >>   1   >>   2   >>   3   >>   4   >>
おまけ
     • サウンド
      – SE は Resources.Load() で呼ぶとと重たいので、事
        前に GameObject に貼り付ける
      – シーンをまたぐ直前に鳴る効果音は
        DontDestroyOnLoad() して、鳴り終わったら
        Destroy() する


     • バイブレーション
      – iPhoneUtils.Vibrate() が非推奨になったの
        で、 Handheld.Vibrate() を使いましょう

>>    0   >>    1   >>    2    >>   3     >>   4   >>
とまぁ、




>>   0   >>   1   >>   2   >>   3   >>   4   >>
雑に詰め込みましたが




>>   0   >>   1   >>   2   >>   3   >>   4   >>
こんな感じ。




>>   0   >>   1   >>   2   >>   3   >>   4   >>
参考になってたらいいけど。。
            。




>>   0   >>   1   >>   2   >>   3   >>   4   >>
以上です!ありがとうございま
           した。




>>   0   >>   1   >>   2   >>   3   >>   4   >>

Weitere ähnliche Inhalte

Andere mochten auch

Monitoryng zdorovja sholjariv
Monitoryng zdorovja sholjarivMonitoryng zdorovja sholjariv
Monitoryng zdorovja sholjarivann_kirsan
 
Women participation in the 2014 tripartite elections in malawi mesn june 26 2...
Women participation in the 2014 tripartite elections in malawi mesn june 26 2...Women participation in the 2014 tripartite elections in malawi mesn june 26 2...
Women participation in the 2014 tripartite elections in malawi mesn june 26 2...Kondwani Duwa
 
Tugas sejarah ekonomi masa liberal
Tugas sejarah ekonomi masa liberalTugas sejarah ekonomi masa liberal
Tugas sejarah ekonomi masa liberalNining Purwaningsih
 
Podcasting for NGOs - TechCamp Kyiv 2012
Podcasting for NGOs - TechCamp  Kyiv 2012Podcasting for NGOs - TechCamp  Kyiv 2012
Podcasting for NGOs - TechCamp Kyiv 2012TechCampKyiv
 
Gerak melingkar beraturan (gmb)
Gerak melingkar beraturan (gmb)Gerak melingkar beraturan (gmb)
Gerak melingkar beraturan (gmb)ryan_riswanto
 
தமிழ் செய்திகளின் தொகுப்பு 11ம் பாகம்
தமிழ் செய்திகளின் தொகுப்பு 11ம் பாகம்தமிழ் செய்திகளின் தொகுப்பு 11ம் பாகம்
தமிழ் செய்திகளின் தொகுப்பு 11ம் பாகம்Narayanasamy Prasannam
 
Todays message collection english 14th part
Todays message collection english 14th partTodays message collection english 14th part
Todays message collection english 14th partNarayanasamy Prasannam
 
TDC Porto Alegre 2016 - Error handling with Swift
TDC Porto Alegre 2016 - Error handling with SwiftTDC Porto Alegre 2016 - Error handling with Swift
TDC Porto Alegre 2016 - Error handling with SwiftHenrique Valcanaia
 
nate-smith-techcamp-kyiv-training
nate-smith-techcamp-kyiv-trainingnate-smith-techcamp-kyiv-training
nate-smith-techcamp-kyiv-trainingTechCampKyiv
 
தமிழ் குறுஞ்செய்திகளின் தொகுப்பு 20ம் பாகம்
தமிழ் குறுஞ்செய்திகளின் தொகுப்பு 20ம் பாகம்தமிழ் குறுஞ்செய்திகளின் தொகுப்பு 20ம் பாகம்
தமிழ் குறுஞ்செய்திகளின் தொகுப்பு 20ம் பாகம்Narayanasamy Prasannam
 
Todays message collection tamil 13th part
Todays message collection tamil 13th partTodays message collection tamil 13th part
Todays message collection tamil 13th partNarayanasamy Prasannam
 
4. resumen tendencias digitales 2017.pptx (1)
4. resumen tendencias digitales 2017.pptx (1)4. resumen tendencias digitales 2017.pptx (1)
4. resumen tendencias digitales 2017.pptx (1)Laura Jimenez Ramirez
 
Real presentation at mesn
Real presentation at mesnReal presentation at mesn
Real presentation at mesnKondwani Duwa
 
PresenTechCamp Kyiv - Open Innovation in Education
PresenTechCamp Kyiv - Open Innovation in EducationPresenTechCamp Kyiv - Open Innovation in Education
PresenTechCamp Kyiv - Open Innovation in EducationTechCampKyiv
 

Andere mochten auch (20)

Monitoryng zdorovja sholjariv
Monitoryng zdorovja sholjarivMonitoryng zdorovja sholjariv
Monitoryng zdorovja sholjariv
 
Women participation in the 2014 tripartite elections in malawi mesn june 26 2...
Women participation in the 2014 tripartite elections in malawi mesn june 26 2...Women participation in the 2014 tripartite elections in malawi mesn june 26 2...
Women participation in the 2014 tripartite elections in malawi mesn june 26 2...
 
Tugas sejarah ekonomi masa liberal
Tugas sejarah ekonomi masa liberalTugas sejarah ekonomi masa liberal
Tugas sejarah ekonomi masa liberal
 
Podcasting for NGOs - TechCamp Kyiv 2012
Podcasting for NGOs - TechCamp  Kyiv 2012Podcasting for NGOs - TechCamp  Kyiv 2012
Podcasting for NGOs - TechCamp Kyiv 2012
 
Voshod Portfolio (TTL, ATL)
Voshod Portfolio (TTL, ATL)Voshod Portfolio (TTL, ATL)
Voshod Portfolio (TTL, ATL)
 
Solidetss
SolidetssSolidetss
Solidetss
 
Gerak melingkar beraturan (gmb)
Gerak melingkar beraturan (gmb)Gerak melingkar beraturan (gmb)
Gerak melingkar beraturan (gmb)
 
தமிழ் செய்திகளின் தொகுப்பு 11ம் பாகம்
தமிழ் செய்திகளின் தொகுப்பு 11ம் பாகம்தமிழ் செய்திகளின் தொகுப்பு 11ம் பாகம்
தமிழ் செய்திகளின் தொகுப்பு 11ம் பாகம்
 
Todays message collection english 14th part
Todays message collection english 14th partTodays message collection english 14th part
Todays message collection english 14th part
 
TDC Porto Alegre 2016 - Error handling with Swift
TDC Porto Alegre 2016 - Error handling with SwiftTDC Porto Alegre 2016 - Error handling with Swift
TDC Porto Alegre 2016 - Error handling with Swift
 
Proyecto car shop
Proyecto car shopProyecto car shop
Proyecto car shop
 
nate-smith-techcamp-kyiv-training
nate-smith-techcamp-kyiv-trainingnate-smith-techcamp-kyiv-training
nate-smith-techcamp-kyiv-training
 
Sunil babu
Sunil babuSunil babu
Sunil babu
 
தமிழ் குறுஞ்செய்திகளின் தொகுப்பு 20ம் பாகம்
தமிழ் குறுஞ்செய்திகளின் தொகுப்பு 20ம் பாகம்தமிழ் குறுஞ்செய்திகளின் தொகுப்பு 20ம் பாகம்
தமிழ் குறுஞ்செய்திகளின் தொகுப்பு 20ம் பாகம்
 
Todays message collection tamil 13th part
Todays message collection tamil 13th partTodays message collection tamil 13th part
Todays message collection tamil 13th part
 
4. resumen tendencias digitales 2017.pptx (1)
4. resumen tendencias digitales 2017.pptx (1)4. resumen tendencias digitales 2017.pptx (1)
4. resumen tendencias digitales 2017.pptx (1)
 
Real presentation at mesn
Real presentation at mesnReal presentation at mesn
Real presentation at mesn
 
Презентация Иканока
Презентация ИканокаПрезентация Иканока
Презентация Иканока
 
Monroe Doctrine
Monroe DoctrineMonroe Doctrine
Monroe Doctrine
 
PresenTechCamp Kyiv - Open Innovation in Education
PresenTechCamp Kyiv - Open Innovation in EducationPresenTechCamp Kyiv - Open Innovation in Education
PresenTechCamp Kyiv - Open Innovation in Education
 

Kürzlich hochgeladen

My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」inspirehighstaff03
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドKen Fukui
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドKen Fukui
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfyukisuga3
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」inspirehighstaff03
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slidessusere0a682
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfinspirehighstaff03
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」inspirehighstaff03
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドKen Fukui
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドKen Fukui
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドKen Fukui
 
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfEstablishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfoganekyokoi
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」inspirehighstaff03
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」inspirehighstaff03
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」inspirehighstaff03
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」inspirehighstaff03
 

Kürzlich hochgeladen (20)

My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdf
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
 
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfEstablishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdf
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
 

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

  • 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 >>