- Home /
Embedded resources for the managed plugin pictures
Hi, I am developing a Unity managed plugin where my dll consists of classes and functions. As I want to embed png images to my dll- embedded resources- I can not read the images from the released dll at the Unity environment. Here are my checklist for the embedded resources: -images are dragged and dropped to the solution, I can see them at the mono with my classes. -each of them has a unique id -each of them are signed with the EmbeddedResource build action
Here is my code from dll function that is called at the Unity project's OnGui:
System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream myStream = myAssembly.GetManifestResourceStream("QBoard");
byte[] img = ReadFully (myStream);
questionTexture.LoadImage(img)
myAssembly = Assembly.GetExecutingAssembly();
GUI.Box (new Rect (dWidth/2-50, dHeight/2-50,200,50),new GUIContent(my2DTexture));
ReadFully function:
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[16*1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
Since the problem is from dll, the errors at the Unity is:
NullReferenceException: Object reference not set to an instance of an object
Finally, as a small test, if I call the image from the embedded resources and print its size it works however the problem is at loading image to texture.
try
{
System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream myStream = myAssembly.GetManifestResourceStream("QBoard");
img = ReadFully (myStream);
print(img.Length);
}
Will be thankful for the helps or any ideas.
It is solved. It was my stupid mistake with the variable initialization. Following code is working:
try
{
System.Reflection.Assembly myAssembly =
System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream myStream = myAssembly.Get$$anonymous$$anifestResourceStream("QBoard");
img = ReadFully (myStream);
}
catch
{
print("Error accessing resources!");
}
Texture2D myTexture = new Texture2D(2, 2);
myTexture.LoadImage(img);
GUI.Box (new Rect (dWidth/2-50, dHeight/2-50,200,50),new
GUIContent(myObject.text,myTexture));
Your answer
Follow this Question
Related Questions
Why can't I build Web Player in Unity while I have no problems with building standalone versions? 2 Answers
Is it possible to build a standalone .net application that link UnityEngine.dll 2 Answers
How to access unmanaged dlls in Unity 1 Answer