噩梦系列篇之Player之激光制作及射击完成
来源:互联网 发布:沈阳云科信息大数据 编辑:程序博客网 时间:2024/04/28 11:11
下面完成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; }}
这样就实现了自动射击激光功能!!!!运行效果如下:
0 0
- 噩梦系列篇之Player之激光制作及射击完成
- 噩梦系列篇之敌人攻击player功能完成
- 噩梦系列篇之Player受伤功能及伤害效果
- 噩梦系列篇之相机平滑跟随Player及Tag的设置
- 噩梦系列篇之Player的动画状态机
- 噩梦系列篇之Player的运动控制
- 噩梦系列篇之Player的动画播放控制
- 噩梦系列篇之Player随鼠标转向控制
- 噩梦系列篇之敌人自动追击Player功能(NavMeshAgent)
- 噩梦系列篇之Playe攻击敌人与敌人声音播放完成
- 激光SLAM系列之启程
- 5-IV) 激光三角3D系列(激光三角3D系列-仅限内部学员) 第01课时:激光三角测量结构介绍 第02课时:激光三角测量原理讲解 第08课时:激光三角测量之标定应用之
- 噩梦系列篇其他敌人制作与敌人自动生成功能
- 腾冲之窗网站制作开发完成
- 噩梦的那一年-程序员之路
- vista升级之旅——噩梦!
- D3D游戏编程系列(五):自己动手编写第一人称射击游戏之室外场景的构建
- D3D游戏编程系列(六):自己动手编写第一人称射击游戏之第一人称视角的构建
- LeetCode Remove Duplicates from Sorted List
- 字符串匹配 (附Java源码)
- 2015.04.10(c语言第二周第五天__指针01)
- R语言数据分析系列之八
- 一个list中包含不同的type时如何遍历?页面如何接收?Jquery调用后台方法?
- 噩梦系列篇之Player之激光制作及射击完成
- mini2440 之——LED简单控制(裸机)
- 黑马程序员 IO流
- Activity界面绘制过程详解
- postgres程序连接报错
- 第六章 自动执行自动化测试用例
- Android Touch事件分发详解
- Android Service Framework分析
- BroadcastReceiver安全问题