Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by fvhein · Feb 28, 2014 at 05:59 PM · materialeditor-scriptingassetpostprocessor

Material.mainTexture not working outside of runtime?

I work on an editor script which should automatically create a material and add a texture to it during the import of a texture, using OnPostprocessTexture.

Now as far as I understand it, textures are added to materials through Material.mainTexture or Material.setTexture. But while things like SetColor are applied without problem during the import, the texture won't get connected to the material.

Is it possible that Material.mainTexture can not be used outside of runtime? How should I apply the texture in this case?

I mainly used the code from here: AssetPostprocessor reference to asset being processed?

 using UnityEngine;
 using System.Collections;
 using UnityEditor;
  
 public class UITextureImport : AssetPostprocessor
 {
 void OnPostprocessTexture(Texture2D texture)
     {
         if (assetPath.Contains("Assets/Textures/UI/") && assetPath.Contains(".png"))
         {
             // Create a matching material if one doesn't exist.
             string materialPath = assetPath.Replace("Assets/Textures/UI/","Assets/Materials/UI/");            
             materialPath = materialPath.Substring(0,assetPath.LastIndexOf("/") + 1);
             
             if (!Directory.Exists(materialPath))
             {
                 Directory.CreateDirectory(materialPath);
             }
             
             materialPath += "/" + Path.GetFileNameWithoutExtension(assetPath) + ".mat";
  
             Material material = (Material)AssetDatabase.LoadAssetAtPath(materialPath,typeof(Material));
  
             if (material == null)
             {
                 // Material doesn't exist, so create it now.
                 material = new Material(Shader.Find("UnlitAlphaImage"));
                 material.mainTexture = texture;
                 AssetDatabase.CreateAsset(material, materialPath);
             }
             else
             {
                 // Material exists, so only assign the new texture to it.
                 material.mainTexture = texture;
             }
         }
     }
 }


Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by RaL · Sep 24, 2014 at 10:12 AM

You need to change material.mainTexture = texture to:

material.mainTexture = Resources.LoadAssetAtPath<Texture> (assetPath);
You will need to call that via EditorApplication.delayCall to make sure Unity has finished importing the texture before you try loading it.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

21 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Setting an object's material causes strange behavior in custom editor 0 Answers

Why won't this (very simple) editor script compile? CS1041 1 Answer

Missing textures & materials in asset bundle 1 Answer

How can I change the default max size of a texture from an editor script (in import settings)? 1 Answer

Normal map not rendered until the material asset is selected in the inspector 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges