2D Toolkit Forum

2D Toolkit => Support => Topic started by: DanRP on August 29, 2013, 04:53:18 pm

Title: Windows Store: Problem loading Texture2D / Creating a tk2dSprite
Post by: DanRP on August 29, 2013, 04:53:18 pm
Hello Everyone,

I'm just getting started with exporting for Windows Store / Windows 8 and I'm getting a run-time error that I can't figure out.  Here's the code:

Code: [Select]
GameObject oGameObject = null;
Texture2D oTexture = null;

oTexture = Resources.Load( pFilename, typeof(Texture2D) ) as Texture2D;

if (!ReferenceEquals(oTexture, null)) {

Rect tSize = new Rect(0, 0, oTexture.width, oTexture.height);
Vector2 tAnch = new Vector2( oTexture.width * OffsetX, oTexture.height * (1.0f - OffsetY));

tk2dSpriteCollectionSize tkCollectionSize = tk2dSpriteCollectionSize.ForTk2dCamera();

oGameObject = tk2dSprite.CreateFromTexture( oTexture, tkCollectionSize, tSize, tAnch );

    oSprite = oGameObject.GetComponent<tk2dSprite>();
}

I'm getting an error on this line:
Code: [Select]
oGameObject = tk2dSprite.CreateFromTexture( oTexture, tkCollectionSize, tSize, tAnch );
Code: [Select]
Exception: Object reference not set to an instance of an object.
InnerException:
AdditionalInfo:
  at tk2dSprite.Awake() in c:\data\Games\StackTheStatesUnity\Assets\TK2DROOT\tk2d\Code\Sprites\tk2dSprite.cs:line 25

  at tk2dSprite.UnityFastInvoke_Awake()


Here's what I know:
1) When I Debug.Log my oTexture object, it shows as "BaseObject: NotAvailableDuringDebugging"
2) I know the resource is being loaded because the width and height properties are correct (100)
3) This code works perfectly when exporting to android and iOS
4) I'm using 2D Toolkit version 2.1 final and Unity 4.2

It seems that something is wrong with my oTexture object when exporting for Windows Store...

Can anyone help me figure out why this code is failing?



Thanks!
Dan
Title: Re: Windows Store: Problem loading Texture2D / Creating a tk2dSprite
Post by: DanRP on August 29, 2013, 05:14:19 pm
Just to add...  There's another part of my app where I do a "Resources.Load" of a TK2D Sprite Collection.

Code: [Select]
tk2dSpriteCollectionData oPhysicsCollectionData = Resources.Load("Physics", typeof(tk2dSpriteCollectionData)) as tk2dSpriteCollectionData;
Debug.Log("oPhysicsCollectionData=" + oPhysicsCollectionData);

When I Debug.Log of the oPhysicsCollectionData object, I also get "BaseObject: NotAvailableDuringDebugging".

Is there something wrong with doing Resources.Load for Windows Store builds?
Title: Re: Windows Store: Problem loading Texture2D / Creating a tk2dSprite
Post by: DanRP on August 30, 2013, 12:59:07 am
According to the log file, it's crashing at line 25 of tk2dSprite.cs.

Code: [Select]
Exception: Object reference not set to an instance of an object.
InnerException:
AdditionalInfo:
  at tk2dSprite.Awake() in c:\data\Games\StackTheStatesUnity\Assets\TK2DROOT\tk2d\Code\Sprites\tk2dSprite.cs:line 25
  at tk2dSprite.UnityFastInvoke_Awake()


Here's the code around line 25:

Code: [Select]
24: mesh = new Mesh();
25: mesh.hideFlags = HideFlags.DontSave;
26: GetComponent<MeshFilter>().mesh = mesh;


It's almost as if the "mesh = new Mesh();" line maybe doesn't produce a valid instance of Mesh for some reason?  And this causes line 25 to crash?
Title: Re: Windows Store: Problem loading Texture2D / Creating a tk2dSprite
Post by: DanRP on September 04, 2013, 02:26:41 am
Ok, here's the problem...

There are some components used by tk2dsprite.cs and tk2dTextMesh.cs (and maybe others) that, for whatever reason, are null.  According to Unikron support, they are tagged as Required Components, but yet still seem to be null.

For instance, in the Awake() function of tk2dsprite.cs, there's a line:
Code: [Select]
GetComponent<MeshFilter>().mesh = mesh;
In this case, GetComponent<MeshFilter>() returns a null, so I had to change to code like this:
Code: [Select]
MeshFilter mf = GetComponent<MeshFilter>();
if (mf == null) { mf = gameObject.AddComponent<MeshFilter>(); }
mf.mesh = mesh;

There was one other place in tk2dsprite.cs and 2 places in tk2dTextMesh.cs where I had to do the same thing.

I hope this helps someone...

Dan