示例#1
0
    public void Add(Vector3 impactPosition, float maxIntensity, float radius, float maxLifeTime, float speed)
    {
        ShieldEffectNode node = null;

        if (nodes.Count < 16)
        {
            node = new ShieldEffectNode();
            nodes.Add(node);
        }
        else
        {
            node = nodes.Find(x => x.free == true);
        }

        if (node != null)
        {
            node.pos = transform.InverseTransformPoint(impactPosition);

            node.maxRadius = radius;
            node.speed     = speed;
            node.minRadius = 0.0f;

            node.t           = 0;
            node.maxLifeTime = maxLifeTime;

            node.startIntensity = maxIntensity;
        }
    }
示例#2
0
    void Update()
    {
        Vector3 cam = Camera.main.transform.position;

        for (int m = 0; m < 4; m++)
        {
            for (int i = 0; i < 4; i++)
            {
                int n = m * 4 + i;

                if (nodes.Count >= n + 1)
                {
                    ShieldEffectNode node = nodes[n];
                    if (!node.free)
                    {
                        node.Step(Time.deltaTime);
                        _PositionMatrix.SetRow(i, new Vector4(node.pos.x, node.pos.y, node.pos.z, 1.0f));
                        _Radius[i]       = node.radius;
                        _Instensities[i] = node.intensity;
                    }
                    else
                    {
                        nodes.RemoveAt(i);
                        _PositionMatrix.SetRow(i, new Vector4(cam.x, cam.y, cam.z, 1.0f));
                        _Radius[i] = 0.0f;

                        _Instensities[i] = 0.0f;
                        i--;
                    }
                }
                else
                {
                    _PositionMatrix.SetRow(i, new Vector4(cam.x, cam.y, cam.z, 1.0f));
                    _Instensities[i] = 0.0f;
                    _Radius[i]       = 0.0f;
                }

                meshR.material.SetMatrix("_Positions" + m, _PositionMatrix);
                meshR.material.SetVector("_Intensities" + m, _Instensities);
                meshR.material.SetVector("_Radius" + m, _Radius);
            }
        }

        transform.rotation = Quaternion.identity;
    }