Unity学习笔记五 - Survival Shooter Tutorial
2016-04-25 07:15
295 查看
今天简单注释下PlayerShooting脚本
void Update ()
{
timer += Time.deltaTime;
//结合下一句和Shoot函数中第一句,每帧+一定时间,超过一定时间间隔才可能执行Shoot
if(Input.GetButton ("Fire1") && timer >= timeBetweenBullets && Time.timeScale != 0)
//Fire1按下,默认左键同时每隔一定时间才能进入一次Shoot
{
Shoot ();
}
if(timer >= timeBetweenBullets * effectsDisplayTime)
//超过时间没有开火,取消开火效果,没判断支持,超过时间会执行很多次
{
DisableEffects ();
}
}
public void DisableEffects ()
{
gunLine.enabled = false;
//跟据前面,使Player中LineRenderder组件停止作用
gunLight.enabled = false;
//跟据前面,使Player中Light组件停止作用,合起来就是停止开枪的效果
}
void Shoot ()
{
timer = 0f;
//重置timer
gunAudio.Play ();
//Player中AudioSource中的声音源
gunLight.enabled = true;
//跟据前面,使Player中Light组件作用,枪发光
gunParticles.Stop ();
gunParticles.Play ();
//枪的上次粒子效果停止和本次启动,和Player上ParticleSystem组件相关
gunLine.enabled = true;
//跟据前面,使Player中LineRenderder组件作用,枪有射线
gunLine.SetPosition (0, transform.position);
//设置gunLine的一端
shootRay.origin = transform.position;
//设定光束Ray的起始点
shootRay.direction = transform.forward;
//设定光束Ray的方向,player正向
if(Physics.Raycast (shootRay, out shootHit, range, shootableMask))
//计算shootRay和shootable层(shootableMask掩码下)的交点,在range限定的长度内,返回第一个交点给shootHit
{
EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> ();
//令shootHit的碰撞体也就是第一击中的物体上脚本组件EnemyHealth赋值给enemyHealth
if(enemyHealth != null)
//成功取得正确击中物体的脚本的话
{
enemyHealth.TakeDamage (damagePerShot, shootHit.point);
//执行EnemyHealth脚本中对应函数
}
gunLine.SetPosition (1, shootHit.point);
//设定gunLine的另一点为Ray第一命中的点,两点之间的线
}
else
{
gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range);
//否则设置gunLine另一端在shootRay方向上距离起始点Range长度的位置上,就是shootRay 100长度的LineRenderer表现
}
}
void Update ()
{
timer += Time.deltaTime;
//结合下一句和Shoot函数中第一句,每帧+一定时间,超过一定时间间隔才可能执行Shoot
if(Input.GetButton ("Fire1") && timer >= timeBetweenBullets && Time.timeScale != 0)
//Fire1按下,默认左键同时每隔一定时间才能进入一次Shoot
{
Shoot ();
}
if(timer >= timeBetweenBullets * effectsDisplayTime)
//超过时间没有开火,取消开火效果,没判断支持,超过时间会执行很多次
{
DisableEffects ();
}
}
public void DisableEffects ()
{
gunLine.enabled = false;
//跟据前面,使Player中LineRenderder组件停止作用
gunLight.enabled = false;
//跟据前面,使Player中Light组件停止作用,合起来就是停止开枪的效果
}
void Shoot ()
{
timer = 0f;
//重置timer
gunAudio.Play ();
//Player中AudioSource中的声音源
gunLight.enabled = true;
//跟据前面,使Player中Light组件作用,枪发光
gunParticles.Stop ();
gunParticles.Play ();
//枪的上次粒子效果停止和本次启动,和Player上ParticleSystem组件相关
gunLine.enabled = true;
//跟据前面,使Player中LineRenderder组件作用,枪有射线
gunLine.SetPosition (0, transform.position);
//设置gunLine的一端
shootRay.origin = transform.position;
//设定光束Ray的起始点
shootRay.direction = transform.forward;
//设定光束Ray的方向,player正向
if(Physics.Raycast (shootRay, out shootHit, range, shootableMask))
//计算shootRay和shootable层(shootableMask掩码下)的交点,在range限定的长度内,返回第一个交点给shootHit
{
EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> ();
//令shootHit的碰撞体也就是第一击中的物体上脚本组件EnemyHealth赋值给enemyHealth
if(enemyHealth != null)
//成功取得正确击中物体的脚本的话
{
enemyHealth.TakeDamage (damagePerShot, shootHit.point);
//执行EnemyHealth脚本中对应函数
}
gunLine.SetPosition (1, shootHit.point);
//设定gunLine的另一点为Ray第一命中的点,两点之间的线
}
else
{
gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range);
//否则设置gunLine另一端在shootRay方向上距离起始点Range长度的位置上,就是shootRay 100长度的LineRenderer表现
}
}
相关文章推荐
- 我是运营,我没有假期
- 肯特·贝克:改变人生的代码整理魔法
- 你应该学习哪种编程语言?
- 每个 Linux 游戏玩家都绝不想要的恼人体验
- 在 Fedora 上使用 Steam play 和 Proton 来玩 Windows 游戏
- [转]我们需要一种其他人能使用的编程语言
- Steam 让我们在 Linux 上玩 Windows 的游戏更加容易
- 如何使用 Steam Play 在 Linux 上玩仅限 Windows 的游戏
- 新一代iPad适配应用之游戏篇
- DB2编程序技巧(1)
- DB2编程序技巧 (四)
- 女人VS编程_国庆快乐
- DB2编程序技巧 (六)
- DB2编程序技巧 (三)
- DB2编程序技巧 (九)
- DB2编程序技巧 (七)
- DB2编程序小小技巧
- DB2编程序技巧 (五)
- VB实现的《QQ美女找茬游戏》作弊器实例
- DB2编程序技巧 (一)