private void AddObstructor(Vec2 size, Vec2 offset)
        {
            var o1 = new Obstructor <MaterialThing>(size, position + Offset(offset), this);

            Obstructors.Add(o1);
            //AutoUpdatables.Add(o1);
        }
        private void AddPlatformObstructor(Vec2 size, Vec2 offset)
        {
            var o1 = new Obstructor <IPlatform>(size, position + Offdirify(offset), this);

            PlatformObstructors.Add(o1);
            //AutoUpdatables.Add(o1);
        }
    IEnumerator DetectPlayerObstructions()
    {
        while(true)
        {
            yield return new WaitForSeconds(0.5f);

            Vector3 direction = (playerTrans.position - Camera.main.transform.position).normalized;
            RaycastHit rayCastHit;

            if(Physics.Raycast(Camera.main.transform.position, direction, out rayCastHit, Mathf.Infinity))
            {
                Obstructor obs = rayCastHit.collider.gameObject.GetComponent<Obstructor>();
                if(obs)
                {
                    obs.SetTransparent();
                    m_LastObstructor = obs;
                }
                else
                {
                    if(m_LastObstructor)
                    {
                        m_LastObstructor.SetToNormal();
                        m_LastObstructor = null;
                    }
                }
            }

        }
    }
 public void Receive <T>(Obstructor <T> obstructor) where T : class
 {
 }