您的位置:首页 > 移动开发 > Unity3D

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表现
        }
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息