因为这个例子是射击游戏可以和其他的攻击效果不一样,但大致一样,可能在设置效果和代码上有部分区别。
首先需要把粒子效果设置好,比如开枪的光线,枪口的冒烟,开枪的光度和开枪的声音等待。具体要求按具体效果来实现。一般场景中的设置好了,如果没有可以自己进行调试。在右键创建效果组件中有一个粒子系统,通过这个可以设置效果。
并且要挂载对应的组件。
并且要让玩家识别攻击的对象,一般通过给敌人添加一个独一无二的的图层,让玩家能够失败敌人并且进行攻击可以掉血,当敌人血量<=0时代表敌人死亡,需要进行销毁。
创建脚本来实现效果,一般玩家是通过射线检测来判断有没有碰到敌人。而敌人一般是通过trigger触发器来检测,在范围内进行攻击,超出范围则不攻击。
代码实现:
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); } } }
图片实现:
以上方法不唯一,此部分有点小难度需要花时间去理解玩家攻击的实现逻辑,如果有错误则进行检测并修改,通过修改进行改正达到满意的效果。
上面代码顺序不一样,可能会导致运行出错,如需要得进行完整性使用,才能保证项目正常运行。如出错请认真检查并且通过调整看看是否能达到效果。如有更好的方法,请在下方留言!谢谢你的观看!!!
-----------------------------------------------------------END---------------------------------------------------------------