LOL で中間点の地面の動きがどのように実現されるかご存知ですか?

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

導入

ココスにおける中間点の地面の動きの例。

ゲーム開発では、地面をクリックして指定された点に移動するようにプレーヤーを制御する必要があることがよくあります

この記事では、ココスでLOLと同様のポイントおよび地面の動きの効果を実現する方法を紹介します

この記事のソースプロジェクトは記事の最後で入手できます。友達は自分でそこに行くことができます。

地面をクリックして知識ポイントを移動します

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

CocosでLOLと同様のポイント地面移動効果を実現するには、次の2 つの知識ポイントがあります。

1. スクリーン空間座標をレイに変換する

ゲームで、プレーヤーが画面上の点をクリックしたとき、さらなるインタラクションや検出のために、カメラから放射された光線が画面上のどの点を通過するかを知りたい場合があります

したがって、画面空間 (左上隅が原点) の座標をray に変換する必要があります

Cocos使用する必要があるAPI はですCamera.screenPointToRay

API ドキュメントを確認すると問題の 80% が解決できます

2. レイを通してすべてのコリジョン ボックスを検出する

光線検出は一般的に使用されるテクノロジであり、光線がゲーム シーン内のオブジェクトと交差するかどうかを判断するために使用され、それによってクリック検出やレイ キャスティングなどの機能が実現されます。

したがって、すべての衝突ボックスを検出し検出されたすべての結果を記録する必要があります

Cocosでは検出を実行PhysicsSystem.instance.raycast(ray)PhysicsSystem.instance.raycastResults結果にアクセスします。

見つからない場合はココス公式にご連絡ください

早速、例を挙げてみましょう。

点地盤の動きの例

次に、LOLと同様のポイント地面移動エフェクトを段階的に実装していきます

1. 環境

エンジンバージョン:Cocos Creator 3.8.1

プログラミング言語: TypeScript

2. リソースの準備

ココスモールKylinziから無料リソース「KylinsEasyController 」を借りてプロジェクトを作成してみましょう。

再び巨人の肩の上に立つ

次に、クリック位置を示す円錐を自分で作成します(プログラム グループはいつものように座屈したままです)。

一言バックル

アニメーション エディタを使用して、単純な上下の動きのエフェクトを作成します。

上、下、上、下、左、右、左、右、ババ

3. コードを書く

新しいTouchMoveコンポーネントを作成し、それをCanvasにドラッグします。

@ccclass('TouchMove')
export class TouchMove extends Component {
    
    
    @property(Node)
    pointerNode: Node;
}

メソッド内のイベントをリッスンするstart()ことによってthis.node.onNodeEventType.MOUSE_DOWN

start() {
    
    
    this.node.on(NodeEventType.MOUSE_DOWN, (event: EventMouse) => {
    
    
    }, this);
}

次に、次のメソッドを通じてクリックされたオブジェクトを取得します。

  • event.getLocation()クリックされた画面座標を取得します。
  • camera.screenPointToRay(uiPos.x, uiPos.y, ray)スクリーン座標を介して光線を生成します。
  • PhysicsSystem.instance.raycast(ray)レイ衝突検出を実行し、結果を記録します。
  • PhysicsSystem.instance.raycastResults光線検出結果を取得し、名前またはその他の情報から目的のオブジェクトを取得します。
var uiPos = event.getLocation();
var ray = new geometry.Ray();
camera.screenPointToRay(uiPos.x, uiPos.y, ray);
if (PhysicsSystem.instance.raycast(ray)) {
    
    
    const raycastResults = PhysicsSystem.instance.raycastResults;
    for (let i = 0; i < raycastResults.length; i++) {
    
    
        const item = raycastResults[i];
        if (item.collider.node.name == "Plane") {
    
    
        }
    }
} else {
    
    
    console.log('raycast does not hit the target node !');
}

最後に以下の方法でインジケーターを表示させキャラクターを動かします

  • item.hitPointクリックした位置の座標を取得します。
  • .active = true.setWorldPosition(item.hitPoint)ポインタ座標を表示および設定します
  • player.lookAtキャラクターの向きを設定します。
  • skeletalAnimation.crossFade("anim_rig_run", 0.1)skeletalAnimationコンポーネントを通じてアニメーションを再生します。
  • tween(player)トゥイーンアニメーションによるキャラクターの動きを実現します。
this.pointerNode.active = true;
this.pointerNode.setWorldPosition(item.hitPoint);
player.lookAt(new Vec3(player.worldPosition.x * 2 - item.hitPoint.x, player.position.y, player.worldPosition.z * 2 - item.hitPoint.z));
skeletalAnimation.crossFade("anim_rig_run", 0.1);
let duration = Vec3.distance(player.worldPosition, item.hitPoint) * speed;
if (playerTween) {
    
    
    playerTween.stop();
}
playerTween = tween(player);
playerTween.to(duration, {
    
     worldPosition: item.hitPoint }).call(() => {
    
    
    skeletalAnimation.crossFade("anim_rig_idle_1", 0.1);
    this.pointerNode.active = false;
}).start();

4. 効果実証

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

これで今日のプログラムは終わりです。記事の転送にご協力ください。授業を抜け出すのはもう終わりです。

結論

この記事のソース プロジェクトは、プライベート メッセージでTouchMove を送信することで取得できます。

より実用的なソース コードについては、コードをスキャンするか、原文を読むことができます支払いは知識の獲得だけでなく、著者への支援と評価でもあります。ありがとうございます!

十億元コード食料品店

私は「Billion Dollar Programmer」、ゲーム業界で8年の経験を持つプログラマーです。ゲーム開発において、皆さんのお役に立てれば幸いです。また、皆さんを通して皆さんのお役に立てれば幸いです。

AD: 作者のオンライン ミニゲーム「Snake Handheld Classic」、「Gravity Maze Ball」、「Coloring Journey」をクリックして自分で検索できます。

正直、いいねしたい!この記事を必要と思われる他の友達と共有してください。ありがとう!

推奨されるコラム:

Honor of Kings がスキル範囲インジケーターをどのように実装しているかご存知ですか?

Cocos の独立系ゲーム開発フレームワークを段階的に構築してきた 8 年の経験

8 年間のゲーム マスター プログラマーと一緒にデザイン パターンを学ぶ

スネーク ミニゲームをゼロからオンライン シリーズまで開発する

おすすめ

転載: blog.csdn.net/lsw_Cs/article/details/134917943