Esempio n. 1
0
 public void RemoveSplatter(SplatterScript splatter)
 {
     splatterList.Remove(splatter);
     if (splatter != null)
     {
         Destroy(splatter.gameObject);
     }
 }
Esempio n. 2
0
    // Update is called once per frame
    public void AddSplatter(Transform trn, Collision collision, Color color)
    {
        SplatterScript splatter = Instantiate(splatterPrefab);

        splatter.transform.position = trn.position;
        splatter.Init(color, true);
        bool    willFit   = true;
        float   splatSize = 2f;
        Vector3 pos       = collision.contacts[0].point;
        Vector3 normal    = collision.contacts[0].normal;

        if (normal == collision.collider.transform.right || normal == -collision.collider.transform.right)
        {
            float diff = Mathf.Abs(Vector3.Dot(pos - collision.collider.transform.position, collision.collider.transform.up));
            float max  = (collision.collider.transform.localScale.y - splatSize) / 2;
            if (diff > max)
            {
                willFit = false;
            }
        }
        else if (normal == collision.collider.transform.up || normal == -collision.collider.transform.up)
        {
            float diff = Mathf.Abs(Vector3.Dot(pos - collision.collider.transform.position, collision.collider.transform.right));
            float max  = (collision.collider.transform.localScale.x - splatSize) / 2;
            if (diff > max)
            {
                willFit = false;
            }
        }
        else
        {
            willFit = false;
        }

        if (willFit)
        {
            SplatScript splat = Instantiate(splatPrefab);
            splat.Init(collision.transform, normal, pos + normal * 0.001f, color, 2f);
        }

        splatterList.Add(splatter);
        while (splatterList.Count > 100)
        {
            splatterList[0].Remove();
        }
    }