Download

(39) Rama's Extra Blueprint Nodes for You as a Plugin, No C++ Required!

Yes! Those must be integrated into the engine as default BP nodes. :eek:

Thanks a lot Rama, you crazy awesome bearded man!

Wow this looks extremely useful, thank you Rama!

I lost track of how many nodes are in this but it must be up around 75 now?? As I have said before, this is a must have plugin! :smiley:

Another fantastic tool!
I can think of some really neat applications for this :slight_smile:

-Jeremy-

I’m abit new to this part of UE4, I’ve been focusing on class Blueprints and not Level Blueprints, so I’d like to get a better understanding of what’s going on with Spawning Actors in Levels. I should also note that I mainly be doing this with AI characters.

There are two main ways I can see spawning actors in Sub Levels being useful, based on 6+ years of UE3 experience.

Firstly, if you have several people working on a map then it’s good to have a _Design level as well as _Static and _Audio levels. This was common work practice among some UE3 devs. The persistent would only hold minimal data.

On a slightly rarer note, it was something I used extensively in UE3. I was working on an open world game which was split into a number of levels, each a cube in size. Sub Levels for each could be named so that they would only appear during particular missions or parts of the story. This gave me greater control of resources over the course of the game (bloody handy on console) but also allowed me to do things like load certain enemies earlier, so that they can be seen at greater distances. Usually due to their position in the world being impossible to hide.

HOWEVER, I would never script the spawning of actors in one level via an action / node in another. An event in the sub level (usually Level Loaded & Visible / Begin Play) because the sub level would also have the behaviour logic and other data for that actor.

So, does the ‘Can / should only spawn actors in persistent levels’ affect all kinds of actors? Can I get away with doing this already with AI?

and if not, how much work would a Coder have to do to allow me to solve this problem?

Hee hee!!

:slight_smile:

Yea something like 70+ now!

Great to hear from you Jeremy!

Enjoy my Runtime Rebindable Key Nodes!

Rama

4b996f7710fbd5c76274a9a62eda2d72df9776b9.jpeg

**Full Sample Project For You

Dynamically Re-Bindable Key Menu in UMG!**

Dear Community,

I am giving you a full sample project as a download (8mb) where I’ve created a fully functional UMG Key Rebinding System!

You can click on the name of any key and then simply enter a new one on the keyboard/gamepad (just pressing the button itself that you want to be the new binding!

And I do track ctrl,alt,shift, and command!

And the list is scrollable too!


**Rebind Actions During Runtime**

And best of all, because of my Victory BP Library nodes, the changes you make in the Key Rebinding Menu instantly update the ingame character input component!

So if you rebind Jump from spacebar to page up, it takes effect instantly!

Why Am I Giving This For Free?

Because its really important feature for any game and I just finished figuring out how to do it for Solus.

I figured you would enjoy it as well, since it was honestly not that easy to do, and I had to really think about how to do both the UMG and the actual C++ code to dynamically update action mappings during runtime

:heart:


**How To Use My Menu**

Go in game and press the K key!

Click on the black and red buttons to rebind the jump button!

Add new actions any time using **Project Settings->Input**

Download (8mb)

Here’s the full project for you!

It was made in UE4 Version 4.5!

Wiki Link to Download Page

:slight_smile:

Rama

**Entire Free Sample Project for You!

Rebind Keys At Runtime!**

4b996f7710fbd5c76274a9a62eda2d72df9776b9.jpeg

This was already incredible. now to have access to rebind-able keys at runtime AND a free sample project demonstrating how to achieve that in UMG is just all kinds of awesome :D.
Key rebinding is something many players seem to want but there wasn’t any indication it was even possible to do that in UE4 (at least via blueprints), so thank you very much for another incredible addition to your plugin, and thank you for all the blueprint nodes you’ve already made available, I’m incredibly happy that your plugin exists and grateful for your continued expansion of it :)!

Hee heee!

You’re welcome!

Great to hear from you!

:slight_smile:


**Video of My Runtime Key Redbinding Project For you
**

This video demonstrates how my Runtime Rebindable Key System does actually have a scrolling feature!

You can have infinite key bindings in your list!

I also demonstrate how easy and fast it is to add new keybindings usig Project Settings -> Input!

And!

**Remember that I am giving you this whole project for your own use!**

https://youtube.com/watch?v=Hj969IfWhVc


**Project Link**
https://forums.unrealengine.com/showthread.php?51449-Full-Project-Rama-s-UMG-Rebindable-Key-System-Rebind-keys-at-Runtime!&p=176136&viewfull=1#post176136

Rama

That sounds most awesome! Especially now that I’m thinking I should merge my meshes so they are as few as possible for mobile performance (although I hope I’ll only have about 50 meshes of about 20 polys each so I could probably take that hit), but yeah - with fewer, more complex, meshes my problem will be bigger. And I’d like to have accurate collision hits either way. :slight_smile:

I’ve posted a pic of my problem for clarity in my thread, don’t want to hijack this jampacked with goodness thread:

https://forums.unrealengine.com/showthread.php?50949-Can-t-get-hit-event-to-fire

The thread contains another link to a thread that seems to say the same - overlapping non-physics actors don’t respond to hit events, and checking ‘Simulation Generates Hit Events’ doesn’t do anything unless the actor is a physics actor…

You made me hopeful this is doable again! :smiley:

Pic and Testing For You

Dear Rumble,

I succeeded in doing what you appear to be trying to do using a new Third Person template project / My Character BP and the setup I show in picture below!

I am easily and accurately getting hit event locations/normals.

Do try my repro yourself and see what is going on in your specific case :slight_smile:

d96bd57af1619b1dac11b038b418079c10a60f05.jpeg

2d16db46320c67967ee1942b4e35742031880893.jpeg

**Set Volume of Any Sound Class

Any Time From Anywhere!**

This is a node that Hourences requested I make!

You can use this node to set the volume of any sound class, any time, from anywhere!

I am aware of the option of using a sound mixer, however it is not as dynamic because you have to use fixed sound increments.

**My node allows you to offer people an audio slider that is a continuous float value range based only on the slider increments.
**
Enjoy!

Rama

Wiki Download Page

Hey thanks Rama! I’ll try that later on today - I have a little nagging feeling coming from deep down my memory banks that I got a character class to do this correctly without physics, same as your case is, but a non-physics pawn class for some reason doesn’t function the same as a non-physics character class when hitting non-physics actors.

I will definitely double check that though. I do hope I’m wrong. Which happens. :slight_smile:

Big thanks for looking into this Rama! It’s really helpful when someone experienced confirms you’re right, says you’re wrong or just puts you in a better direction. Figuring out little gotchas when you start out can eat up so much of dev time…

You should never be using the Pawn class!

You are not getting what you paid for in UE4 if you do that!

There is a positively huuuge amount of code that is specific to characters, especially in regards to networking!

:slight_smile:

Rama

New Sound Node For you

Keep in mind you can now set the volume of any sound class to any value you want, anywhere in BP, any time!

:slight_smile:

You’re probably right, and just changing my class solved the problem. I really thought they should behave the same when it came to collisions as the character class seemed to just add additional code for movement, and since my movement has got nothing to do with an actual character (jumping around etc) I was under the impression I should use pawn. Guess that recommendation came from using less code… not sure.

But anyway, I have some reworking to do now which is great! :slight_smile: All my pawn motions seem to work just fine, the overlaps don’t work now although I’m sure I’ll figure that out soonish. :slight_smile: Thanks for kicking me down the right path!!

Awesomes.

Thanks again.

Rama’s BP Multiplayer Game Mode Solution

**Rama’s Multiplayer Game Mode Solution

Find Player Start

Choose Player Start

Can Player Restart

These core Multiplayer functions are now fully implementable/overridable in Blueprints!**

I have found a solution for the issue of implementing FindPlayerStart, ChoosePlayerStart, and CanPlayerRestart in Blueprints!

And I’ve tested it as working!

**You can now implement core network coding of choosing player starts entirely in Blueprints!
**


**How To Use**

In my picture below I show how to use my Game Mode overrides!

1. **First make a new BP and select my VictoryGameMode class** which comes with my Victory BP Library (make sure you have the latest download https://wiki.unrealengine.com/File:VictoryPlugin.zip)

If you already have a Game Mode BP, choose File -> Reparent and use my Victory Game Mode BP


2. Make sure you are using my Victory Game Mode in your **World Settings**!

3. Setup the Victory Game Mode BP the same as my picture below!

4. Celebrate! You can now implement core multiplayer logic in Blueprints!

*(right click -> new tab to see larger pic)*
![VictoryGameMode.jpg|1280x960](upload://1psgB0eeaCt9i59C4zf1sNwPmLm.jpeg)

CPP Override and CPP Override Var

Please note the notation I am using, any variable that has CPPOverride Var in its name is used only with the corresponding event. This is how I enable you to implement core multiplayer coding logic in Blueprints!


**Simple Data Types**

Please note that for the function that is designed to return a boolean value, CanPlayerRestart, you must pass the boolean and also a special variable, **CPPOverride SelfReference**, this is how you tell the CPP that you are implementing the Game Mode function in BP!

Non Destructive Solution

My solution is entirely optional and if you do not implement the event in Blueprints, and your programmer does it in C++, my solution will not interfere at all with your existing code base!


**Log Message**

If you do implement my solution in BP, I am printing log information to indicate this, so you/your programmer knows you are using a BP override and any C++ code will not be run.

C++ Code

Here is my C++ code for FindPlayerStart which shows how I worked around the issue of overriding FindPlayerStart via Blueprints!

Again I’ve tested this as entirely working in PIE and commandline games!

.h



//Find Player Start
public:
	/** Use this var inside the body of CPP Override ~ Find Player Start event to override the C++ functionality! */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Victory Game Mode")
	AActor* CPPOverrideVar_FindPlayerStart;
	
	/** 
	 * Use CPPOverrideVar_FindPlayerStart inside of this event to implement FindPlayerStart in BP ! <3 Rama
	 *
	 * Return the 'best' player start for this player to start from.
	 * @param Player - is the AController for whom we are choosing a playerstart
	 * @param IncomingName - specifies the tag of a Playerstart to use
	 * @returns Actor chosen as player start (usually a PlayerStart)
	 */
	UFUNCTION(BlueprintImplementableEvent, meta=(FriendlyName = "CPP Override ~ Find Player Start"))
	virtual void CPPOverride_FindPlayerStart();

	virtual class AActor* FindPlayerStart( AController* Player, const FString& IncomingName = TEXT("") ) override;


.cpp



//Find
AActor* AVictoryGameMode::FindPlayerStart( AController* Player, const FString& IncomingName )
{
	//Clear any previous to indicate whether BP did an override
	CPPOverrideVar_FindPlayerStart = NULL;
	
	//=======================
	//BP Hook by Rama
	this->CPPOverride_FindPlayerStart();
	//=======================
	
	if(CPPOverrideVar_FindPlayerStart) //Did BP programmer set the var?
	{ 
		//Indicate that the BP override was found and is being used.
		UE_LOG(VictoryGameModeLog, Log, TEXT("

"));
		UE_LOG(VictoryGameModeLog, Log, TEXT("FindPlayerStart: CPP override found in %s and used instead of C++ implementation"), *GetName());
		UE_LOG(VictoryGameModeLog, Log, TEXT("

"));

		return CPPOverrideVar_FindPlayerStart;
	} 
	 
	//Default C++ Implementation
	return Super::FindPlayerStart(Player,IncomingName);
}



**Enjoy!**

Rama

**Full Sample Project For You

Dynamically Re-Bindable Key Menu in UMG!**

Dear Community,

I am giving you a full sample project as a download (8mb) where I’ve created a fully functional UMG Key Rebinding System!

You can click on the name of any key and then simply enter a new one on the keyboard/gamepad (just pressing the button itself that you want to be the new binding!

And I do track ctrl,alt,shift, and command!

And the list is scrollable too!


**Rebind Actions During Runtime**

And best of all, because of my Victory BP Library nodes, the changes you make in the Key Rebinding Menu instantly update the ingame character input component!

So if you rebind Jump from spacebar to page up, it takes effect instantly!

I could not have done this without some new nodes I made after many hours of C++ research! These nodes are now part of my Victory BP Library!

Why Am I Giving This For Free?

Because its really important feature for any game and I just finished figuring out how to do it for Solus.

I figured you would enjoy it as well, since it was honestly not that easy to do, and I had to really think about how to do both the UMG and the actual C++ code to dynamically update action mappings during runtime

:heart:


**How To Use My Menu**

Go in game and press the K key!

Click on the black and red buttons to rebind the jump button!

Add new actions any time using **Project Settings-&gt;Input**

Download (8mb)

Here’s the full project for you!

It was made in UE4 Version 4.5!

Wiki Link to Download Page

:slight_smile:

Rama

2d16db46320c67967ee1942b4e35742031880893.jpeg

**Set Volume of Any Sound Class

Any Time From Anywhere!**

This is a node that Hourences requested I make!

You can use this node to set the volume of any sound class, any time, from anywhere!

I am aware of the option of using a sound mixer, however it is not as dynamic because you have to use fixed sound increments.

**My node allows you to offer people an audio slider that is a continuous float value range based only on the slider increments.
**
Enjoy!

Rama

Wiki Download Page

**UMG, Get All Widgets Of Class

Updated!**

This node will be in a near future engine release! Epic accepted my github pull request!

You can start playing with it now though, as part of my plugin!

Now you have an optional bool filter to only return widgets that are at the top level, see Nick Darnell’s comment for more information


**My C++ Code For this Node**



```


void UVictoryBPFunctionLibrary::GetAllWidgetsOfClass(UObject* WorldContextObject, TSubclassOf<UUserWidget> WidgetClass, TArray<UUserWidget*>& FoundWidgets,bool TopLevelOnly)
{
	//Prevent possibility of an ever-growing array if user uses this in a loop
	FoundWidgets.Empty();
	//~~~~~~~~~~~~
	 
	if(!WidgetClass) return;
	if(!WorldContextObject) return;
	 
	UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject);
	if(!World) return;
	//~~~~~~~~~~~
	
	for(TObjectIterator<UUserWidget> Itr; Itr; ++Itr)
	{
		if(Itr->GetWorld() != World) continue;
		//~~~~~~~~~~~~~~~~~~~~~
		
		if( ! Itr->IsA(WidgetClass)) continue;
		//~~~~~~~~~~~~~~~~~~~
		 
		//Top Level?
		if(TopLevelOnly)
		{
			//only add top level widgets
			if(Itr->GetIsVisible())			//IsInViewport in 4.6
			{
				FoundWidgets.Add(*Itr);
			}
		}
		else
		{
			//add all internal widgets
			FoundWidgets.Add(*Itr);
		}
	}
}


```



Pic

71009bd806383a480cc409a36e116fe857cc7fd1.jpeg

:heart:

Rama