この例では、シューティングゲームの攻撃効果は他の攻撃とは異なる場合がありますが、それらはほぼ同じであり、設定効果やコードに多少の違いがある可能性があります。
まず、銃の光、銃口からの煙、銃の明るさ、銃の音などのパーティクル エフェクトを設定する必要があります。特定の要件は、特定の効果に従って実現されます。一般的なシーンの設定は準備ができていますが、準備ができていない場合は自分でデバッグできます。右クリックでエフェクト コンポーネントを作成するパーティクル システムがあり、これを通じてエフェクトを設定できます。
そして、対応するコンポーネントを実装します。
そして、プレイヤーが攻撃のターゲットを識別できるようにするために、通常、敵に独自のレイヤーを追加することで、プレイヤーは敵を倒し、攻撃して血液を失うことができます。敵の血液量 <= 0 の場合、敵は死んでいることを意味しますそして破壊する必要があります。
エフェクトを実現するためのスクリプトを作成します。通常、プレイヤーは光線検出を使用して敵に遭遇したかどうかを判断します。通常、敵はトリガーで感知され、その範囲内を攻撃し、範囲外には攻撃をしません。
コード:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerShoot : MonoBehaviour { // Start is called before the first frame update //玩家的攻击力 public int atk = 20; //射击时间间隔 float gunColdTime = 0.15f; //射击效果显示时间 float gunDisplayTime = 0.2f; //射击音效 AudioSource shootAudio; //射线 Ray gunRay; RaycastHit gunHit; //粒子特效 ParticleSystem gunParticleSystem; //枪源 Light gunLight; //机枪光线 LineRenderer gunLine; //射击对象 LayerMask layerMask; //计时器 float timer; void Start() { shootAudio = GetComponent<AudioSource>(); gunParticleSystem=GetComponent<ParticleSystem>(); gunLight=GetComponent<Light>(); gunLine=GetComponent<LineRenderer>(); layerMask = LayerMask.GetMask("shootTable"); } // Update is called once per frame void Update() { timer += Time.deltaTime; //如果按下鼠标左键并且时间间隔大于冷却时间则进行攻击 if (Input.GetKey(KeyCode.Mouse0) && timer>gunColdTime) { //射击 shoot(); } if (timer > gunColdTime * gunDisplayTime) { //开枪结束 displayGun(); } } //实现结束开枪 void displayGun() { gunLight.enabled = false; gunLine.enabled = false; } //实现射击方法 public void shoot() { timer = 0; //播放射击音效 shootAudio.Play(); //光源 gunLight.enabled = true; //光枪 gunLine.enabled = true; //射线的起始位置 gunRay.origin = transform.position; //射线的方向 gunRay.direction = transform.forward; //粒子特效 gunParticleSystem.Stop(); //停止 gunParticleSystem.Play(); //启动 //枪的第一个点 gunLine.SetPosition(0, transform.position); //判断是否射击到了场景里的游戏对象 if(Physics.Raycast(gunRay, out gunHit, 100f, layerMask)) { //判断是否达到敌人 EnemyHP enemyHP = gunHit.collider.GetComponent<EnemyHP>(); if (enemyHP != null) { enemyHP.Attacked(atk,gunHit.point); } gunLine.SetPosition(1, gunHit.point); } else { gunLine.SetPosition(1, gunRay.origin + gunRay.direction * 100f); } } }
イメージの実装:
上記の方法は特別なものではありませんが、この部分は少し難しく、プレイヤーの攻撃の実装ロジックを理解するのに時間がかかりますが、エラーがあればそれを検出して修正し、修正によって修正することで満足のいく効果が得られます。
上記のコードの順序が異なると、操作時にエラーが発生する可能性があります。プロジェクトが正常に動作するために、必要に応じて完全に使用する必要があります。間違えた場合は効果が得られるかよく確認して調整してください。もっと良い方法がある場合は、以下にメッセージを残してください。見てくれてありがとう!!!
-------------------------------------------------- ---------終了-------------------------------------- ------------------------