I’m a very, very novice programmer, who just wrapped up a Udemy course on C++ with Unreal. Despite that, I’m finding the Blueprints more and more easy to use, so I guess that’s that.
Anyway, I decided to go without too much direct instruction for a while and try my hand at implementing something of my own. For my first effort I settled on making a very, very rough mechanic of a movement system from this book series, Mistborn. Basically, my goals are:
Make it so the character can throw a coin in whatever direction they’re looking (done!)
Make it so the character can press a separate key and be flung in the opposite direction of the last coin they threw.
I found out that there’s a Launch Character function, which is superb, but getting the launch velocity for it is proving tricky. In my mind, the best way to get this would be to get the Vector from the most recently thrown coin to the ThirdPersonController, then use that to get a Velocity and then fling the player. But I just can’t seem to find a good way to get the location of the last coin thrown. I’d use a cast and then GetActorLocation, but I’m struggling to find a way to plug an “Other” object into the cast. The InputAction event doesn’t have that object node to plug into a cast, I don’t fully understand why that is, and I’m a bit stuck on how to progress.
So, TL;DR: how can I get the location of an object in the world on an input event to get a Vector to launch the player?
(bonus question, I’m not sure how I would specify it to only grab the location of the most recently spawned coin, so if anyone has any advice in that department please let me know thanks)
To get the direction from 2 actors Actor.Loc - actor2.Loc then multiply then convert into unit vector then multiply it, then enjoy the launch function.
You mean do this in C++? I can just do this .Loc thing, subtract them, and get a direction, then multiply it and convert to vector? Is there a way to do it through blueprint?
how can I get the location of an object in the world on an input event to get a Vector to launch the player
You could store the location only as a vector but then you’d need to wait for the coin to stop moving. So we store a reference to the spawned actor instead. One thing that’d need adding here before jumping away is to check whether last coin is valid - perhaps something scooped it up! Better safe than sorry (and coinless).
there is multiple ways to do it, though I’ve learn’t a new one it seems that RotateVectorAroundAxis… is kind off new lol.
But I stick to the tradiational way vector - vector …
Right, I get how this works, but my question was how to even get the location of the second actor. I know how to get the vector once I have the locations, I was just confused on how to get the locations in the first place.
Yes you can, just declare a variable on it with a specific value that is what is a variable on it’s core, But hey do not use my way as it is expensive and stupid… LoL
Agree, one can but absolutely should not rely on GetAll to get a specific element out of an array. Please avoid - every 10th run or so you’ll get elements in a different order and open the gate to a little debugging hell. Reference stuff.
So I gave this a shot and I’m still having an issue now, I can set the Last Thrown Coin but then I can’t seem to do the Get Static Mesh off of it (it just won’t show up?) previously I was getting the capsule component but that isn’t showing up either. Any idea why that might be?
EDIT: It saying “Object Reference is not compatible with Object Reference” is really throwing me for a loop
It worked! One final question, I think. Got a bit of a bug and I’m hella confused
I noticed that as I was pressing the key to launch, sometimes I was being sent in a direction completely away from where the coin was. When I pressed F8 to check it out and selected the coin, I found that the static mesh of the coin is way over there while the transform (is that the root?) is in a completely different place. I would think that because I childed the static mesh to the root component, that they would stay together, but that doesn’t seem to be the case. What’s also weird is that it seems like, despite using the static mesh in the launch, that when I press the key I’m pushing away from the root component and not the static mesh. Any idea why this could be happening?
EDIT: Figured it out! Just replaced the root component with the collision. Weird