前言
文章地址:http://blog.csdn.net/u014735301/article/details/42705443
作者微博:http://weibo.com/u/1847349851
射擊特效
(1)在槍口位置,添加一個點光源 當開槍時。啓用點光源。造成一種一閃一閃的效果
(2)添加一個粒子來充當子彈射擊的效果,當開槍時,發射粒子
(3)添加一個LineRenderer 線渲染器來模仿射擊軌跡,並設置合適的粗細
(4)射擊聲音也不能少~~~
最終效果如下
添加EasyButton
跟joystick屬性差不多,這裏選擇交互方式爲Event事件,修改 button紋理。和位置
腳本設置
using UnityEngine;
using System.Collections;
public class PlayerShoot : MonoBehaviour {
//子彈射擊頻率
public float shootRate = 2;
public float attack = 30;
private float timer = 0;
private ParticleSystem particleSystem;
private LineRenderer lineRenderer;
// Use this for initialization
void Start () {
particleSystem = this.GetComponentInChildren<ParticleSystem>();
lineRenderer = this.renderer as LineRenderer;
}
void OnEnable()
{
//按住button
EasyButton.On_ButtonPress += On_ButtonPress;
//鬆開button
//EasyButton.On_ButtonUp += On_ButtonUp;
}
void On_ButtonPress(string buttonName)
{
//如果按下的是fire Button
if (buttonName == "Fire")
{
timer += Time.deltaTime;
if (timer > 1 / shootRate)
{
timer -= 1 / shootRate;
Shoot();
}
}
}
// Update is called once per frame
void Update () {
}
//開火
void Shoot() {
light.enabled = true;
particleSystem.Play();
this.lineRenderer.enabled = true;
lineRenderer.SetPosition(0, transform.position);
//----------判斷射擊到敵人時的遊戲邏輯-----------
Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hitInfo;
if (Physics.Raycast(ray, out hitInfo)) {
lineRenderer.SetPosition(1, hitInfo.point);
//判斷當前的射擊有沒有碰撞到敵人
if (hitInfo.collider.tag == Tags.enemy) {
hitInfo.collider.GetComponent<EnemyHealth>().TakeDamage(attack,hitInfo.point);
}
} else {
lineRenderer.SetPosition(1, transform.position + transform.forward * 100);
}
//播放射擊音效
audio.Play();
Invoke("ClearEffect", 0.05f);
}
void ClearEffect() {
light.enabled = false;
lineRenderer.enabled = false;
}
}
點擊Button,持續射擊
最終效果,按住Button 持續射擊 是不是很萌很暴力呢~~~