예제 #1
0
        IEnumerator WaitMoveBulletToLine(BulletStruct es, GameObject bullet, Vector3 v)
        {
            BulletTrace xBulletTrace = new BulletTrace();

            xBulletTrace.target   = null;
            xBulletTrace.bullet   = bullet;
            xBulletTrace.Index    = es.Index;
            xBulletTrace.gameID   = this.gameObject.GetInstanceID();
            xBulletTrace.movetype = es.moveType;
            mxBulletTraceInfo.Add(xBulletTrace);

            Vector3 vForward   = this.gameObject.transform.forward;
            Vector3 vTargetPos = vForward * es.Distance + bullet.transform.position;

            if (v != Vector3.zero)
            {
                vTargetPos = v;
            }
#if DG_Tweening
            float   fDis = Vector3.Distance(vTargetPos, bullet.transform.position);
            Tweener t    = bullet.transform.DOMove(vTargetPos, fDis / es.Speed);
            t.SetEase(Ease.Linear);
            t.OnComplete(delegate()
            {
                int arrayIndex = -1;

                for (int i = 0; i < mxBulletTraceInfo.Count; ++i)
                {
                    if (mxBulletTraceInfo[i].bullet.GetInstanceID() == bullet.GetInstanceID())
                    {
                        arrayIndex = i;
                        break;
                    }
                }

                mxAnimationEvent.OnBulletTouchPositionEvent(this.gameObject, vTargetPos, es.AnimationType, mxBulletTraceInfo[arrayIndex].Index);

                mxBulletTraceInfo.RemoveAt(arrayIndex);


                Destroy(bullet);

                if (es.TouchEffect)
                {
                    GameObject _startEff = GameObject.Instantiate <GameObject>(es.TouchEffect, vTargetPos, Quaternion.identity);
                    _startEff.SetActive(true);
                    Destroy(_startEff, es.TouchEffLifeTime);
                }
                if (es.TouchAudio)
                {
                    AudioClip _startEff = GameObject.Instantiate <AudioClip>(es.TouchAudio, vTargetPos, Quaternion.identity);
                    AudioSource.PlayClipAtPoint(_startEff, transform.position);
                    Destroy(_startEff, es.TouchEffLifeTime);
                }
            });
#endif
            yield return(new WaitForEndOfFrame());
        }
예제 #2
0
파일: Weapon.cs 프로젝트: fippan/Fish
 protected virtual void Start()
 {
     bulletTrace        = GetComponent <BulletTrace>();
     weaponAudioManager = GetComponent <WeaponAudioManager>();
     anim = GetComponent <Animator>();
     if (magPrefab != null)
     {
         currentMag = Instantiate(magPrefab, magPoint);
     }
     spreadingBulletsEnabled = spreadingBullets;
 }
예제 #3
0
    IEnumerator WaitMoveBulletToTarget(BulletStruct es, GameObject bullet, GameObject target)
    {
        BulletTrace xBulletTrace = new BulletTrace();

        xBulletTrace.target   = target;
        xBulletTrace.bullet   = bullet;
        xBulletTrace.index    = es.index;
        xBulletTrace.gameID   = this.gameObject.GetInstanceID();
        xBulletTrace.movetype = es.moveType;
        mxBulletTraceInfo.Add(xBulletTrace);

        float   fMinDis    = 0.1f;
        Vector3 vTargetPos = target.transform.position;

        while (true)
        {
            if (target == null)
            {
                Vector3 _vec     = vTargetPos - bullet.transform.position;
                float   fDis     = Vector3.Distance(vTargetPos, bullet.transform.position);
                float   fMoveDis = es.Speed * Time.deltaTime;
                if (fMoveDis > fDis)
                {
                    bullet.transform.position = vTargetPos;
                }
                else
                {
                    bullet.transform.Translate(_vec.normalized * es.Speed * Time.deltaTime);
                }
            }
            else
            {
                vTargetPos = target.transform.position;
                float fDis = Vector3.Distance(vTargetPos, bullet.transform.position);
                if (fDis > fMinDis)
                {
                    Vector3 _vec     = vTargetPos - bullet.transform.position;
                    float   fMoveDis = es.Speed * Time.deltaTime;
                    if (fMoveDis > fDis)
                    {
                        bullet.transform.position = vTargetPos;
                    }
                    else
                    {
                        bullet.transform.Translate(_vec.normalized * es.Speed * Time.deltaTime);
                    }
                }
            }

            if (Vector3.Distance(bullet.transform.position, vTargetPos) < fMinDis)
            {
                if (target == null)
                {
                    mxAnimationEvent.OnBulletTouchPositionEvent(bullet, vTargetPos, -1);
                }
                else
                {
                    int arrayIndex = -1;

                    for (int i = 0; i < mxBulletTraceInfo.Count; ++i)
                    {
                        if (mxBulletTraceInfo [i].bullet.GetInstanceID() == bullet.GetInstanceID())
                        {
                            arrayIndex = i;
                            break;
                        }
                    }

                    mxAnimationEvent.OnBulletTouchTargetEvent(bullet, target, mxBulletTraceInfo [arrayIndex].index);
                    mxBulletTraceInfo.RemoveAt(arrayIndex);
                }

                Destroy(bullet);

                if (es.TouchEffect)
                {
                    GameObject _startEff = GameObject.Instantiate <GameObject> (es.TouchEffect, vTargetPos, Quaternion.identity);
                    _startEff.SetActive(true);
                    Destroy(_startEff, es.TouchEffLifeTime);
                }
                if (es.TouchAudio)
                {
                    AudioClip _startEff = GameObject.Instantiate <AudioClip> (es.TouchAudio, vTargetPos, Quaternion.identity);
                    AudioSource.PlayClipAtPoint(_startEff, transform.position);
                    Destroy(_startEff, es.TouchEffLifeTime);
                }
                yield break;
            }

            yield return(new WaitForEndOfFrame());
        }
    }
예제 #4
0
    IEnumerator WaitMoveBulletToLine(BulletStruct es, GameObject bullet, Vector3 v)
    {
        BulletTrace xBulletTrace = new BulletTrace();

        xBulletTrace.target   = null;
        xBulletTrace.bullet   = bullet;
        xBulletTrace.index    = es.index;
        xBulletTrace.gameID   = this.gameObject.GetInstanceID();
        xBulletTrace.movetype = es.moveType;
        mxBulletTraceInfo.Add(xBulletTrace);

        Vector3 vForward   = this.gameObject.transform.forward;
        Vector3 vTargetPos = vForward * es.Distance + bullet.transform.position;

        if (v != Vector3.zero)
        {
            vTargetPos = v;
        }

        float   fDis = Vector3.Distance(vTargetPos, bullet.transform.position);
        Tweener t    = bullet.transform.DOMove(vTargetPos, fDis / es.Speed);

        t.OnComplete(delegate()
        {
            int arrayIndex = -1;

            for (int i = 0; i < mxBulletTraceInfo.Count; ++i)
            {
                if (mxBulletTraceInfo [i].bullet.GetInstanceID() == bullet.GetInstanceID())
                {
                    arrayIndex = i;
                    break;
                }
            }

            mxAnimationEvent.OnBulletTouchPositionEvent(this.gameObject, vTargetPos, mxBulletTraceInfo [arrayIndex].index);

            mxBulletTraceInfo.RemoveAt(arrayIndex);


            Destroy(bullet);

            if (es.TouchEffect)
            {
                GameObject _startEff = GameObject.Instantiate <GameObject> (es.TouchEffect, vTargetPos, Quaternion.identity);
                _startEff.SetActive(true);
                Destroy(_startEff, es.TouchEffLifeTime);
            }
            if (es.TouchAudio)
            {
                AudioClip _startEff = GameObject.Instantiate <AudioClip> (es.TouchAudio, vTargetPos, Quaternion.identity);
                AudioSource.PlayClipAtPoint(_startEff, transform.position);
                Destroy(_startEff, es.TouchEffLifeTime);
            }
        });

        yield return(new WaitForEndOfFrame());

        /*
         * while (true)
         * {
         *      float fDis = Vector3.Distance (vTargetPos, go.transform.position);
         *      if (fDis > fMinDis)
         *      {
         *              Vector3 _vec = vTargetPos - go.transform.position;
         *              float fMoveDis = es.Speed * Time.deltaTime;
         *              if (fMoveDis > fDis)
         *              {
         *                      go.transform.position = vTargetPos;
         *              }
         *              else
         *              {
         *                      go.transform.Translate (_vec.normalized * es.Speed * Time.deltaTime);
         *              }
         *      }
         *
         *      if (fDis < fMinDis)
         *      {
         *              Destroy (go);
         *
         *              if (es.TouchEffect)
         *              {
         *                      GameObject _startEff = Instantiate (es.TouchEffect, vTargetPos, Quaternion.identity) as GameObject;
         *                      _startEff.SetActive (true);
         *                      Destroy (_startEff, es.TouchEffLifeTime);
         *              }
         *              if (es.TouchAudio)
         *              {
         *                      AudioClip _startEff = Instantiate (es.TouchAudio, vTargetPos, Quaternion.identity) as AudioClip;
         *                      AudioSource.PlayClipAtPoint(_startEff, transform.position);
         *                      Destroy (_startEff, es.TouchEffLifeTime);
         *              }
         *              yield break;
         *      }
         *
         *      yield return new WaitForEndOfFrame ();
         * }
         */
    }
예제 #5
0
        IEnumerator WaitMoveBulletToTarget(BulletStruct es, GameObject bullet, GameObject target)
        {
            if (bullet != null &&
                target != null &&
                es != null)
            {
                BulletTrace xBulletTrace = new BulletTrace();
                xBulletTrace.target   = target;
                xBulletTrace.bullet   = bullet;
                xBulletTrace.Index    = es.Index;
                xBulletTrace.gameID   = this.gameObject.GetInstanceID();
                xBulletTrace.movetype = es.moveType;
                mxBulletTraceInfo.Add(xBulletTrace);

                Vector3 vTargetPos = target.transform.position;
                float   fDis       = Vector3.Distance(vTargetPos, bullet.transform.position);
                float   fTime      = fDis / es.Speed;

#if DG_Tweening
                Tweener tween = bullet.transform.DOMove(vTargetPos, fTime);                //.OnComplete(OnBulletTouchTargetComplete);

                float fMinDis = 0.3f;
                while (true)
                {
                    if (target != null && bullet != null)
                    {
                        if (Vector3.Distance(vTargetPos, bullet.transform.position) < fMinDis)
                        {
                            {
                                int arrayIndex = -1;

                                for (int i = 0; i < mxBulletTraceInfo.Count; ++i)
                                {
                                    if (mxBulletTraceInfo[i].bullet.GetInstanceID() == bullet.GetInstanceID())
                                    {
                                        arrayIndex = i;
                                        break;
                                    }
                                }

                                mxAnimationEvent.OnBulletTouchTargetEvent(bullet, target, 0, mxBulletTraceInfo[arrayIndex].Index);
                                mxBulletTraceInfo.RemoveAt(arrayIndex);
                            }

                            Destroy(bullet);

                            if (es.TouchEffect)
                            {
                                GameObject _startEff = GameObject.Instantiate <GameObject>(es.TouchEffect, vTargetPos, Quaternion.identity);
                                _startEff.SetActive(true);
                                Destroy(_startEff, es.TouchEffLifeTime);
                            }
                            if (es.TouchAudio)
                            {
                                AudioClip _startEff = GameObject.Instantiate <AudioClip>(es.TouchAudio, vTargetPos, Quaternion.identity);
                                AudioSource.PlayClipAtPoint(_startEff, transform.position);
                                Destroy(_startEff, es.TouchEffLifeTime);
                            }
                        }
                        else
                        {
                            if (vTargetPos != target.transform.position)
                            {
                                //tween.ChangeEndValue(target.transform.position, true);
                            }
                        }
                    }
                    else
                    {
                        break;
                    }

                    yield return(new WaitForEndOfFrame());
                }
#endif
            }

            yield return(null);
        }