#はじめに
2ヶ月かけて初めてのオリジナルゲームを作成しました。ウォッチドッグス2に憧れて、シューティング系のTPSゲームです。(ウォッチドッグスみたいにアクション・ハッキング・スタイルがかっこいい感じではありませんが。。。)
プレイ動画はこんな感じ。
動画:「初めてのオリジナルTPSゲーム(プレイ動画)」
TPSゲームは「カメラの動きとプレイヤーの動きの連動」が大事だなと感じたので、別記事で「カメラ編」「カメラとプレイヤー連動編」の大きく二編に分けて実装方法を解説します。
とりあえずこの記事は、ここまで。(笑)
ポートフォリオ
RESUMEにポートフォリオとして各機能を動画にしてあるので、よかったらみてください。
ー TPSゲーム。ウォッチドッグスに憧れて。
#参照記事一覧
後々、参考にした記事と一緒に振り返りができるよう、自分用に載っけておきます。
他にも参考にした記事はたくさんありますが、作成過程でメモに残していたものをひとまず。
Animationを考慮したジャンプ(Animationの分割)
https://qiita.com/mkgask/items/fa307811da6d9d76bc97
AnimationEventを使いこなす(Animation中の任意のフレームにevent追加)
https://qiita.com/aimy-07/items/58e77d3396ded286affc
Animationの動きに合わせてColliderのパラメータ変更(AnimationCurvesの編集)
https://gametukurikata.com/program/changecollider
Colliderは内側には衝突判定なし
https://qiita.com/mechamogera/items/166f7486323e171356b4
rayを利用したキャラクターの接地判定(Physics.Linecast)
https://gametukurikata.com/program/scriptisgrounded
キャラクターが転ばないようにする(Freeze Rotation)
http://blog.livedoor.jp/f_paul/archives/27442792.html
ButtonのOnClick()以外・Button以外のuGUIでのイベント発生をScriptで実装(uGUIとEventTrigger)
https://tech.pjin.jp/blog/2017/09/03/unity_event-trigger/
uGUIのEventTriggerにて、PointerDownとPointerUpを使い「押下中(ボタン長押し)」を実装(EventTriggerに「押下中(ボタン長押し)」がないため)
https://qiita.com/netty/items/66284cbb2bb1cd42a486
オリジナルのジョイスティック(バーチャルパッド)を実装
https://kan-kikuchi.hatenablog.com/entry/uGUI_Joystick_1
Unity2Dで、三角形や四角形や円形など基本的なスプライトを利用する設定方法
https://chappyworld.hatenablog.com/entry/2018/09/23/123925
自分でインポートしたpng画像を利用する方法(特にuGUIにて)
https://teratail.com/questions/98383
Icons(シンプルなアイコンが無料ダウンロード可能)
https://material.io/resources/icons/?icon=fiber_manual_record&style=baseline
ワールド座標とローカル座標の変換
https://dkrevel.com/unity-explain/space
transform.Translateとtransform.Rotateはローカル座標系(ワールド座標系への変換も可能)
https://qiita.com/Teach/items/7fa4db3bbcfa5a2ccd50
Quaternionを数学でキチンと理解する
https://virtualcast.jp/blog/2019/11/quaternion/
Quarternionの使い方入門
https://www.sejuku.net/blog/55596
他のオブジェクトについているスクリプトの変数参照・関数実行
https://qiita.com/tsukasa_wear_parker/items/09d4bcc5af3556b9bb3a
スマホ画面の左/右半分タッチしていることを検知
http://thiqxis.hatenablog.com/entry/2018/02/13/222712
アニメーションクリップのプロパティを理解
https://xr-hub.com/archives/13007
RaycastのlayerMask設定方法(rayに衝突するObjectの設定)
https://kan-kikuchi.hatenablog.com/entry/RayCast2
RaycastとRaycastallの違い(Raycast returns the first thing hit by the ray - RaycastAll returns everything that was hit along the length of the ray.)
https://answers.unity.com/questions/429852/what-is-the-difference-between-raycast-and-raycast.html
ColliderのOnTrigerと、ベクトルの内積を用いた索敵
https://www.urablog.xyz/entry/2017/10/24/073654
数秒後に異なる処理の実行・中断や非同期のような処理を作成(Coroutine)
https://www.sejuku.net/blog/83712
UIゲージ(fillAmount、Filled)
http://makegameandmore.blog.fc2.com/blog-entry-7.html
敵キャラの自動追跡やナビゲーション(ナビゲーションシステム)
https://xr-hub.com/archives/7639
Unityエディタでの3Dモデル作成(ProBuilder)
https://xr-hub.com/archives/5463
連続的なカメラの移動 not 断続的(Vector3.Lerp())
https://qiita.com/aimy-07/items/ad0d99191da21c0adbc3
EventHandlerにてOnPointerUpを使う際の盲点(空でもOnPointerDownが実装されていないと呼ばれない)
https://qiita.com/butislime/items/24610330812580cf5eb2
Quaternion.FromToRotation(Vector3.up, hitInfo.normal);
(FromToRotationと.normalの使い方)
https://gametukurikata.com/program/bulletmark
2つのベクトルの角度を度数法で取得する方法(内積→ラジアン→度数法)
https://qiita.com/6janazi/items/bc7613e4806f3ac8f481
Rigidbody・Colliderを使う際の、移動摩擦と回転摩擦(RigidbodyのDragとAngularDrag)
→Anngular Dragの設定をしないと衝突時に回転してしまう
Navigationを使おう
敵の移動(基本)・NavMeshのステージへの適用/NavMeshAgentをキャラに設定
https://gametukurikata.com/navigation/navigationmove
敵の移動(巡回)
https://gametukurikata.com/navigation/movetodestination
UIはコンポーネント = ScriptではTransform型で取得(GameObject型では取得不可)
https://qiita.com/MrSmart/items/76ed7dc7cb034c607721
transform.FindとgameObject.Find等々の違い(計算量が少ない実装を選択しよう!)
https://qiita.com/hkomo746/items/1988a395020e16ef0365
deltaTimeで実機のスペック問わず値を安定させるの必須
https://yumineko.com/time-deltatime/
画面のアスペクト比・解像度に合わせてUI変更(Canvasの設定)
https://pengoya.net/unity/ui-fix/
Skyboxの変更
https://miyagame.net/skybox/
mixamoでモデルのtextureがインポートされていない/適用されていないとき
https://qiita.com/HiromuKinoshita/items/351f9f00232ef0461fc5
Camera・ObjectのOcclusion Culling(カメラに写っていない部分は描画しない)
https://gametukurikata.com/basic/occlusionculling
配列とリストの違い・配列とリストの初期化方法
https://www.fenet.jp/dotnet/column/language/713/
敵の頭の上にHPバー
https://qiita.com/sakas1231/items/9acd52828204b13c93f1
Navmeshagent利用時の注意点(他コンポーネントと共に使う際)
https://docs.unity3d.com/ja/2018.4/Manual/nav-MixingComponents.html