1

(5 replies, posted in Showcase)

https://i.imgur.com/b7U1TwB.jpg

https://i.imgur.com/Mh0Dlin.jpg

Some test renders of Eagle Prime, one of the two main characters in this project.

2

(3 replies, posted in Source Coding)

I wrote an article last year going over how to construct a track in Cinemachine.  This should help anyone get started with creating cutscenes in their project.

Creating cutscenes in unity with Cinemachine and Timeline

3

(3 replies, posted in Source Coding)

How to Implement Cinemachine into Story Mode

*This tutorial assumes you understand how to actually create cutscenes using timeling and cinemachine so I wont talk about how to construct a track. If you'd like a tutorial on how to create a cutscene with cinemachine you can check out this article i wrote here:

Creating cutscenes in unity with Cinemachine and Timeline


https://media.giphy.com/media/aYw0feS3XkO92pX6Wq/giphy.gif


1. Import Cinemachine and Timeline from the package manager. (They usually come together)


2. Select the main camera then go to Component > Cinemachine > CinemachineBrain.
This component MUST be attached to the main camera in order for Cinemachine to play cutscenes


3. Create a CinemachineCutscene object
    -Create an empty gameobject and attach this script: (make sure the name of your script matches the class name or you'll get errors. Then save it in the appropriate scripts folder)

using UnityEngine;
using System.Collections;
using UnityEngine.Playables;
using UFE3D;

public class StoryModeCinemachine : StoryModeScreen
{
    #region public instance properties
    //the cutscene object that has a PlayableDirector component
    public PlayableDirector cutscene;
    public bool skippable = true;
    public bool stopPreviousSoundEffectsOnLoad = false;
    public float delayBeforeGoingToNextScreen;
    public float minDelayBeforeSkipping = 0.1f;
    #endregion

    #region public override methods
    public override void OnShow()
    {
        base.OnShow();

        //we cast the value of cutscene.duration as a float into 
        delayBeforeGoingToNextScreen = (float)cutscene.duration;

        UFE.StopMusic();

        if (this.stopPreviousSoundEffectsOnLoad)
        {
            UFE.StopSounds();
        }

        this.StartCoroutine(this.ShowScreen());
    }

    public virtual IEnumerator ShowScreen()
    {
        float startTime = Time.realtimeSinceStartup;
        float time = 0f;

        while (
            time < this.delayBeforeGoingToNextScreen &&
            !(skippable && Input.anyKeyDown && time > this.minDelayBeforeSkipping)
        )
        {
            yield return null;
            
            time = Time.realtimeSinceStartup - startTime;
        }

        this.GoToNextScreen();
    }
    #endregion
}

Your setup should look something like this:
https://i.imgur.com/vvDtcfH.jpg


4. Create the cutscene child object

    -Create an empty gameobject child of the CinemachineCutscene object

    -With that object selected go to Window > Sequencing > Timeline

    -Attach a PlayableDirector component to that cutscene object

    -Now attach this script to the cutscene gameobject:

using UnityEngine.Timeline;
using UnityEngine.Playables;
using UnityEngine;
using Cinemachine;

public class GrabCinemachineCamera : MonoBehaviour
{
    [SerializeField]
    PlayableDirector director;
    [SerializeField]
    CinemachineBrain cam;

    private void OnEnable()
    {
        director = GetComponent<PlayableDirector>();
        cam = Camera.main.GetComponent<CinemachineBrain>();
        SetCinemachineBrain(director, cam);
        
    }
  
    public void SetCinemachineBrain(PlayableDirector director, CinemachineBrain brain)
    {
        var timeline = director.playableAsset as TimelineAsset;
        if (timeline == null) return;

        //iterate on all tracks that have a binding
        foreach (var track in timeline.GetOutputTracks())
        {
            //get the object bound to the track, and change it if it's a CinemachineBrain
            var boundBrain = director.GetGenericBinding(track) as CinemachineBrain;
            if (boundBrain == null)
                director.SetGenericBinding(track, brain);
        }
    }
}

        The cinemachine track needs a Cinemachine Brain component to be injected into its binding at runtime so this script will grab this component from the main camera.

Your child object that holds the actual cutscene should look like this:
https://i.imgur.com/JasBuT2.jpg

5. Make the CinemachineCutscene a UI prefab and put it in the same folder with the other UI prefabs in your project


6. All you have to do now is assign your new CinemachineCutscene prefab into the story mode section of the global config.
    -can be used instead of a TextureConversation screen before or after battle
    -in this example I have it assigned as the main cutscene that plays at the beginning of story mode but it can be applied anywhere as far as I know.
https://i.imgur.com/tIkqWBg.jpg


I've only just begun to test this out so I expect to make edits and changes as needed and I will share them here.  If this is too hard to follow just post here and I'll try my best to help you.  Custom scripts that you write for your specific project may or may not affect the implementation of Cinemachine.

4

(3 replies, posted in Source Coding)

https://youtu.be/mlZ9CVO4MOA

https://media.giphy.com/media/aYw0feS3XkO92pX6Wq/giphy.gif
Here is the current progress of my Cinemachine implementation.  Its pretty rough and this test cutscene doesn't have much going on but so far Im not getting any errors or interruption during gameplay now that the main camera also has a Cinemachine brain component attached to it.  Im going to refine the code and then I will share everything here and maybe write up a tutorial for anyone who wants to use this or if Mistermind wants to include it in a future update.

5

(5 replies, posted in Showcase)

PunBB bbcode test

The Great Goliath, an Unstoppable force of destruction with a HUNGER for those who commit evil.

6

(5 replies, posted in Showcase)

PunBB bbcode test

Moon Maiden, An alien warrior princess with a dark and mysterious past.

7

(52 replies, posted in General)

Mistermind wrote:
immortalfray wrote:

I’ve been away from UFE since 2.0 initially came out. So for some reason it’s removed from my asset list and it looks like I have to purchase it again?  I still have a working build of 2.0 that I wanted to try and implement cinemachine in for story mode cutscenes.

No, you don't have to purchase it again. If you still have your invoice number I recommend contacting Unity at support@unity3d.com.

Thank you what I did was I purchased it on sellfy so the latest version i have is 2.2 I think.  I think you gave me a voucher to download it from unity instead.  I can dm you the invoice from sellfy.

I’m using this section to document my progress on implementing Cinemachine into UFE in order to replace the panels used in storymode with an actual animated cutscene.  I’m mainly doing this to showcase my knowledge in working with another programmers code base and also because it’s a core component in my own fighting game project.

9

(52 replies, posted in General)

I’ve been away from UFE since 2.0 initially came out. So for some reason it’s removed from my asset list and it looks like I have to purchase it again?  I still have a working build of 2.0 that I wanted to try and implement cinemachine in for story mode cutscenes.

10

(5 replies, posted in Showcase)

A rough concept of one of the the two main title characters of our game.  Shin Kugo, an Alien Assassin that lives to hunt down and end the strongest warriors he can find. https://i.imgur.com/JKUJ8sr.jpg

11

(5 replies, posted in Showcase)

A rough concept of one of the the two main title characters of our game.  Eagle Prime, a parody of Superman and considered to be the most powerful hero on Earth. https://i.imgur.com/U7RAwbK.jpg

12

(5 replies, posted in Showcase)

This new project is based on superhero parodies and will have a fun action based story with dark comedy and dark twists.  Our aim is to build a love letter to the injustice playstyle of fighting games.  Currently we have plans for four characters but we have designs for an entire roster.

For me it happens whenever I try a mode like versus or training.  After a fight if I  go to the main menu to try and start a match I get the same error.  I was gonna try to figure it out after my current project but I'm glad you brought it up first.

Oh good I've been having this issue as well

15

(5 replies, posted in General)

So it looks like you HAVE to open the transform toggle open under hit box set up and hit apply changes.  If you don't do that it can't record your prefab rotation to convert it to fp

16

(5 replies, posted in General)

https://i.imgur.com/lFTkjQt.png
https://i.imgur.com/ZCrMciM.png

I've tried pretty much everything I can think of.  This is what I'm working with.  I have my prefab basically Identical to that of the template characters.  For some reason my character's rotations is set to 0 when the game starts.  The other characters dont mimic this behavior so Im thinking there's a setting in the character file im not seeing.

if anyone has been using 2.0 and has success setting up their own characters I would appreciate your advice.  Looking through the code I think the issue is here but its not exposed in the character editor.  I think these FP variables need to be set up some how

https://i.imgur.com/FPjWdwg.png

17

(5 replies, posted in General)

Both player 1 and player 2 rotation are set to 0 when a fight starts.   Yea my prefabs are rotated at 90.0001 just like the template character.

18

(0 replies, posted in Source Coding)

Reserving this post for work on a lobby system for players to select a room to start a match.

Once I'm finished with a current animation project I'll put most of my effort into this feature.

19

(5 replies, posted in General)

I know this is probably silly and an easy fix, but I haven't worked with ufe in a while now. 

I imported a character into my project and everything works fine except when I start a game my players rotation automatically sets itself to 0 on the y axis.  This causes my character to face the wrong direction.   

My prefab is set up like the template characters and inside my maya files its oriented the same as legacy Mike.

Any help would be appreciated and I'll post screen shots when I get off work.

My prefab is using mecanim and is using its own avatar for mecanim generic.

20

(46 replies, posted in General)

Ok so I bought source from sellfy a few years back.  Do I still qualify for the discount on the source version of 2.0

21

(31 replies, posted in UFE 1 (Deprecated))

Mistermind wrote:
immortalfray wrote:

So with the new 2.0 coming out, how will network play affect the personal changes I've made to the core of ufe?  I'm very novice when it comes to network code so I'm training up in prep for 2.0.  Will I be able to use the core changes I've made and have them come across the net?  Mainly I've added image effects to moves and powsr/speed multipliers as well as a dynamic power guage.

Good question. I'll try to answer the best I can.

Say you have a multiplier that changes the damage of attacks based on the remaining life points. Before, you had something like this:

public class ControlsScript : MonoBehaviour {
(...)
    public float afkTimer;
    public int airJuggleHits;
    public AirRecoveryType airRecoveryType;
    public bool applyRootMotion;
    public bool blockStunned;
    public float comboDamage;
    public float dmgMultiplier; // Your variable
(...)

    private bool DamageMe(float damage){
(...)
        dmgMultiplier = 1 + ((opInfo.lifePoints - opInfo.currentLifePoints)/100);
        myInfo.currentLifePoints -= damage * dmgMultiplier;
        if (myInfo.currentLifePoints < 0) myInfo.currentLifePoints = 0;
        UFE.SetLifePoints(myInfo.currentLifePoints, myInfo);
(...)
    }
}

It will now look like this:

public class ControlsScript : MonoBehaviour {
(...)
    public FP afkTimer;
    public int airJuggleHits;
    public AirRecoveryType airRecoveryType;
    public bool applyRootMotion;
    public bool blockStunned;
    public FP comboDamage;
    public FP dmgMultiplier; // Your variable
(...)

    private bool DamageMe(FP damage){
(...)
        dmgMultiplier = 1 + ((opInfo.lifePoints - opInfo.currentLifePoints)/100);
        myInfo.currentLifePoints -= damage * dmgMultiplier;
        if (myInfo.currentLifePoints < 0) myInfo.currentLifePoints = 0;
        UFE.SetLifePoints(myInfo.currentLifePoints, myInfo);
(...)
    }
}

In the example above, the only big difference is that you must recast the value from float to FP. Now let's say you need dmgMultiplier to be tracked in case of a rollback. In that case you can track by 2 different means: Auto Tracking and Manual Tracking.

Auto Tracking
Its the simplest way, but it consumes more CPU. To use it, under the Rollback Netcode options, toggle "Track UFE Variables" and add the RecordVar attribute to your custom variable:

[RecordVar] public FP dmgMultiplier;

Manual Tracking
More complicated but has 0 impact on the CPU.
To use it, first we need to open UFE\Scripts\Netcode\NetworkCore\FluxStateTracker.cs and find nearby variables to where you are casting dmgMultiplier. Following the example above, you would need to do the following:

(...)
protected static void LoadCharacterState(FluxStates.CharacterState state, int player) {
(...)
        controlsScript.blockStunned = state.blockStunned;
        controlsScript.comboDamage = state.comboDamage;
        controlsScript.dmgMultiplier = state.dmgMultiplier; // Your variable
(...)
}

(...)
protected static FluxStates.CharacterState SaveCharacterState(int player) {
(...)
        state.blockStunned = controlsScript.blockStunned;
        state.comboDamage = controlsScript.comboDamage;
        state.dmgMultiplier = controlsScript.dmgMultiplier; // Your variable
(...)
}

Now open UFE\Scripts\Netcode\GameState\FluxStates.cs and add the casting for the new state variable:

(...)
public struct CharacterState {
(...)
        public bool blockStunned;
        public FP comboDamage;
        public FP dmgMultiplier; // Your variable
(...)
}

Doing this will ensure your variable is tracked and deterministic on all machines.

Now, on a side note, if you have added a new option in one of the editors, remember that aside from casting it to FP, you also need to change how the editor reads it:

Before:

moveInfo.elementalDmg = EditorGUILayout.FloatField("Elemental Damage:", moveInfo.elementalDmg);

After:

moveInfo._elementalDmg = EditorGUILayout.FloatField("Elemental Damage:", (float)moveInfo._elementalDmg);

To carry the values from your previous project to UFE 2.0, instead of replacing the casting, create a new variable below your previous one and add the prefix "_". Now add the following to UFE\Editor\UFEUpgrade.cs and run the update:

(...)
private static void SpecialMoveUpdate(MoveInfo move) {
        if (move == null) return;
        move.version = 2f;
        move._elementalDmg = move.elementalDmg; // Your variable
(...)
}

I see what you mean thank you.  I can't wait for 2.0 to drop and see what it's capable of

22

(31 replies, posted in UFE 1 (Deprecated))

So with the new 2.0 coming out, how will network play affect the personal changes I've made to the core of ufe?  I'm very novice when it comes to network code so I'm training up in prep for 2.0.  Will I be able to use the core changes I've made and have them come across the net?  Mainly I've added image effects to moves and powsr/speed multipliers as well as a dynamic power guage.

23

(31 replies, posted in UFE 1 (Deprecated))

Yes!!!  I'ts finally here!  Take my money!!!

24

(13 replies, posted in UFE 1 (Deprecated))

yasin.javaid wrote:

Hi,
i done with online photon networking.
if someone wants help please ping me back.

I sent you a pm, are you still willing to provide help on this subject?

25

(13 replies, posted in UFE 1 (Deprecated))

yasin.javaid wrote:

Hi,
i done with online photon networking.
if someone wants help please ping me back.

I would love to know where to start to get online play working in my project.