示例#1
0
    public void MagicGuidePartical_CallBack()
    {
        CollisionHitCallbackStruct data = new CollisionHitCallbackStruct()
        {
            targetObj = target, hitPoint = target ? target.transform.position : Vector3.zero
        };
        //真正的回调
        bool result = false;

        if (CollisionCallback != null)
        {
            result = CollisionCallback(data);
        }
        //如果结果判定可以触发效果则触发
        if (result && CollisionCallback != null)
        {
            //在该位置生成粒子
            if (CollisionPartical)
            {
                GameObject go = GameObject.Instantiate(CollisionPartical);
                go.transform.position = data.hitPoint + Vector3.up * 1.5f;
                ParticalControlEntry collisionEntry = go.GetComponent <ParticalControlEntry>();
                if (collisionEntry)
                {
                    collisionEntry.Init(go.transform.position, collisionForward, collisionColor, 0, null, collisionRange, target);
                }
            }
        }
    }
示例#2
0
    /// <summary>
    /// 开火
    /// </summary>
    void StormRaids_Shot()
    {
        tempShotCount++;
        if (tempShotCount > MaxShotCount)
        {
            CancelInvoke("StormRaids_Shot");
            return;
        }
        //生成新的发射
        GameObject go = GameObject.Instantiate(tempChildObj);

        go.transform.SetParent(transform);
        go.transform.position = transform.position +
                                go.transform.TransformPoint(new Vector3(UnityEngine.Random.Range(-4, 4), UnityEngine.Random.Range(0, 4), 0));
        Vector3 thisForward = (transform.position + transform.forward * 20 - go.transform.position).normalized;

        go.transform.forward = thisForward;
        ParticalControlEntry particalControlEntry = go.GetComponent <ParticalControlEntry>();

        if (particalControlEntry != null)
        {
            particalControlEntry.Init(go.transform.position, go.transform.forward, Color.red, layerMask, CollisionCallback, 1);
        }
        go.SetActive(true);
        StormRaids_Shot();
    }
示例#3
0
 /// <summary>
 /// 在显示的时候检测一次
 /// </summary>
 private void OnEnable()
 {
     if (range > 0 && CallBack != null)
     {
         Ray               ray      = new Ray(transform.position, transform.forward);
         RaycastHit[]      rchs     = Physics.RaycastAll(ray, range, layerMask);
         List <GameObject> objsList = new List <GameObject>();
         if (rchs != null && rchs.Length > 0)
         {
             rchs = rchs.OrderBy(temp => Vector3.Distance(temp.point, transform.position)).ToArray();
             foreach (RaycastHit rch in rchs)
             {
                 if (objsList.Contains(rch.transform.gameObject))
                 {
                     continue;
                 }
                 objsList.Add(rch.transform.gameObject);
                 bool result = CallBack(new CollisionHitCallbackStruct()
                 {
                     targetObj = rch.transform.gameObject, hitPoint = rch.point
                 });
                 if (result)
                 {
                     //生成粒子
                     GameObject go = GameObject.Instantiate(collisionObj);
                     go.transform.position = rch.point;
                     ParticalControlEntry particalControlEntry = go.GetComponent <ParticalControlEntry>();
                     if (particalControlEntry)
                     {
                         particalControlEntry.Init(rch.point, transform.forward, color, layerMask, CallBack, 1);//这里的范围不起作用
                     }
                     else
                     {
                         go.transform.forward = -transform.forward;
                     }
                     if (onlyNear)//只生成第一个
                     {
                         break;
                     }
                 }
             }
         }
     }
 }
示例#4
0
    /// <summary>
    /// 发射
    /// </summary>
    void LightningImpact_Shot()
    {
        Ray ray = new Ray(transform.position, transform.forward);

        RaycastHit[] rchs = Physics.RaycastAll(ray, range, layerMask);
        rchs = Physics.CapsuleCastAll(transform.position, transform.position + transform.forward, 0.5f, transform.forward, range * 10);
        if (rchs != null && rchs.Length > 0 && CallBack != null)
        {
            List <GameObject> objList = new List <GameObject>();
            foreach (RaycastHit rch in rchs)
            {
                if (objList.Contains(rch.transform.gameObject))
                {
                    continue;
                }
                objList.Add(rch.transform.gameObject);
                bool result = CallBack(new CollisionHitCallbackStruct()
                {
                    targetObj = rch.transform.gameObject, hitPoint = rch.point
                });
                if (result)
                {
                    //生成粒子
                    GameObject go = GameObject.Instantiate(collisionObj);
                    Destroy(go, 5);
                    go.transform.position = rch.point;
                    ParticalControlEntry particalControlEntry = go.GetComponent <ParticalControlEntry>();
                    if (particalControlEntry)
                    {
                        particalControlEntry.Init(rch.point, transform.forward, Color.red, layerMask, null, 1);//这里的范围不起作用
                    }
                    else
                    {
                        go.transform.forward = -transform.forward;
                    }
                }
            }
        }
        Invoke("LightningImpact_Shot", checkIntervalTime);
    }
    /// <summary>
    /// 开火
    /// </summary>
    void RoarOfEarth_Shot()
    {
        tempShotCount++;
        if (tempShotCount > MaxShotCount)
        {
            CancelInvoke("RoarOfEarth_Shot");
            return;
        }

        //生成新的发射
        GameObject go = GameObject.Instantiate(tempChildObj);

        go.transform.SetParent(transform);
        go.transform.position = transform.position + transform.forward * tempShotCount * EveryDistance;
        go.transform.forward  = transform.forward;
        ParticalControlEntry particalControlEntry = go.GetComponent <ParticalControlEntry>();

        if (particalControlEntry != null)
        {
            particalControlEntry.Init(go.transform.position, go.transform.forward, Color.red, layerMask, CollisionCallback, 1);
        }
        go.SetActive(true);
    }