Nice! I tried doing something similar before but sadly since the way I did it ended up having to render on the fly every frame you could actually *see* them being rendered due to the performance hit. I might look into this in my future projects as it looks cleaner with the way you did it. Can you provide what you edited the hitboxscript to in order to get this effect?

Great work!

52

(2 replies, posted in General)

As part of the HDRP, you'll need to upgrade all the materials used in UFE's package as they rely on being used with the Standard Shader materials (Legacy). Unfortunately, some of the materials are also custom written in the Standard Shader so things won't look exactly as they did in the Standard Shader.

53

(16 replies, posted in General)

from DefaultBattleGUI.cs:

this.player1GUI.gauges[i].fillAmount = (float)player1.controlsScript.currentGaugesPoints[i] / UFE.config.player1Character.maxGaugePoints;

That checks every frame to calculate the fillAmount for Player 1. So all you need to do is know which guage you're setting as this "always increase" gauge and somewhere basically just increase

player1.controlsScript.currentGaugesPoints[indexNumberOfSpecificGaugeThatIncreasesOnItsOwn]

and then the default battle gui will take care of the amount of fill for that.

54

(5 replies, posted in Animation)

Try starting a new prefab of your character or of Robot Kyle and see if the new prefab fixes it. Sometimes Unity can be weird about updating the prefabs in regard to animation or avatars.

55

(16 replies, posted in General)

Np, I also edited my post with an updated pseudo script for the Update(). Basically add the amount you want to be added every frame, then check if the user exceeds the maximum, and set it to the maximum in case.

Also, I would not suggest updating the gauge every frame but instead adding some code that basically does it on a timed interval. It's just more difficult/complex to give as an example, but you can find plenty of resources online about how to do an interval based update on the meter.

I would also caution that I'm unsure how this will work in the rollback netcode system as I'm very unfamiliar with that system to say in any educated way. But at least it'd be a start.

56

(16 replies, posted in General)

Ok. So my suggestion would be to create a new script and attach it to the Battle GUI prefab. There you'd use the OnRoundBegins() and OnRoundEnds() event handler in the script. (See: http://www.ufe3d.com/doku.php/code )

Basically that new script would have a boolean like

increaseMeter

in it. And in the Update() of the script you'd do something like

if (increaseMeter) { 
// Add 1 to Player 1's gauge.
// Add 1 to Player 2's gauge.
// If Player 1's gauge is exceeding the maximum, set the gauge to the maximum
// If Player 2's gauge is exceeding the maximum, set the gauge to the maximum
}

Then in the above event handlers you just set the boolean to true/false.

57

(16 replies, posted in General)

When does the self-refilling gauge start/stop? Does it trigger at the start of the round and continue until the end? is it triggered by a specific move and cancelled after time elapses or another move cancels it?

58

(5 replies, posted in Animation)

Apply Root motion depends on the animation file moving the character. Having it on will do that. Check that the animation used from Frank in Frank's animation files doesn't have the X & Z axis position baked.

Ah well, the section

                    if (playerScript != null && playerScript.myInfo.alternativeCostumes[playerScript.selectedCostume].enableColorMask) {
                        Renderer[] charRenders = characterPrefab.GetComponentsInChildren<Renderer>();
                        foreach (Renderer charRender in charRenders) {
                            charRender.material.color = playerScript.myInfo.alternativeCostumes[playerScript.selectedCostume].colorMask;
                        }
                    }

You can replace with whatever code you would use to enable the alternative color style.

If it's a matter of instantiating a whole prefab, and since you're using the resources method:

                if (characterInfo.characterPrefabStorage == StorageMode.Prefab)
                {
                    characterPrefab = Instantiate(characterInfo.characterPrefab);
                }
                else
                {
                    characterPrefab = Instantiate(Resources.Load<GameObject>(characterInfo.prefabResourcePath));
                }

in that else block you'd just add another if/else where if (cScript.isAssist && cScript.isAlt) { } which will then determine which prefab to load. and the else is the same as before.

                if (characterInfo.characterPrefabStorage == StorageMode.Prefab)
                {
                    characterPrefab = Instantiate(characterInfo.characterPrefab);
                }
                else if (cScript.isAssist && cScript.isAlt)
                {
                    // characterPrefab = However you determine which characterInfo prefab to load
                }
                else
                {
                    characterPrefab = Instantiate(Resources.Load<GameObject>(characterInfo.prefabResourcePath));
                }

Otherwise yeah, you'll need to figure something out with the event system.

I haven't checked this suggestion, and there is a way I think we could do it through events as I feel events are safer to use instead of mucking with Source code of UFE directly in the case UFE needs to update and will overwrite all of your custom changes.

So I'm just hypothesizing here, but in UFE.cs around Line 3354 you should see something like this:

            else
            {
                if (characterInfo.characterPrefabStorage == StorageMode.Prefab)
                {
                    characterPrefab = Instantiate(characterInfo.characterPrefab);
                }
                else
                {
                    characterPrefab = Instantiate(Resources.Load<GameObject>(characterInfo.prefabResourcePath));
                }
            }

Alter it to the following:

            else
            {
                if (characterInfo.characterPrefabStorage == StorageMode.Prefab)
                {
                    characterPrefab = Instantiate(characterInfo.characterPrefab);
                }
                else
                {
                    characterPrefab = Instantiate(Resources.Load<GameObject>(characterInfo.prefabResourcePath));
                }

                // Apply player color mask to assist... hopefully
                if (cScript.isAssist && cScript.isAlt) {
                    ControlsScript playerScript = GetControlsScript(player);
                    if (playerScript != null && playerScript.myInfo.alternativeCostumes[playerScript.selectedCostume].enableColorMask) {
                        Renderer[] charRenders = characterPrefab.GetComponentsInChildren<Renderer>();
                        foreach (Renderer charRender in charRenders) {
                            charRender.material.color = playerScript.myInfo.alternativeCostumes[playerScript.selectedCostume].colorMask;
                        }
                    }
                }
            }

I'd have to review the code for how Assists get instantiated for detailed suggestions. But off the top of my head, and a road map of where I'd suggest looking:

(1) Have a custom script (or add to an existing one) add a check for the OnMove() event. Where that script is applied would either be: (1) The player prefab, (2) the assist prefab, (3) some sort of game manager object that handles events globally. Most likely 1 or 3.

(2) In said event, OnMove() receives the MoveInfo of the move being performed, and the CharacterInfo of the player performing it.

(3) You'd want to do a check in the OnMove() to see if the move is the assist, and if so you might also want to try checking if the player is the player with an alternate color set to it. Then since this would happen in the 1st frame it may not have instantiated the assist prefab yet, you'd want to flag a boolean saying it should update the assist after it's been instantiated. So in the Update() or FixedUpdate() of the custom script, you'd have an if check for that boolean to be true AND the assist has been instantiated, then once it does it adjusts the assist's color/palette then flips the boolean back to false.

That's where i'd start looking.

If you put this code on the Player Prefab then you can thankfully assume that the parent of the current gameObject has a ControlsScript component attached to it, which you can grab to figure out if your component is playerNum 1 or 2.

From there I'd imagine it'd take testing to find the most efficient way, but that's one way off the top of my head I'd go about looking for an answer.

Though yes, an OnAssist(MoveInfo assistMove, CharacterInfo assistCharacter, int ownerPlayerNum) event or something along those lines being added in the next patch might be nice and should be requested to MrMind when available.

62

(4 replies, posted in General)

Mistermind wrote:

UFE doesn't have a way to "force" a move, but you can force inputs instead. Take a look at this post:
http://www.ufe3d.com/forum/viewtopic.php?pid=9763#p9763

You can set a move to be executed by a specific input and just call on that input instead.

So theoretically you can have a "button" that is only used to initiate the stun state, make sure it's not map-able to a keyboard/gamepad, and then use this PressButton() method to initate the 'stun button' has been pressed by that player?

63

(4 replies, posted in General)

It's definitely something that should be added if it's not. I'm not completely sure off the top of my head how to force run a TestCollision() hit.

64

(3 replies, posted in General)

I'm unsure on the exact issue as it can be anything. Typically it freezes there when either a character doesn't have a move (intro/idle are the first used) assigned when it's looking for it. But I also don't have experience with running UFE on console, so it could also be freezing due to memory limits being reached, and that's entirely on your characters and/or stage design/models/shaders/etc.

Sorry, I either didn't see the post or I was unable to provide any help on this situation.

Were you able to resolve it by using an offset position? or storing a game object and using that as an offset point?

How are you changing the palette of the altered player/prefab? Just from the set prefab?

I imagine you'd have to do something like create a custom script and using the event handler to set the alt color of assist characters.

67

(3 replies, posted in General)

I believe the conflict would come in the fact Unity physics are non-deterministic, hence why it took so long to get rollback code in the engine. Mind had to create his own physics system that could be deterministic.

68

(9 replies, posted in General)

やった!\(^_^)/

ごめん、僕は病気でした…
足首を捻挫しました。
問題が解決したことをうれしく思います。

69

(9 replies, posted in General)

いえいえ、心配しないでください。 それは結構です。 質問してください。 まだ回答がありません。 忙しかったです。 これも私のプロジェクトではありません。 日本語が下手ですが、できればお手伝いしたいと思います。 何が起こっているのかビデオで見せてもらえますか? ビデオを見る方が常に簡単です。 一時的なアップロードにはstreamable.comを使用できます。またはあなたが欲しいものの例を示すことができますか? 別のゲームのYouTubeから?

70

(9 replies, posted in General)

"landing move"は「着地アニメーション」です。

71

(9 replies, posted in General)

おはよう、
プレーヤーの「landing move」やオポネントの空のひっとよろけの「landing move」か?

72

(11 replies, posted in General)

Oh yeah, I took what you said that way, but I wanted to clarify especially for those on the forum who aren't fluent in English.

73

(11 replies, posted in General)

derkoi wrote:

So you could say that your game has GGPO as people know what that is.

I would caution against this. Only as a marketing reason I mean. Since UFE doesn't use the GGPO code and GGPO is its own brand, it would be false advertising to say it's using GGPO. I would suggest using the generic term of Rollback Netcode to avoid issues with angry customers.

For example, Fight of Animals is a project that released on steam using UFE2, so it advertised that it had Rollback Netcode and not GGPO.

74

(3 replies, posted in General)

It would be best to write a new post about that.

75

(11 replies, posted in General)

xHerox wrote:

Is UFE's rollback the same with GGPO's? I'm seeing a lot of posts in r/fighters saying they want rollback in their games and I'm wondering if UFE's version is the same. Just a question since I'm thinking of releasing my mobile game to steam.

As derkoi suggested, rollback is rollback. UFE does not use GGPO's code base, but they are doing the same thing: Storing input information for each frame, recognizing if there is a desync, using a deterministic system to calculate if there has been a desync once the peer's input actually does make it to the network, and if there has it will roll back and simulate the game up to the current playable frame in lock step. Mind you, Unity's system isn't deterministic, so a lot of the effort in getting UFE to support rollback required making a custom physics system under the hood that wraps around Unity's.

As far as I understand at least.