Giter VIP home page Giter VIP logo

gamelift-example-ue4's People

Contributors

beastsm96 avatar chris-gong avatar pivotman319-owo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gamelift-example-ue4's Issues

Upgrade to 4.26

Need to do this eventually, maybe in a separate branch. May be worth branching out the current version in a branch called 4.24/4.25.

Improve README

This is another reminder for me that I have to modify the readme so that it is more up to date and has all the information needed to prepare, build, and run the project. Also, I plan on including architecture graphics to give a better higher level overview of what's going on. This is a huge priority once part 8 of the tutorials is released, because that should be the last video in which we write major code.

If anyone else has any suggestions for what should be added to the readme, then please comment on this issue!

Have to find a way to delete the webcache folder so that users can sign in through different Google accounts

Currently, when a user logs in for the first time, the Google sign in goes as expected. However, upon the second time running the menu level, if the user wants to sign in through a different Google account, it will log in automatically via the account used in the first login. The only way that I know of to sign in as a different user is to delete the Saved/webcache folder in the project.

General code cleanup (removing extra tabs/spaces)

This is more of a reminder for myself, but for some reason, not sure if this is a Unreal Engine thing or a Visual Studio thing, but when I define member variables that are labelled UPROPERTY in a header file, those member variable definitions get an extra tab of space by default. After part 11 of the tutorials is finished, I think I'm going to just get rid of these extra tabs in all of the header files. In addition, I think that I should get rid of extra tabs and spaces, specifically in the GameLiftTutorialCharacter.cpp class, but also in other files where this occurs. I believe that the last point has to do with normalized line endings but I could be wrong.

Error when compiling/building for a non-server configuration (C4716: function must return a value)

The project compiles fine in Visual Studio for a server configuration, but these errors occur when trying to build the project for an editor/client configuration:

'AGameLiftTutorialGameMode::StopBackfillRequest': must return a value
'AGameLiftTutorialGameMode::CreateBackfillRequest': must return a value

This is only for the master branch and occurred when I added new methods in the GameLiftTutorialGameMode.cpp class, but didn't add return statements outside of the #if WITH_GAMELIFT and #endif compiler directives for a couple of new functions. The #if WITH_GAMELIFT directive only evaluates to true when the build target is of type server. However, the CreateBackfillRequest and StopBackfillRequest methods have non-void return types. Therefore, we need return statements outside of the compiler directives. Otherwise, when building for a non-server configuration, Visual Studio will think that the function has no return statement, which is syntactically incorrect for any function written in C++ that returns something.

Need to update the Google Chrome version in the UWebBrowser widget (Couldn't sign you in, browser or app may not be secure)

Due to a recent Chrome update, when logging into google through an external application, the latest version of Chrome has to be used; otherwise the following popup appears when trying to sign in:
image
The odd thing is that this only applies to older accounts. For example, the account I made last week does not go through this screen when logging in. Also, I am pretty sure it's the chrome version because the sign in link works for all my accounts on my actual web browser outside the game.

GameState's PlayerArray variable may not be accessible by the time the GameLiftTutorialWidget is constructed

In the GameLiftTutorialWidget class, specifically on this line, the GetWorld()->GetGameState()->PlayerArray variable may not be populated by the time the SetTeammateCount function is called, which gets called right after
the client's UI is created. This makes sense as the GameState may not have finished initializing yet.

Although I'm not sure if I will get to fixing this as the main priority currently at the time of writing this is to work on a completely new example project for Unreal Engine 5, a way around this would either be to add a null pointer check around the variable in that same spot, or invoke SetTeammateCount after BeginPlay is called instead of NativeConstruct. I believe the latter is better because if the if-check fails then your UI will never be populated unless you add more code to address that scenario.

Unable to instantiate module 'AWSCore': aws-c-common.lib not found

I am trying to build your example project. I copied the server and the client .dlls and .libs into their respective plugin folders. However when I attempt to build the project the error:

UnrealBuildTool : error : Unable to instantiate module 'AWSCore': aws-c-common.lib not found. Expected in this location: C:\Users\jeffd\Documents\GitHub\gamelift-example-ue4\Plugins\GameLiftClientSDK\ThirdParty\GameLiftClientSDK\Win64\aws-c-common.lib 1> (referenced via GameLiftTutorial.uproject -> GameLiftClientSDK.uplugin) 1> (see ../Programs/UnrealBuildTool/Log.txt for full exception trace) 1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.MakeFile.Targets(49,5): error MSB3073: The command "D:\Games\Epic\UE_4.21\Engine\Build\BatchFiles\Rebuild.bat GameLiftTutorialEditor Win64 Development "C:\Users\jeffd\Documents\GitHub\gamelift-example-ue4\GameLiftTutorial.uproject" -WaitMutex -FromMsBuild" exited with code -1. 1>Done building project "GameLiftTutorial.vcxproj" -- FAILED.

is thrown. I am not sure where I am suppose to obtain this .lib
I think you meant to link to a source to obtain all .dll and .lib files needed but they are missing from the readme. I used the link that was provided in your youtube video but that source seems to be missing the above mentioned .lib

Remove unused Starter Content

Need to check if anything references the start content assets and test this out with a new packaged client and server build, but I believe that none of the assets in the Content/StarterContent folder are being used.

Create a new branch for additional features added outside of the tutorial series

I am not exactly sure what my plans are with this yet. I know that I will want to add on to this project. However, I also don't want to touch the master branch because I want anyone who watches the tutorial series to be able to refer to the original code base of this repository. I do have ideas, but I will comment them on this issue once I am actually actively working on those new features.

If anyone else has any suggestions for useful features for better learning GameLift that can possibly be added on to this project, please leave a comment on this issue!

--------- New feature ideas and modifications ----------

  • Have code reviews with the Discord community before making major videos.
  • For lambda functions coded in Javascript/NodeJs, learn how to use async/await or promises properly.
  • Add a check for when InitSDK fails (link)
  • Replace nullptr checks with just plain checks, for e.g. if (Ptr != nullptr) can be if (Ptr)
  • Remove GetPlayerSessionsCount method that I added in the GameLift Server SDK since GetPlayerSessions sets an integer parameter passed in addition to returning a pointer to a collection of player sessions in the result from a call to DescribePlayerSessions.
  • Look into Session Interface as well as the rest of the Online Subsystem.
  • Look into GameInstance Subsystem instead of the GameMode class for GameLift related code/functionality
  • Look into initializer lists for constructors instead of assigning the Status bool in the structs in the constructor as well as make a simple state struct that the other structs inherit from
  • Add logic to automatically find a free port and assign it to the server process, link, of manually adding it through the command line parameters (PORT=7777 does it automatically, but would still have to get the port via GetWorld()->URL.Port and assign it to ProcessParameters passed to ProcessReady so still not scalable) <- apparently Unreal handles port assignment automatically and all you have to do is GetWorld()->URL.Port?
  • Use the Project Launcher in Unreal Engine for deployments
  • Lower the queue timeout value (maybe make it 60 seconds)
  • Consider using async threads and events like how this PlayFab GSDK plugin does it
  • Modify TrackEvents lambda function to gracefully handle non-final state result event notifications instead of erroring out of the lambda function
  • Make a custom class/library/framework wrapper around HTTP requests to API Gateway methods
  • Use AWS_IAM authorizers instead of Cognito authorizers for API Gateway methods and use Identity Pools instead of User Pools (Check this discord message for more information on how to start going about this). Note that the difficult part will be the signing of creds in the HTTP request to the AWS_IAM authorized API endpoint.
  • Make a custom UI for signing in instead of using the web browser widget
  • Update Chromium in the Unreal Engine source code
  • Handle multiple clients logging into the same account at the same time. Try to prevent this from happening and deal with this scenario anyway just in case it ever happens. This forum post has a good suggestion, which is check in the start matchmaking lambda function whether or not a player id has any active game sessions associated with it. If so, then, we know the player is already in a game and shouldn't be able to make a new matchmaking request.
  • Remove request body validation code from the lambda code and use API Gateway instead
  • Remove dummy password check and replace it with a private vpc rest api or vpc peering
  • Replace player count check in manual backfill approach with a call to describe player sessions while passing the game session
    id to check if there are any player sessions in reserved status. If there are none, then we are no longer "waiting" for players to join.
  • Replace simple polling for matchmaking updates with web socket apis and dynamodb stream functionality (consider using redis/elasticsearch or other kind of in-memory database instead for this functionality <- actually this makes more sense for leaderboards or chat application, for receiving matchmaking updates; it may be better to just have sns publish messages to web socket api directly, example of ue4 web socket code here and here)
  • Replace REST API with HTTP API (API Gateway v1 vs API Gateway v2)
  • Add auto scaling and FleetIQ functionality (EC2, ECS, EKS, AWS Shield, etc., check out this article for more information)
  • Add friend system
  • Add party system
  • Enable TLS certificate generation and actually use the certificate to encrypt client-server communication
  • Add large match functionality
  • Add logic to keep track of user sessions and prevent people from logging into an account that has an active session currently, or kick out the original session out of the game client.
  • Add cross regional functionality such as route53/cloudfront to the API
  • Add ddos protection measures such as waf/cloudfront/cloudformation/etc.
  • Add Steam or any online subsystem integration
  • Add everything needed for an Android client and potentially adding the project to the Google Play Store (extend this to other client platforms such as Mac, Linux, iOS, Xbox, PS4, Nintendo, etc.)
  • Test with VR

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.