直近2年間の職務経験の概要

直近2年間の職務経験の概要

序文

会社の収益は悪く、チーム全員が解雇され、N+1 の報酬が支払われています。大丈夫です。1 ~ 2 か月休んだ後、過去 2 年間の仕事の経験をまとめます。このブログ テクノロジー以前のドキュメントとは異なり、記録されません。非常に詳細に記載されています (前のドキュメントには、対応する操作を実装するための GIF 画面記録が含まれています)。多くの場所で簡単に説明されているだけです。結局のところ、ドキュメントを確認するときに最も便利です。実際に使われています。

URPの使用法

1: URPを有効にする方法

1. 古いプロジェクトを URP にアップグレードする

Baidu で検索してください。ここでは詳細は説明しませんが、ランダムなリンクを添付して
、古いプロジェクトを URP にアップグレードします。

2.新規プロジェクト作成時にURP作成を選択

そうでない場合は、バージョンがサポートしていない可能性があります。
プロジェクトにこの項目がない場合は、バージョンがまだサポートしていない可能性があります。

2:URPシャドウの設定

ここに画像の説明を挿入します
図に示すように、プロジェクト ファイル内で URP 設定ファイルを見つけてクリックし、プロパティ パネルで影を変更します。

PolyBrush(地図編集プラグイン)の使用

山や谷を作る

ここに画像の説明を挿入します
左ボタンを押したまま地図上をスライドすると山が形成され、Ctrl + 左ボタンで谷が作成されます。

エッジソフトニング

ここに画像の説明を挿入します

カラーワイパー

ここに画像の説明を挿入します
フィルまたは他のモードを選択可能

シーン内にオブジェクトを作成する

ここに画像の説明を挿入します
プレハブを現在のパレットにドラッグするだけです

地図地形の作成

ここに画像の説明を挿入します

トラブルに巻き込まれやすい

マップを描画した後は、必ず ProlBrush のチェックを外してください。オフにしないと、シーン内でオブジェクトを選択できません。
ここに画像の説明を挿入します

ProBuilder(地図編集プラグイン)

思い

ご存知のように、マップ部分はアーティストに完全に任せるべきですが、中国は人が多すぎます。あなたがやらなければ、またやる人がいて、ますます複雑になってしまいます。中小規模規模の企業には特定のマップ エディターがないため、開発者自身に任せることしかできず、いくつかのマップ編集プラグインを習得する必要がありました。
ここに画像の説明を挿入します

説明書

Probulider は複数頂点の地面を作成できます。スケールを直接変更すると、サイズのみが変更され、頂点の数は変更されません。さらに、Probulider によって作成された頂点は中心にありません。オブジェクトを選択して、中央の右端のアイコンをクリックすることもできます。

ProGrids プラグイン (補助参照線。通常は使用されず、バグを引き起こす可能性があります)

ここに画像の説明を挿入します
使用する前に、上の図に示すように、編集の Rproject 設定で属性を確認する必要があります。
ここに画像の説明を挿入します
ProGrids は補助参照線を実装したり、シーン内のオブジェクトが設定された単位に従って移動したりすることができますが、個人的にはあまり使いたくないです。

自動ナビゲーションナビゲーション

静止した非インタラクティブ (通行可能な) オブジェクト

シーン内の移動できないオブジェクトを Navigation Static に設定し、Navigation プロパティ パネルで移動できるかどうかを設定します。
ここに画像の説明を挿入します

移動するがインタラクションできない (通過する) オブジェクト

NavMeshObstacle は、シーンが移動し、主人公が通過できない場所で使用する必要があるため、Carve 属性を確認するだけです。
ここに画像の説明を挿入します

main句のパラメータ設定

ここに画像の説明を挿入します
ここに画像の説明を挿入します
NavMeshAgent コンポーネントを主人公に追加します。高さや幅などのパラメータは、Navigation の Agent 属性パラメータに対応している必要があります。一致していないとバグが発生する可能性があります。

カメラを多角的に活用する

カメラ画角追従ロック(各種実装)

最初の方法: Cinema 管理クラスを作成する

1 つ目の方法は時間がかかります。必要な機能を実現するために Cinema 管理クラスを自分で作成する方法です。

2 番目の方法: Cinemachine プラグインを使用する

Unity本体内でCinemachineを検索し、直接インポートします。
次に、もう 1 つのメニュー バーが表示されるので、
ここに画像の説明を挿入します
[CreateVirtualCinema] を選択します。
フォローしたいオブジェクトをフォローにドラッグします。
ここに画像の説明を挿入します

次に、希望の角度を調整し、Ctrl+Shift+F を押して素早くロックします。(他のショートカット キーと競合する可能性があります。ゲームオブジェクトのメニュー バーで [ビューに合わせて配置] を選択できます)

カメラの自由視点(三人称)

最初の方法: 自分でスクリプトを書く

2 番目の方法: Cinemachine プラグインを使用する

Unity パネルの Cinemachine メニュー バーで FreeLookCamera を作成します。図に示すように、関連するパラメータを自分の好みに合わせて設定します。
フォローは上記のロックされたパースペクティブと同じです。ここではあまり詳しく説明しません。
軸制御視点の動きを制御します。左と右の行にプロジェクト設定を入力します。 >
バインド モードの入力マネージャーの値は、プレイヤーの視点に従うように自由または固定にすることができます。これは個人のニーズによって異なります。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

落とし穴に陥りやすい場所

ショートカットキーの競合

Ctrl+Shift+F は他のショートカット キーと競合する可能性があります。特に複数のソフトウェアを開いている場合、Unity のショートカット キーの優先順位は低くなります。「ビューに合わせて配置」は、ゲームオブジェクトのメニューバーで選択できます。

さまざまなモンスターの視点が高く見えたり低く見えたりします

アートが提供するリソースに問題があり(中小企業のプロセスが標準化されていない、またはアートが作業中に注意を払っていない)、中央の店舗が足元にあるため、奇妙な視聴につながります角度。ゲーム オブジェクト内に空のオブジェクトを作成し、その空のオブジェクトを観察します。
ここに画像の説明を挿入します

[ライティング] プロパティ バーの [環境] パネルで自信を持って設定します。ここでは詳しく説明しません (プログラマーには芸術的なアイデアがないため、専門家に任せてください)。
ここに画像の説明を挿入します

後処理

階層パネルを右クリックして、さまざまなボリュームを作成し、自分でデバッグします。理由は上記と同じで、プログラマーには芸術的なスキルがありません。好みに合わせて調整できる多数のパラメーター。
ここに画像の説明を挿入します

アニメーション制御

使用される Animator コントロールについては後で詳しく説明しますが、現時点では Speed 浮動小数点数によってのみ制御されます。
ここに画像の説明を挿入します

主人公のモバイル攻撃 (コルーチンを使用)

プレイヤーがモンスターをクリックするとき、次の 2 つのステップを実行する必要があります。
1: モンスターまでの距離を決定します (Update には書き込まないようにしてください。そうしないと、移動ロジックと混同される可能性があるため、Ctrip を使用する必要があります)
2 : 距離が足りればモンスターを攻撃するだけ
ここに画像の説明を挿入します

主人公の複数セットのアクションモジュールの切り替え(異なる武器による異なる攻撃アクション)

Animator Override Controller コンポーネントを作成して、変更する必要がある攻撃アニメーションを置き換えます。
元の Animator Controller コンポーネントをそこにドラッグします。
ここに画像の説明を挿入します

モンスター AI (ステート マシンを使用)

ステートマシン

いわゆるステートマシンは、モンスターにいくつかの通常の状態を設定し、静止、パトロール、攻撃などの対応するメソッドをカプセル化するものです。各状態に対応する処理を行う 通常、Update では現在の状態がどのような状態であるかを常に判断し、その状態に応じた処理を実行します。

アニメーションレイヤーの階層化

複数のレイヤーを使用すると、蜘蛛の巣状の状況 (状態がすべて線であり、状態間の切り替えが非常に面倒) を回避できます。パラメーターは次のように設定されます。
ここに画像の説明を挿入します
Base Layer は基本レイヤーとして機能し、最も基本的な ide と walk を制御します。
ここに画像の説明を挿入します

Attack Layer は攻撃関連のアニメーションを制御し、攻撃アニメーションが終了すると空の状態に戻ります (BaseState はアニメーションなしで作成された空の状態です)。このとき BaseLayer レイヤーはカバーされません。
ここに画像の説明を挿入します

Behavior Tree プラグインを使用することもできます

私が書いたこの記事を参照してください

材料が落ちる

通常、モンスターと戦う際にマテリアルはトリガーによって爆発し、プレイヤーがそのマテリアルに触れるとそれを拾い上げてバックパックに入れるのですが、この時、マテリアルが先にプレイ​​ヤーに当たってしまうという状況が発生しています。地面に落ちますが、プレーヤーは見ていない可能性があります。したがって、ダブルコライダーを使用できます。
コライダー A は地面とのトリガーを担当します (通常は 1 秒の遅延があり、プレイヤーはどの装備やマテリアルが爆発したかを確認できます)。トリガーされると、コライダー B がアクティブになり、プレイヤーと衝突します。

アニメーションイベント

アニメーションパネルを右クリックして追加します。
通常、イベントは時間計算などの物理的な方法では計算されず、アニメーション イベントが使用されます。
ここに画像の説明を挿入します

アニメーションステートマシン

MonoBehavior の Awake メソッドと Update メソッドと同様に、現在のアニメーションを制御して、やりたいことを実行できます。
ここに画像の説明を挿入します
たとえば、気絶している間は移動できません。
ここに画像の説明を挿入します

プロジェクト例

Minotaur BOSS は至近距離でプレイヤーを激しく蹴ります。石は遠くからプレイヤーに投げられ、石はプレイヤーをノックバックさせることができます。プレイヤーは石を攻撃してミノタウロスに跳ね返し、ミノタウロスにダメージを与えることができます(原神における無相の氷に少し似ています)。

キックを達成する方法:

アニメーション イベントを追加します。アニメーションがキック フレームに到達したら、プレーヤーを取得し、プレーヤーのアニメーション コントローラーを呼び出し、めまい状態に入ります。同時に、アニメーション ステート マシン コントロールを追加し、上の図の API を呼び出します。
蹴る時点ですでに逃げているなど、より細かくしたい場合はこの時点で判定を追加することもできますが、私がやっているレジェンドゲーム自体は単なる数値勝負なので追加はしません。それはここです。

石を投げると、プレイヤーがノックバックされるか、石が吹き飛ばされ、石人間にダメージを与えます。

まず石のプレハブを作成します。ミノタウロスが手を挙げたフレームで石を作成します。石のクラスにはステートマシンがあります。最初は AttackPlayer ですが、プレイヤーなどに遭遇すると AttackNothing になります。プレイヤーが攻撃すると、アタックボスになります。
石とプレイヤーはそれぞれ剛体を持っており、ボスが石をプレイヤーに投げると、プレイヤーに向かって飛ぶ力を与え、剛体の衝突メソッドを呼び出し、プレイヤーの関連パラメータを取得して、プレーヤー上で動作します。逆に、プレイヤーは地面の石を攻撃し、プレイヤーの現在の方向に力を与えます。ボスに遭遇した場合、剛体の衝突メソッドも呼び出され、ボスに関する操作パラメータを取得します。
石がボスに当たった後、パーティクル システムを使用して粉砕効果を追加できますが、これについてはここでは説明しません。

プレイヤーを蹴って気絶させる

注意点

パラメータでは大文字と小文字が区別されるため、注意してください。

オクルージョンカリング

シェーダーグラフの書き込み

実際のプロジェクトでは、プレイヤーキャラクターが障害物の後ろを走りやすくなりますが、その際にアウトラインなどもプレイヤーに表示させたいので、この時点で簡単なシェーダーグラフを書くことができます。
1. プロジェクト パネルでシェーダー (Urp シェーダー) を作成します。
2. シェーダー パネルでノードを作成し、フレネル エフェクトを選択し、アウト ノードをドラッグして乗算を導出します。乗算には、カラー相当の値を割り当てることができます。 3
ここに画像の説明を挿入します
.シェーダーの右側をクリックしてマテリアルを作成すると、図のようにマテリアル プロパティ バーでプロパティを変更できます。
ここに画像の説明を挿入します
4. Urp Render 設定でレイヤー層を変更し、マテリアルを変更し、深さを確認します ( Depth)
DepthTest を選択し、Greater Equal を選択します (画像上でマークするのを忘れました)
ここに画像の説明を挿入します
5. Unblocked 状況も設定する必要があります
ここに画像の説明を挿入します

UI関連

キャンバスパネルの使い方

Canvas には一般的に使用される 2 つのモードがあり、1 つはワールド スペースで、UI をゲームの世界に配置します。
1 つはスクリーン スペースで、UI パネルが画面全体をカバーします。

モンスターヘルスバー

実際のシーンでは、ヘルス バーは常にモンスターに追従する必要があるため、ワールド スペース モードを使用し、各モンスター プレハブにヘルス バーの座標を追加して、ヘルス バーの UI 位置をリアルタイムで更新する必要があります。
ここに画像の説明を挿入します

プレイヤーの体力バー

これはスクリーン スペースを使用しています。通常の設定ではこのモードが使用されます。

キャンバスグループ

UI がインタラクティブであるかどうか、光線をブロックするか、アルファ値を変更するかを制御できます。

バックパックシステム

通常のバックパックの作成は特に言うことはなく、バックパックのデータを取得して一つ一つ作成していくだけです。主にアイテムドラッグ機能についての話。

バックパックのアイテムクリック機能

実装方法 1: バックパックのアイテム自体に Button が含まれており、ボタンの OnClick イベントを呼び出します。

実装方法 2: Backpack アイテムは IPointerClickHandler インターフェイスを継承します

ここに画像の説明を挿入します

アイテムドラッグ機能

まず、Unity が提供するドラッグ アンド ドロップ機能のインターフェイスを次のように継承する必要があります:
苦情を言いましょう: この言い訳を以前は知りませんでした。それらはすべて Onenter、長押し、その他のインターフェイスを継承しているため、必要がありますもう 1 層カプセル化します。
ここに画像の説明を挿入します
EndDrag のドラッグが終了したら、現在の位置を決定し、バックパック内の 2 つのバックパック アイテムを交換します。

判定方法1:光線を使って判定する。

ここに画像の説明を挿入します
この方法では、最後にレイによって検出された物体がバックパックグリッドであるかどうかを判断し、交換を完了することができます。
ゲームワールドに放り込みたい場合は、この時点でUIに触れていないとNull値が返ってくるので、この時のレイ座標をワールド座標(Z軸はマイナスの値)に変換するだけです。カメラ Z 軸) を生成し、対応する Just ゲーム オブジェクトを生成します。(伝説的なゲームは通常、プレイヤーの足元に直接投げられます)

判定方法2:EventSystem.IsPointerOverGameObjectを使用する。まず、UI を操作するかどうかを決定します。

ここに画像の説明を挿入します
次に、指定された UI 上にあるかどうかを判断し、画像の下にある API を呼び出します。
ここに画像の説明を挿入します
ドラッグプロセス中に、異なる UI 間のレベルがブロックされる場合があることに注意してください。たとえば、ドラッグしたものが最初に生成され、それを後ろに投げたい場合。このとき、親オブジェクトを変更してドラッグする必要があります。完了したら元に戻してください。

キャラクター情報パネルのダイナミック表示

伝説的なゲームをプレイしたことのある人なら誰もが知っているように、キャラクターパネルを開くとキャラクターが動き、非常に繊細に見えますが、この機能は実際には非常に簡単に実装できます。
RawImage、RenderTexture (RawImage と同じサイズ)、およびプレーヤーに面したカメラが必要です。
次に、RenderTexture を Camera に割り当て、レイヤーをプレーヤーのみをレンダリングするように変更してから、RenderTexture を RawImage に割り当てます。
背景を表示せず、背景の種類をカラーに変更し、アルファ値を 0 に設定します。
ここに画像の説明を挿入します

ここに画像の説明を挿入します

UI適応共通コンポーネント

方法 1: 独自のコードを記述して制御する

コード コントロールを自分で記述することの欠点は、より煩雑になることです。利点は、問題が発生したときにどこを修正すればよいかわかっていることです。Unity が提供するプラグインを使用すると、問題のトラブルシューティングが面倒になる場合があります。

方法 2: Unity が提供する Layout Group コンポーネントと Content SizeFitter を使用する

Layout Group コンポーネントは Content SizeFitter と組み合わせて使用​​され、プレーヤーのチャット ボックスのサイズの制御など、ほとんどのシナリオに完全に適合できます。
欠点: UI はリアルタイムでは更新されないため、キャンバスをすぐに更新するために API を呼び出す必要がある場合があります。

ScriptableObject

データの管理に使用され、その役割に関連する多くのコンポーネントがあり、ScriptableObject はデータ関連の処理に特に使用されます。
このデータはシリアル化して文字列に変換し、シーンを切り替えるときに一時的に保存できます。

おすすめ

転載: blog.csdn.net/qq_40629631/article/details/132300351