Ah, dang! I'll take a look at these and see if there's anything i can do. Thanks for the reports, and glad you enjoyed it!
bread
Creator of
Recent community posts
The patch was built off a specific iso rip. There appears to be some differences between all the rips circulating around, and this can cause issues with the patch. 2 things:
- You'll want to look around and try a few rips of the USA version. the one I used should be the most common USA version rip.
- additionally, you'll want to turn off checksum validation in the patcher settings. Sometimes, even with the correct rip, the validation step still fails due to Windows changing the metadata on the file when you download it. With checksum validation turned off the patcher will never fail, but if you still have the wrong base iso it will crash in dolphin almost instantly.
Hi,
I believe a while back i posted here with this error while using a bunch of quads:
Mesh '' has more than the 8 submeshes.
The fix was to point each quad at the same sprite sheet, rather than separate assets, which has worked great since.
On latest, it appears this has stopped working, as I am getting the error again. Hoping it's an easy fix?
Thank you!
I've noticed that the logic for playing audio for each letter read out does not function with the other draw orders. For random, it only plays audio if the letter that just appeared is further right than the others. For right-to-left, none of them play. It looks like it's because UpdateMesh implicitly assumes left-to-right when setting doPrintEventAfter. I'm a bit hesitant to mess around with this code because it's setting a lot of member variables unrelated to the audio. Is there a fix in the works for this?
Relevant code:
//just to get timing info for events //these are used to that positional data is updated before events are called doPrintEventAfter = false; doEventAfter = false; if (reading) { float divideAnimAmount = CurrentTextInfo.drawAnimData.animTime == 0f ? 0.0000001f : CurrentTextInfo.drawAnimData.animTime; //so it doesn't get NaN'd float myAnimPos = (myTime - CurrentTextInfo.readTime) / divideAnimAmount; // on a range between 0-1 on the curve, the position of the animation if(myAnimPos > 0f && i > latestNumber){ doEventAfter = true; //if(!playedSoundThisFrame){ // playedSoundThisFrame = true; //ignore 0-width space, as it's used for tacked-on events if(hyphenedText[i] != '\u200B') { //} doPrintEventAfter = true; if(hyphenedText[i] != ' ' && hyphenedText[i] != '\n') { lowestDrawnPosition = Mathf.Min(lowestDrawnPosition, CurrentTextInfo.pos.y); lowestDrawnPositionRaw = Mathf.Min(lowestDrawnPosition, CurrentTextInfo.pos.y + offset.y); //Debug.Log(CurrentTextInfo.pos.y); furthestDrawnPosition = Mathf.Max(furthestDrawnPosition, CurrentTextInfo.RelativeAdvance(characterSpacing).x + offset.x + TextBounds_rightOffset.x); } } latestNumber = Mathf.Max(latestNumber, i); //find latest number to start from next frame /* if(info[i].pos.y + info[i].size + lowestLineOffset.y < 0f && //this number is below the limit info[i].pos.y + info[i].size + lowestLineOffset.y > highestVisiblePoint){ //is this number taller than the current tallest number? highestVisiblePoint = info[i].pos.y + info[i].size + lowestLineOffset.y; tallestVisibleIndex = i; } */ } }else if(!Application.isPlaying || VerticalLimitStored == 0f || !(verticalLimitMode == VerticalLimitMode.AutoPause || verticalLimitMode == VerticalLimitMode.AutoPauseFull)){ //don't do this for autopauses latestNumber = hyphenedText.Length-1; lowestDrawnPosition = info[latestNumber].pos.y; //assume the final letter lowestDrawnPositionRaw = info[latestNumber].pos.y + offset.y; furthestDrawnPosition = rawBottomRightTextBounds.x; //this causes some sizes to be incorrect in-editor, but should be fine as text reads out } RecalculateTextBounds(); if(doEventAfter) { DoEvent(i); //do every event up to this integer } if(doPrintEventAfter) { PlaySound(i); //only play one sound this frame, from the first letter drawn this frame if(onPrintEvent != null) onPrintEvent.Invoke(); if(OnPrintEvent != null) OnPrintEvent(); }
Thanks!
Tried making a minimal scene with a repro but so far no luck. I can repro every time in the same way in one of my game's scenes but not in a smaller example, even when copying both UI's over. So I think you're right that it's some sort of timing issue. We are demoing at a con right now, so I'll keep trying when I have time but it may be a bit before I have it ready
I am on Unity 2018.4.14f1, and am on latest STM (v1.9.2).
When toggling the active state on some gameobjects using UI STMs that are set to the same font & not auto-read, I occasionally see something like this:
The second button is supposed to say "OPTIONS" here. I can repro it 100% of the time by opening this menu, closing it, opening a different menu with some similar STMs, closing that, and then opening the original menu again. The options text is always the one corrupted here, and in the other menu the text "-- Start --" is corrupted on opening that menu again a second time. Both menus are inactive on start. So, this seems related to OnEnable being called after the mesh has already been built once.
I have confirmed Rebuild() is being called on it when enabled. When I mouse over the button my code triggers a Rebuild that corrects the mesh.
Adding a call to WaitFrameThenRebuild in SuperTextMesh.OnEnable seems to fix the problem, but having to call Rebuild twice is not ideal for performance: https://pastebin.com/QimMki3u
If I call WaitFrameThenRebuild instead of Rebuild, rather than calling both as in my paste, only the first character on the options string is corrupted, and the rest are fine.
Any idea on this? Worst case I can keep my workaround in place, but I would love to be able to remove a second Rebuild call as it can be pretty costly.
Thanks!
Hi,
I am on Unity 2018.4.14f1, and have some local (unrelated to this issue) shader and code changes to STM v1.8.11.
Seeing this warning from the Unity CanvasRenderer when rendering 8 quads in the same line:
Mesh '' has more than the 8 submeshes. Extra submeshes will be ignored.
UnityEngine.CanvasRenderer:SetMesh(Mesh)
SuperTextMesh:ApplyMesh() (at Assets/ThirdParty/Clavian/SuperTextMesh/Scripts/SuperTextMesh.cs:3661)
SuperTextMesh:SetMesh(Single, Boolean) (at Assets/ThirdParty/Clavian/SuperTextMesh/Scripts/SuperTextMesh.cs:3657)
SuperTextMesh:SetMesh(Single) (at Assets/ThirdParty/Clavian/SuperTextMesh/Scripts/SuperTextMesh.cs:3608)
<ReadOutText>d__232:MoveNext() (at Assets/ThirdParty/Clavian/SuperTextMesh/Scripts/SuperTextMesh.cs:1487)
MEC.Timing:RunCoroutineInternal(IEnumerator`1, Segment, Nullable`1, String, CoroutineHandle, Boolean) (at Assets/ThirdParty/Trinary Software/Timing.cs:2438)
MEC.Timing:RunCoroutine(IEnumerator`1, String) (at Assets/ThirdParty/Trinary Software/Timing.cs:1387)
SuperTextMesh:Read(Single) (at Assets/ThirdParty/Clavian/SuperTextMesh/Scripts/SuperTextMesh.cs:1311)
SuperTextMesh:Rebuild(Single, Boolean) (at Assets/ThirdParty/Clavian/SuperTextMesh/Scripts/SuperTextMesh.cs:1229)
SuperTextMesh:Rebuild() (at Assets/ThirdParty/Clavian/SuperTextMesh/Scripts/SuperTextMesh.cs:1195)
SuperTextMesh:set_text(String) (at Assets/ThirdParty/Clavian/SuperTextMesh/Scripts/SuperTextMesh.cs:606)
SuperTextMesh:set_Text(String) (at Assets/ThirdParty/Clavian/SuperTextMesh/Scripts/SuperTextMesh.cs:614)
I can't find information about that unity warning anywhere, but it is clearly ignoring the additional quads.
Since we have a modified version of the plugin, it is a bit difficult to grab latest. I didn't see anything in the latest update notes related to quads, so it seems unlikely this has been fixed? Is that correct?
Is there some setting I can configure to increase the submesh limit?
Is it possible to combine quad meshes as they are read out?
Thanks!