public void Register(Type type, Material material)
        {
            if (!material.enableInstancing)
            {
                Debug.LogWarning("material enableInstance == false");
                return;
            }

            m_registered[type] = new Tuple <Mesh, Material>(GraphicsUtility.CreateQuad(), material);
        }
        private void Initialize()
        {
            if (m_types != null)
            {
                Debug.LogWarning("Already initialized");
                return;
            }

            m_typeToMeshAndMaterial = new Dictionary <Type, Tuple <Mesh, Material> >();
            foreach (KeyValuePair <Type, Tuple <Mesh, Material> > kvp in m_registered)
            {
                if (kvp.Value != null)
                {
                    m_typeToMeshAndMaterial.Add(kvp.Key, kvp.Value);
                }
            }

            foreach (KeyValuePair <Type, string> kvp in m_builtIn)
            {
                if (m_typeToMeshAndMaterial.ContainsKey(kvp.Key))
                {
                    continue;
                }

                Material material = Resources.Load <Material>(kvp.Value);
                if (material != null)
                {
                    m_typeToMeshAndMaterial.Add(kvp.Key, new Tuple <Mesh, Material>(GraphicsUtility.CreateQuad(), material));
                }
            }

            int index = 0;

            m_types = new Type[m_typeToMeshAndMaterial.Count];
            foreach (Type type in m_typeToMeshAndMaterial.Keys)
            {
                m_types[index] = type;
                index++;
            }

            m_types = GetTypes(m_types);
            OnIsOpenedChanged();
            m_editor.IsOpenedChanged           += OnIsOpenedChanged;
            m_editor.BeforePlaymodeStateChange += OnBeforePlayModeStateChange;
            m_editor.PlaymodeStateChanged      += OnPlayModeStateChanged;
        }
Esempio n. 3
0
        private void TryToAddColliders(ExposeToEditor obj)
        {
            if (obj == null)
            {
                return;
            }

            if (obj.Colliders == null || obj.Colliders.Length == 0)
            {
                List <Collider> colliders = new List <Collider>();
                Rigidbody       rigidBody = obj.BoundsObject.GetComponentInParent <Rigidbody>();

                bool isRigidBody = rigidBody != null;
                if (obj.EffectiveBoundsType == BoundsType.Any)
                {
                    if (obj.MeshFilter != null)
                    {
                        if (obj.AddColliders && !isRigidBody)
                        {
                            MeshCollider collider = obj.BoundsObject.AddComponent <MeshCollider>();
                            collider.convex     = isRigidBody;
                            collider.sharedMesh = obj.MeshFilter.sharedMesh;
                            colliders.Add(collider);
                        }
                    }
                    else if (obj.SkinnedMeshRenderer != null)
                    {
                        if (obj.AddColliders && !isRigidBody)
                        {
                            MeshCollider collider = obj.BoundsObject.AddComponent <MeshCollider>();
                            collider.convex     = isRigidBody;
                            collider.sharedMesh = obj.SkinnedMeshRenderer.sharedMesh;
                            colliders.Add(collider);
                        }
                    }
                    else if (obj.SpriteRenderer != null)
                    {
                        if (obj.AddColliders && !isRigidBody)
                        {
                            BoxCollider collider = obj.BoundsObject.AddComponent <BoxCollider>();
                            collider.size = obj.SpriteRenderer.sprite.bounds.size;
                            colliders.Add(collider);
                        }
                    }
                }
                else if (obj.EffectiveBoundsType == BoundsType.Mesh)
                {
                    if (obj.MeshFilter != null)
                    {
                        if (obj.AddColliders && !isRigidBody)
                        {
                            MeshCollider collider = obj.BoundsObject.AddComponent <MeshCollider>();
                            collider.convex     = isRigidBody;
                            collider.sharedMesh = obj.MeshFilter.sharedMesh;
                            colliders.Add(collider);
                        }
                    }
                }
                else if (obj.EffectiveBoundsType == BoundsType.SkinnedMesh)
                {
                    if (obj.SkinnedMeshRenderer != null)
                    {
                        if (obj.AddColliders && !isRigidBody)
                        {
                            MeshCollider collider = obj.BoundsObject.AddComponent <MeshCollider>();
                            collider.convex     = isRigidBody;
                            collider.sharedMesh = obj.SkinnedMeshRenderer.sharedMesh;
                            colliders.Add(collider);
                        }
                    }
                }
                else if (obj.EffectiveBoundsType == BoundsType.Sprite)
                {
                    if (obj.SpriteRenderer != null)
                    {
                        if (obj.AddColliders && !isRigidBody)
                        {
                            BoxCollider collider = obj.BoundsObject.AddComponent <BoxCollider>();
                            collider.size = obj.SpriteRenderer.sprite.bounds.size;
                            colliders.Add(collider);
                        }
                    }
                }
                else if (obj.EffectiveBoundsType == BoundsType.Custom)
                {
                    if (obj.AddColliders && !isRigidBody)
                    {
                        Mesh box = GraphicsUtility.CreateCube(Color.black, obj.CustomBounds.center, 1, obj.CustomBounds.extents.x * 2, obj.CustomBounds.extents.y * 2, obj.CustomBounds.extents.z * 2);

                        MeshCollider collider = obj.BoundsObject.AddComponent <MeshCollider>();
                        collider.convex = isRigidBody;

                        collider.sharedMesh = box;
                        colliders.Add(collider);
                    }
                }

                obj.Colliders = colliders.ToArray();
            }
        }