Announcement

Collapse
No announcement yet.

Unreal Engine 4 is available for Win10 UWP app dev now

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • replied
    Just wanted to give an update, that I was successfully able to compile the editor, and package my game into a UWP .appx.

    I was also able to switch my Xbox One over to DevMode, and upload my game for play testing!

    Thank you all so much for your posts, there were all a huge help!
    Last edited by iicolsandersii; 07-28-2017, 02:50 PM.

    Leave a comment:


  • replied
    For anyone that may be looking for an UE Leaderboard example the UE ShooterGame may be a good starting point. You can download it using the Epic Games Launcher, near the end of the Learn tab, under the Games section. A few example code snippets are below:

    Code:
    ShooterLeaderboars.h
    
    // these are normally exported from platform-specific tools
    #define LEADERBOARD_STAT_SCORE				"Score"
    #define LEADERBOARD_STAT_KILLS				"Frags"
    #define LEADERBOARD_STAT_DEATHS				"Deaths"
    #define LEADERBOARD_STAT_MATCHESPLAYED		"MatchesPlayed"
    
    /**
     *	'AllTime' leaderboard read object
     */
    class FShooterAllTimeMatchResultsRead : public FOnlineLeaderboardRead
    {
    public:
    
    	FShooterAllTimeMatchResultsRead()
    	{
    		// Default properties
    		LeaderboardName = FName(TEXT("ShooterAllTimeMatchResults"));
    		SortedColumn = LEADERBOARD_STAT_SCORE;
    
    		// Define default columns
    		new (ColumnMetadata) FColumnMetaData(LEADERBOARD_STAT_SCORE, EOnlineKeyValuePairDataType::Int32);
    		new (ColumnMetadata) FColumnMetaData(LEADERBOARD_STAT_KILLS, EOnlineKeyValuePairDataType::Int32);
    		new (ColumnMetadata) FColumnMetaData(LEADERBOARD_STAT_DEATHS, EOnlineKeyValuePairDataType::Int32);
    		new (ColumnMetadata) FColumnMetaData(LEADERBOARD_STAT_MATCHESPLAYED, EOnlineKeyValuePairDataType::Int32);
    	}
    };
    
    class FShooterAllTimeMatchResultsWrite : public FOnlineLeaderboardWrite
    {
    };

    Code:
    SShooterLeaderboard.cpp
    
    
    void SShooterLeaderboard::ReadStats()
    {
    	StatRows.Reset();
    
    	IOnlineSubsystem* const OnlineSub = IOnlineSubsystem::Get();
    	if (OnlineSub)
    	{
    		IOnlineLeaderboardsPtr Leaderboards = OnlineSub->GetLeaderboardsInterface();
    		if (Leaderboards.IsValid())
    		{
    			// We are about to read the stats. The delegate will set this to false once the read is complete.
    			LeaderboardReadCompleteDelegateHandle = Leaderboards->AddOnLeaderboardReadCompleteDelegate_Handle(LeaderboardReadCompleteDelegate);
    			bReadingStats = true;
    
    			// There's no reason to request leaderboard requests while one is in progress, so only do it if there isn't one active.
    			if (!IsLeaderboardReadInProgress())
    			{
    				ReadObject = MakeShareable(new FShooterAllTimeMatchResultsRead());
    				FOnlineLeaderboardReadRef ReadObjectRef = ReadObject.ToSharedRef();
    				bReadingStats = Leaderboards->ReadLeaderboardsForFriends(0, ReadObjectRef);
    			}
    		}
    		else
    		{
    			// TODO: message the user?
    		}
    	}
    }

    Leave a comment:


  • replied
    Trying to compile, and I am getting the following message:

    '/FU' requires an argument

    Click image for larger version

Name:	Capture.PNG
Views:	1
Size:	11.8 KB
ID:	1131639

    I am running a fresh install of VS2015 U3.

    I can successfully compile UE4 from github, but the UWP version is giving me this issue.

    TIA!

    Update: Reverted to Visual Studio 2015 update 2, and applied Windows SDK 10.0.14393.795 suggested by [MENTION=494622]jsyarrow[/MENTION] in a previous reply and successfully compiled
    Last edited by iicolsandersii; 07-28-2017, 10:10 AM. Reason: fixed the issue.

    Leave a comment:


  • replied
    [MENTION=494622]jsyarrow[/MENTION] - Do you by chance know how I would callback into the user code after getleaderboard values are returned?
    Attached Files
    Last edited by Jerry.Richards; 07-27-2017, 02:23 PM.

    Leave a comment:


  • replied
    [MENTION=494622]jsyarrow[/MENTION] - I've been testing with the xbox-live samples, and the xbox-live-winRT scenarios, which as you may know are two different codebases. The winRT tests are aligned with the UE UWP. From my testing, using MS code, I encountered three errors/problems with Stats. The first problem, oddly enough, affected the Leaderboard Results:

    Code:
        LeaderboardQuery^ Query = ref new LeaderboardQuery();
        //Query->SkipResultToMe = true;
        Query->MaxItems = 100;
        Query->Order = SortOrder::Descending;
        mgr->GetLeaderboard(LiveContext->User, StatName, Query);
    Uncomment the SkipResultToMe line and results are not returned.

    Please check your Inbox for me info.

    Leave a comment:


  • replied
    [MENTION=5350]Jerry.Richards[/MENTION] - the samples are written against the standard C++ version of XSAPI (headers + static lib, usable from C++ only), rather than its WinRT projection (winmd + dll, usable from any WinRT language). The appearance is slightly different because each version conforms to the typical style of its target platform, so XSAPI C++ looks rather like something you might see in std::, whereas XSAPI WinRT looks much like WinRT components in the Windows SDK. It is certainly possible that the difference is a source of bugs, but it's not that one version is right and the other is wrong. OnlineSubsystemLive is set up to use the WinRT version, and switching would require substantial modifications to the existing code.

    [MENTION=828801]Sparkash[/MENTION] - that does look very much like an older version of the UI. The relevant code is mostly here. That should then get compiled into UE4Editor-UWPPlatformEditor.dll. Seems like there must be something stale somewhere there. That said, if you've got something working now it might not be worth tracking down the problem. The stuff you're missing is primarily changes intended to make it easier to get started.

    [MENTION=10630]MaSe87[/MENTION] - I'd recommend taking a look at the dev_MixedReality branch. There's lots of work going on in there, but it should have some of the basics for developing a HoloLens app in place.

    Leave a comment:


  • replied
    What are the technical / coding hurdles for running UE4 on a Hololens?

    Will we ever see UE4 for it? Is it UWP, the Hololens API or a mix of both to get it working? Are there any devs out there working on it already?

    Don't like to use Unity for an AR project. ;-)

    Leave a comment:


  • replied
    Originally posted by jsyarrow View Post
    Ah, I see you're way ahead of me. Publisher mismatch is indeed the normal reason for that error. Have you tried manually running SignTool with the debug option?

    Code:
    C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe sign debug /a /f "D:\MyGame_416_uwp_merge\ueproject\Build\UWP\MyGame_temp_cert.pfx" /fd SHA256 "D:\MyGame_416_uwp_merge\ueproject\Saved\StagedBuilds\UWP64\MyGame.appx
    As for the generate button, it should be on the UWP page of project settings, in the packaging section, and look something like

    [ATTACH=CONFIG]149222[/ATTACH]

    Can't think of any reason why it wouldn't be there for you - it's unconditionally added to the layout. I did realize while grabbing that for you that it's a little fussy right now - you need to delete the existing .cer, .pvk and .pfx before it will work, and if you change publisher/identity/name you may need to close and reopen the settings window before trying to generate.

    One last thing - I see you've changed the file name of the certificate in use (not Build/UWP/SigningCertificate.pfx). That 'feature' didn't seem particularly useful, and wasn't ever exposed through editor UI, so it's gone in the latest and we just always use the default location. Don't think that's related to your current error since the command line to signtool indicates your custom location is in use, but it might become relevant as you try to make changes to pinpoint the problem.
    Thanks for the image. My package settings are slightly different however. I've double checked and I'm definitely on the latest Github revision. Could my settings be stale for some reason?

    Click image for larger version

Name:	Capture.PNG
Views:	1
Size:	24.6 KB
ID:	1131464

    Leave a comment:


  • replied
    Using the Xbox Live Samples (https://github.com/Microsoft/xbox-live-samples), specifically the Leaderboard Sample, I am able to see the Stats manager working. I can write to and read from my game and sandbox:

    Click image for larger version

Name:	LeaderboardSet.02.jpg
Views:	1
Size:	123.0 KB
ID:	1131450

    Click image for larger version

Name:	LeaderboardScores.02.jpg
Views:	1
Size:	58.0 KB
ID:	1131451


    The code being used within the UEUWP is very similar to that being used in the samples. However, there is a significant difference in the API usage, function names:

    Samples
    Code:
    void Sample::SetStatForUser(
        _In_ std::shared_ptr<xbox::services::system::xbox_live_user> user,
        _In_ const string_t& statName,
        _In_ int64_t statValue)
    {
        m_statsManager->set_stat_as_integer(user, statName, statValue);
    
        // Typically stats will be uploaded automatically
        // you should only request to flush when a game session or level ends.
        m_statsManager->request_flush_to_service(user, false);
    
        stringstream_t source;
        source << _T("Setting ");
        source << statName;
        source << _T(" to ");
        source << statValue;
        m_console->WriteLine(source.str().c_str());
    }

    And the code from UEUWP:
    Code:
    bool FOnlineLeaderboardsLive::WriteLeaderboards(const FName& SessionName, const FUniqueNetId& PlayerId, FOnlineLeaderboardWrite& WriteObject)
    {
        UNREFERENCED_PARAMETER(SessionName);
    
        if (!LiveSubsystem)
            return false;
    
        const FOnlineIdentityLivePtr Identity = LiveSubsystem->GetIdentityLive();
        if (!Identity.IsValid())
            return false;
    
        const FUniqueNetIdLive UserLive(PlayerId);
        Windows::Xbox::System::User^ XBoxUser = Identity->GetUserForUniqueNetId(UserLive);
    
        Microsoft::Xbox::Services::XboxLiveContext^ LiveContext = LiveSubsystem->GetLiveContext(XBoxUser);
        if (LiveContext == nullptr)
            return false;
    
        Microsoft::Xbox::Services::Statistics::Manager::StatisticManager^ mgr = Microsoft::Xbox::Services::Statistics::Manager::StatisticManager::SingletonInstance;
        if (mgr != nullptr)
        {
            for (FStatPropertyArray::TConstIterator item(WriteObject.Properties); item; ++item)
            {
                Platform::String^ itemName = ref new Platform::String(*item->Key.GetPlainNameString());
    
                int32 itemValue;
                item->Value.GetValue(itemValue);
    
                long long llValue;
                llValue = itemValue;
    
                mgr->SetStatisticIntegerData(LiveContext->User, itemName, llValue);
            }
    
            mgr->RequestFlushToService(LiveContext->User);
    
            return true;
        }
    
        return false;
    }

    Clearly the signatures are different, and I agree that the two sets of DLL's should be performing the same task. But it is possible something else is happening.
    Last edited by Jerry.Richards; 07-23-2017, 09:00 PM.

    Leave a comment:


  • replied
    When I try to add a reference to the DLL projects, VS complains that different platforms are being targeted:

    Click image for larger version

Name:	DifferentPlatforms.jpg
Views:	1
Size:	20.6 KB
ID:	1131379


    But each platform is targeting x64:

    Click image for larger version

Name:	restplatform.jpg
Views:	1
Size:	38.0 KB
ID:	1131380

    Click image for larger version

Name:	xsapi.platform.jpg
Views:	1
Size:	64.5 KB
ID:	1131381

    This may be trivial, and I'm trying to resolve it now, but as usual, any help/guidance you can provide is appreciated.

    Leave a comment:


  • replied
    [MENTION=5350]Jerry.Richards[/MENTION] - I would expect that to work. You may need to manually point the debugger at the pdb file as a one-off, but after that you shouldn't have any trouble with breakpoints.

    Leave a comment:


  • replied
    [MENTION=494622]jsyarrow[/MENTION] - Debugging is working again (Debug UWP64), and now I would like to add the XSAPI projects to the solution, have the built DLL's and PDB copied into the appropriate directory. Is there a clean way of doing this?

    https://github.com/Microsoft/xbox-li...nrt-uwp-source

    Can I add the projects to my solution:
    Code:
    \Build\Microsoft.Xbox.Services.140.UWP.WinRT\Microsoft.Xbox.Services.140.UWP.WinRT.vcxproj
    \External\cpprestsdk\Release\src\build\vs14.uwp\cpprestsdk140.uwp.vcxproj
    Change the Output to be the original directory:
    Code:
    E:\UEUWP\MICROSOFT_UWP_UNREAL\Engine\Plugins\Online\XboxOne\OnlineSubsystemLive\ThirdParty\XSAPI\UWP.2017.07.20170710.01\lib\x64\v140\Release
    Will this approach honor breakpoints? Given that the files (DLL, PDB) are copied to a different directory that may cause some confusion.

    Leave a comment:


  • replied
    Originally posted by jsyarrow View Post
    As for the generate button, it should be on the UWP page of project settings, in the packaging section, and look something like

    [ATTACH=CONFIG]149222[/ATTACH]
    [MENTION=828801]Sparkash[/MENTION] - adding to what [MENTION=494622]jsyarrow[/MENTION] wrote, the UWP Page is accessed by scrolling the side menu on the Project Settings page:

    Click image for larger version

Name:	UWP.Access.jpg
Views:	1
Size:	142.3 KB
ID:	1131372


    And an example of my settings for a test project I have:

    Click image for larger version

Name:	UWP.Page.jpg
Views:	1
Size:	103.3 KB
ID:	1131373

    Leave a comment:


  • replied
    Ah, I see you're way ahead of me. Publisher mismatch is indeed the normal reason for that error. Have you tried manually running SignTool with the debug option?

    Code:
    C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe sign debug /a /f "D:\MyGame_416_uwp_merge\ueproject\Build\UWP\MyGame_temp_cert.pfx" /fd SHA256 "D:\MyGame_416_uwp_merge\ueproject\Saved\StagedBuilds\UWP64\MyGame.appx
    As for the generate button, it should be on the UWP page of project settings, in the packaging section, and look something like

    Click image for larger version

Name:	GenerateCertificateButton.PNG
Views:	1
Size:	7.0 KB
ID:	1131371

    Can't think of any reason why it wouldn't be there for you - it's unconditionally added to the layout. I did realize while grabbing that for you that it's a little fussy right now - you need to delete the existing .cer, .pvk and .pfx before it will work, and if you change publisher/identity/name you may need to close and reopen the settings window before trying to generate.

    One last thing - I see you've changed the file name of the certificate in use (not Build/UWP/SigningCertificate.pfx). That 'feature' didn't seem particularly useful, and wasn't ever exposed through editor UI, so it's gone in the latest and we just always use the default location. Don't think that's related to your current error since the command line to signtool indicates your custom location is in use, but it might become relevant as you try to make changes to pinpoint the problem.

    Leave a comment:


  • replied
    Originally posted by jsyarrow View Post
    The logfile mentioned should be in Engine\Programs\AutomationTool\Saved\Logs. What does it say? In particular is there an error code from signtool? Common cases are here.

    Also, not sure what commit you're on, but a fairly recent one added a button in the project settings UI that will generate a certificate for you. You might see if using that makes any difference.
    Sorry, had read the details of the text file and saw that it implied that my 'publisher' field was incorrect. To clarify the contents are :

    Code:
    Done Adding Additional Store
    Error information: "Error: SignerSign() failed." (-2147024885/0x8007000b)
    SignTool Error: An unexpected internal error has occurred.
    Thanks for the common cases link - I can see that the publisher didn't match (I was missing the 'O=' section). Editing that to match will hopefully sort it.

    Regarding the automatic certificate generation - I'm on the latest commit, but I don't see the option in the project settings UI. Any reason it wouldn't be available to me?
    Last edited by Sparkash; 07-21-2017, 12:51 PM.

    Leave a comment:

Working...
X