下面完成player的射击功能。该功能设定为自动开枪,也就是用计时器来开枪。。。。
首先给player加入一个脚本Gunshoot如图:
然后要给player在射击的时候加入光效,很简单,在枪口的位置加入一个light。然后把color的颜色设置一下。。。。实现一开枪就会有光芒,,,一切如图:
然后就又开始了coding:
using UnityEngine;
using System.Collections;
public class gunshoot : MonoBehaviour {
public float time=2;
private float timer;
private Light light;
void Awake()
{
light = this.GetComponent<Light>();
light.enabled = false;
}
void Start () {
timer = time;
}
void Update () {
timer -= Time.deltaTime;
if (timer <= 0)
{
//开枪
shoot();
timer = time;
}
}
void shoot() //开枪
{
//发光效果
light.enabled = true;
Invoke("shutshoot", 0.02f);
void shutshoot()//关闭发光
{
light.enabled = false;
}
}
注意一点就是 Invoke("shutshoot", 0.02f);在shoot()之后要马上关闭light所有用这个方法。。。
这样一开枪就会看到光了。。。
接下来给枪口来个粒子效果;只要把素材里的粒子效果拖到枪口然后写代码就可以(跟上个代码原理一样);
之后就是激光的制作;
首先给枪口加入line Renderer。。。然后选择好材质。。。
之后设定parameters属性,,如图,这里指的是激光开始的一端和结束的一端的宽度所组成的射线的宽度。。最开始也许是看不到射线的只要在positions里面设置Element就可以了,这两个Element也是激光的两端。。。可以设定不同的位置。。。在Scene里观察射线设置ok就开始进入Coding……
代码如下:(跟上个代码原理一样)
注意是要设置激光开始的位置点和结束的位置点
line.SetPosition(0, transform.position);//设定激光起点。代码中的0代表起点。。
line.SetPosition(1,hitinfo.point); //设置终点位置 。。。1是代表终点。
如果没有碰撞到物体就要向前发射100米:line.SetPosition(1,transform.position+transform.forward*100);//射击到100m(终点位置)
using UnityEngine;
using System.Collections;
public class gunshoot : MonoBehaviour {
public float rate=0.05f;
public float time=2;
private float timer;
private Light light;
private ParticleSystem parcicle;
private LineRenderer line;
void Awake()
{
parcicle = this.GetComponentInChildren<ParticleSystem>();
light = this.GetComponent<Light>();
light.enabled = false;
line=this.GetComponent<LineRenderer>();
line.enabled = false;
}
void Start () {
timer = time;
}
void Update () {
timer -= Time.deltaTime;
if (timer <= 0)
{
//开枪
shoot();
timer = time;
parcicle.Play();//粒子系统播放
}
}
void shoot() //开枪
{
//发光效果
light.enabled = true;
Invoke("shutshoot", rate);
//射击音乐
audio.Play();
//激光开始
line.enabled = true;//激光显示
line.SetPosition(0, transform.position);//设定激光起点
Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hitinfo;
if (Physics.Raycast(ray, out hitinfo))
{
line.SetPosition(1,hitinfo.point); //设置终点位置
}
else
line.SetPosition(1,transform.position+transform.forward*100);//射击到100m(终点位置)
}
void shutshoot()//关闭发光和激光等效果
{
light.enabled = false;
line.enabled = false;
}
}
然后把声音加入就可以了:代码里只要在射击的时候加入audio.Play();就OK;
这样就实现了自动射击激光功能!!!!运行效果如下:
标签:light,void,激光,enabled,transform,timer,Player,line,噩梦 From: https://blog.51cto.com/u_8378185/5990705