Also, someone was asking how you'd do those "Itano Circus" anime missiles you get in fuckin' Gundam Whatever or whatever so I did this as a quick experiment and it made a cool couple gifs
Okay, researched and got little hitboxes appearing behind my character to kill enemies. Can make those invisible* and repeat with the boss. Now to just figure out how to make the boss move around the way I want.
*I have used invisible blocks as the mechanism for my ground collision, I was curious if there was a better way.
Yeah those missiles have always been super easy and fun to implement. I've always found that the limiting factor was always managing that many entities at the same time.
Okay, researched and got little hitboxes appearing behind my character to kill enemies. Can make those invisible* and repeat with the boss. Now to just figure out how to make the boss move around the way I want.
*I have used invisible blocks as the mechanism for my ground collision, I was curious if there was a better way.
Usually, you just attach an additional collider to an existing object. I mean, that's what I did in XNA, and that seems to be the idiomatic way in Unity. What engine are you using?
I'm not sure I understand what you're trying to do there, but one problem is that I believe yield basically kicks out of the coroutine until the next frame(or until f waitforseconds have passed). So anything that happens after the yield , but within the condition, isn't happening.
The rest seems fine, though I'm not sure if it's all necessary(I don't know what you're using "isTyping" for, for instance).
One thing that might just not have been copied over, but where do you declare the typingdelay, and what is it set at?
Also, maybe this is fine, but it seems weird to me to have a void accept arguments, only to have them entered as.. 0? That... I'm not sure what that does, in the public void ReceiveDialog(TextAsset ta, int startLine=0, int endLine = 0). That's not really accepting arguments I would think. I've never seen it before though, so maybe it's just something I'm not familiar with.
Also, maybe this is fine, but it seems weird to me to have a void accept arguments, only to have them entered as.. 0? That... I'm not sure what that does, in the public void ReceiveDialog(TextAsset ta, int startLine=0, int endLine = 0). That's not really accepting arguments I would think. I've never seen it before though, so maybe it's just something I'm not familiar with.
Those are default arguments. So, you don't have to supply them, and if you don't, that's what you get.
Also, maybe this is fine, but it seems weird to me to have a void accept arguments, only to have them entered as.. 0? That... I'm not sure what that does, in the public void ReceiveDialog(TextAsset ta, int startLine=0, int endLine = 0). That's not really accepting arguments I would think. I've never seen it before though, so maybe it's just something I'm not familiar with.
Those are default arguments. So, you don't have to supply them, and if you don't, that's what you get.
Huh.
The more you know! I thought it might be something like that, just I've never seen it or done it before, so I wasn't sure.
@templewulf
Does your code work if you comment out the line:
Destroy(gameObject);
It seems that if you destroy the object which called the coroutine, the coroutine stops getting updated.
Actually, yes, but only because I fixed that mistake just yesterday!. You'll notice that my IEnumerator method is private, so it can only be called from the same object. I provide the public method right under "Called from an ordinary method on the same object, so that other objects can call this if they want to be deleted right after:" That way, any other object that may or may not get deleted has to call the public method, thus attaching the coroutine to the dialog box manager.
I also just double checked, and yeah that Destroy method makes no difference. However, if I change `yield return new WaitForSeconds(typeDelay);` to `yield return null;`, it doesn't freeze up.
I'm not sure I understand what you're trying to do there,
It's essentially a JRPG-style dialog box that types out one character at a time instead of displaying the whole line at once.
but one problem is that I believe yield basically kicks out of the coroutine until the next frame(or until f waitforseconds have passed). So anything that happens after the yield , but within the condition, isn't happening.
Sure, the delay is what I want, but the problem is that it never resumes.
The rest seems fine, though I'm not sure if it's all necessary(I don't know what you're using "isTyping" for, for instance).
Since StartCoroutine puts whatever you call in a different thread (sort of*), it's common to have flags to mark the state of the object. That way, if I get a request to stop the text typing (what skipTypingRequested does), I can check those flags in this coroutine. Like a primitive, degenerate form of semaphores.
One thing that might just not have been copied over, but where do you declare the typingdelay, and what is it set at?
That's a public variable on the class, so I can change it in the editor.
// object handles
public GameObject textBox;
public Text textObj;
// editor properties
public float typingDelay = 0.1f;
// private!
private TextAsset textFile;
private string[] textLines;
private int currentLine;
private int endAtLine;
private float frozenTimeScale = 1f; // temp var; can we factor this out?
private bool isTyping = false;
private bool skipTypingRequested = false;
Also, maybe this is fine, but it seems weird to me to have a void accept arguments, only to have them entered as.. 0? That... I'm not sure what that does, in the public void ReceiveDialog(TextAsset ta, int startLine=0, int endLine = 0). That's not really accepting arguments I would think. I've never seen it before though, so maybe it's just something I'm not familiar with.
Since those determine what line to start and end on in a given text file, calling it without specifying will just display the first line. I may not end up using that at all, but it seemed like a thing I might want at some point. C# Optional Arguments
Edit:
I am given to believe that the coroutines don't actually start new threads, but the flow control is easier to visualize that way.
Not that I understand Unity, myself. Does anyone have any idea why my coroutine is freezing the whole goddamn game?
Ahaha, apparently coroutines are updated on frame updates, and adjusting Timescale applies to coroutines as well. Meaning that setting `Time.timeScale = 0` to stop enemy behaviors means that my coroutine won't do anything either!
What's the best way to pause action without freezing up my coroutines? I looked at Time.realtimeSinceStartup, but that sounds like just implementing my own game loop inside Unity's!
What's the best way to pause action without freezing up my coroutines? I looked at Time.realtimeSinceStartup, but that sounds like just implementing my own game loop inside Unity's!
So Time.timeScale can get really dangerous and complex. A lot of unexpected corner cases and weirdness can pop up unless you are really careful with it. For a serious project I'd highly recommend coming up with your own pause logic.
It's installed! I need to do some final touch-up on the cabinet tomorrow, but it's installed!
Also for some reason it doesn't seem to be picking a new key when it restarts but... that is the least of my worries. And since the gallery opens tomorrow, I'm not really going to worry about little things like that.
This is neat as hell man. Congrats on getting this done.
Okay, researched and got little hitboxes appearing behind my character to kill enemies. Can make those invisible* and repeat with the boss. Now to just figure out how to make the boss move around the way I want.
*I have used invisible blocks as the mechanism for my ground collision, I was curious if there was a better way.
Usually, you just attach an additional collider to an existing object. I mean, that's what I did in XNA, and that seems to be the idiomatic way in Unity. What engine are you using?
Personal project for gamemaker.
I also hit another block as I completely forgot what happened when enemies damaged you in the original kung fu, had to find a streaming site and actually play it.
What's the best way to pause action without freezing up my coroutines? I looked at Time.realtimeSinceStartup, but that sounds like just implementing my own game loop inside Unity's!
So Time.timeScale can get really dangerous and complex. A lot of unexpected corner cases and weirdness can pop up unless you are really careful with it. For a serious project I'd highly recommend coming up with your own pause logic.
I've got a good grasp on C#, IEnumerator, and the way yield works. Ruby probably did more of that for me than C# itself did.
But I'm using Unity like a dog rolling around a pile of leaves. It's messy, I don't really know what's happening, and hopefully I'll turn up something good if I just smother my face in it enough.
I didn't check InvokeRepeating; I think your advice about rolling my own pause logic is where I'll put my efforts next. I guess a finite state machine was inevitable!
@templewulf I was going to recommend a state machine but you've already come to that conclusion it seems. My 2 cents anyways, I'd have a state machine with at least two states, an active and an in-active state. The active state would hold all of enemy's behavior logic, and the enemy would enter into that state on their turn. The in-active state might hold some animation logic for when they take damage or something like that, along with logic to decide when it's their turn. Game Programming Patterns has a chapter on state machines that I found was a decent primer on the subject and is also not engine dependent.
It's installed! I need to do some final touch-up on the cabinet tomorrow, but it's installed!
Also for some reason it doesn't seem to be picking a new key when it restarts but... that is the least of my worries. And since the gallery opens tomorrow, I'm not really going to worry about little things like that.
This is neat as hell man. Congrats on getting this done.
Are those two trackballs there?
Thanks!
It's one trackball, and then a button with an LED in it(that even changes colours!)
Tonight was the gallery opening and reception and.. looks like I need to patch it tomorrow. The towers aren't stopping when they're dying, which is normally fine if unclear, but the laser/melody towers also start playing the next time the scene is loaded and one laser tower is working, even though they're not firing at all and have no target. And then if you load again more play, and they get louder and louder with overlapping events until it's completely unbearable as soon as you build one tower on like the 3rd playthrough. And since it's supposed to be running for hours at a time, well.....
@templewulf I was going to recommend a state machine but you've already come to that conclusion it seems. My 2 cents anyways, I'd have a state machine with at least two states, an active and an in-active state. The active state would hold all of enemy's behavior logic, and the enemy would enter into that state on their turn. The in-active state might hold some animation logic for when they take damage or something like that, along with logic to decide when it's their turn. Game Programming Patterns has a chapter on state machines that I found was a decent primer on the subject and is also not engine dependent.
That's a pretty good idea. I think that in combination with a WaitForRealSeconds as suggested on the Unity blog would help.
MachwingIt looks like a harmless old computer, doesn't it?Left in this cave to rot ... or to flower!Registered Userregular
so I spent an hour today trying to debug why a local server process, when locked by Process A and asked for a lock by Process B, kept reporting that it "Could not be locked by Process B because it is locked by Process B"
it turns out my god damn string formatting was "Could not be locked by Process {0} because it is locked by Process {0}"
@templewulf I was going to recommend a state machine but you've already come to that conclusion it seems. My 2 cents anyways, I'd have a state machine with at least two states, an active and an in-active state. The active state would hold all of enemy's behavior logic, and the enemy would enter into that state on their turn. The in-active state might hold some animation logic for when they take damage or something like that, along with logic to decide when it's their turn. Game Programming Patterns has a chapter on state machines that I found was a decent primer on the subject and is also not engine dependent.
That's a pretty good idea. I think that in combination with a WaitForRealSeconds as suggested on the Unity blog would help.
It's installed! I need to do some final touch-up on the cabinet tomorrow, but it's installed!
Also for some reason it doesn't seem to be picking a new key when it restarts but... that is the least of my worries. And since the gallery opens tomorrow, I'm not really going to worry about little things like that.
This is neat as hell man. Congrats on getting this done.
Are those two trackballs there?
Thanks!
It's one trackball, and then a button with an LED in it(that even changes colours!)
Tonight was the gallery opening and reception and.. looks like I need to patch it tomorrow. The towers aren't stopping when they're dying, which is normally fine if unclear, but the laser/melody towers also start playing the next time the scene is loaded and one laser tower is working, even though they're not firing at all and have no target. And then if you load again more play, and they get louder and louder with overlapping events until it's completely unbearable as soon as you build one tower on like the 3rd playthrough. And since it's supposed to be running for hours at a time, well.....
What can I say, it's not that interesting of a visual release.
I spent a lot of time tuning the input and performance for this release. I came up with a system to auto calibrate the accelerometer and I need to figure out how invisible I can make it to the players. If anyone takes a look I would appreciate feedback. I have survey set up here.
One important note: In the intermediate menu-type screen that loads at the beginning, and also loads if you don't touch it for a minute after the end of the game, it says "Push button to start". "Button" in this case is the space bar, since that's what the button in the machine was bound to.
@Khavall I get this error with the windows version: "There should be 'DJ Tower_Data'
folder next to the executable"
I was in Vancouver last week, it would have been super cool to come check out the cabinet in person, too bad.
I implemented the logic change I alluded to last time: instead of representing a curve by a dozen or so individual GameObjects with EdgeCollider2Ds, a curve is represented by just one EdgeCollider2D with its own points, and the Hamsterball will travel along it. The logic is a bit more complicated, but the savings on GameObjects is worth it!
After that, I moved on to learning how to do editor extensions. The SurfaceNode component I wrote now has an interface to automatically generate its Edge in the shape of a curve or a straight line that extends from your choice of the corners of any attached SpriteRenderer. Furthermore, SurfaceNode also has some grid-snapping behavior that keeps all the tiles nicely arranged. I haven't gotten to this bit yet, but I have plans to also detect whether the surface's endpoints are near any other surface's endpoints whose surface normals are close enough to treat as being contiguous with it. Once that's done, the end result will be the ability to define platform tiles and just fly them into place, Super Mario Maker-style. And that feels pretty damn good for only having an hour a day for a week thrown at this.
Obligatory screenshot! The tiles still have a debug component attached that renders their edge colliders and a representation of the surface normal at the center of each line segment in the edge.
My favorite musical instrument is the air-raid siren.
One important note: In the intermediate menu-type screen that loads at the beginning, and also loads if you don't touch it for a minute after the end of the game, it says "Push button to start". "Button" in this case is the space bar, since that's what the button in the machine was bound to.
Got a chance to try it out. Thoughts:
I get prompted for a firewall exception every time I start the app. What's the reason for this? Analytics?
For some reason I didn't see the tutorial on first load up. When I restarted the game it appeared, not sure why I missed it the first time.
Tutorial has a lot of text and moved to the next page before I could read everything.
The groove text is cutoff on my Mac. (It's a retina Macbook Pro)
The game might be too zoomed in. It takes awhile before you even see the first enemy, which feels kind of weird because you don't see if the objective / what the towers are doing immediately.
It's really hard to recover from a lost tower. It seems like once you lose two or more, your days are numbered. It would be nice if you could recover in some way.
Not quite sure how to play the game well, there isn't quite enough feedback as to what was a good play session vs when I am playing poorly.
Really like the concept. Will be curious to see how it develops.
99 bugs of code on the wall
99 bugs of code
take one down, patch it around
HOLYFUCKHOWDOIUNDOWHATIDID on the wall
Back to square one. Transferring all the gamemaker step events to scripts went well for my player object and the generic enemies, but for some reason, the boss slowly descended the screen without impacting my objects as the EXACT same script should have had her do.
edit: I'm an idiot who forgot how to properly write a multi line "if statement"
So my code did compile
and it did switch states properly to the attack script
and the attack script did trigger the timeline
and the timeline did do everything properly in the first moment
and that's when the boss stopped working and just drifted to the left in her default animation and a hitbox still there.....I should color the boss' hitbox differently, maybe checkboards.
The worst thing is when you undo, but it's still broken.
That's the one thing that I'm uncomfortable with re: graphical logic editors like Blueprints. If I'm editing an object's BP and undo 10 steps, will it undo just that editor's 10 steps or is it undoing stuff I did globally? Can the undo/redo be reliably used even with complex operations like deleting a huge chunk of nodes?
Considering that logic inside, say, a function, is tied to the outside parameters feeding into it, what will happen if I change the outside parameters? Will it auto-adjust the function? And if I then undo that, will it fix what it adjusted?
Not sure what you guys mean. Blueprints can be very reliably version controlled, even have a visual diff tool that let you compare your current revision to any previous revision, and even a merge tool.
Not sure what you guys mean. Blueprints can be very reliably version controlled, even have a visual diff tool that let you compare your current revision to any previous revision, and even a merge tool.
Do they? Last I checked it was just a binary blob so the usual tools don't understand it
So I think I want to learn Unreal Engine, are there any good tutorials or books for learning it?
I've tried Unity in the past but I think I'd like working in C++ again, feels raw.
I found just playing around with their samples worked for me. Start with creating a few different type of template projects, then go download their free mini games and tech demos and look at how they do stuff
Not sure what you guys mean. Blueprints can be very reliably version controlled, even have a visual diff tool that let you compare your current revision to any previous revision, and even a merge tool.
Do they? Last I checked it was just a binary blob so the usual tools don't understand it
Yes they do - it's built right into the engine. So if you use Perforce, Git, or SVN with the engine integration (and there's really no reason why you shouldn't), you can diff them right there while working on stuff. It's pretty handy!
Posts
Steam: Elvenshae // PSN: Elvenshae // WotC: Elvenshae
Wilds of Aladrion: [https://forums.penny-arcade.com/discussion/comment/43159014/#Comment_43159014]Ellandryn[/url]
Also, someone was asking how you'd do those "Itano Circus" anime missiles you get in fuckin' Gundam Whatever or whatever so I did this as a quick experiment and it made a cool couple gifs
Legends of Runeterra: MNCdover #moc
Switch ID: MNC Dover SW-1154-3107-1051
Steam ID
Twitch Page
*I have used invisible blocks as the mechanism for my ground collision, I was curious if there was a better way.
http://www.fallout3nexus.com/downloads/file.php?id=16534
Usually, you just attach an additional collider to an existing object. I mean, that's what I did in XNA, and that seems to be the idiomatic way in Unity. What engine are you using?
I've got this IEnumerator method for "typing" up text in my text box:
Called from an ordinary method on the same object, so that other objects can call this if they want to be deleted right after:
And the whole thing is usually started up by sending a new dialog file to the DialogManager object:
Which is, in this test, being called by my ShoutZone object.
The net effect is that it types the first character of the first line, freezes on the yield statement, and it never gets to my second Debug.Log call.
Any suggestions?
The rest seems fine, though I'm not sure if it's all necessary(I don't know what you're using "isTyping" for, for instance).
One thing that might just not have been copied over, but where do you declare the typingdelay, and what is it set at?
Also, maybe this is fine, but it seems weird to me to have a void accept arguments, only to have them entered as.. 0? That... I'm not sure what that does, in the public void ReceiveDialog(TextAsset ta, int startLine=0, int endLine = 0). That's not really accepting arguments I would think. I've never seen it before though, so maybe it's just something I'm not familiar with.
Those are default arguments. So, you don't have to supply them, and if you don't, that's what you get.
Huh.
The more you know! I thought it might be something like that, just I've never seen it or done it before, so I wasn't sure.
Does your code work if you comment out the line:
Destroy(gameObject);
It seems that if you destroy the object which called the coroutine, the coroutine stops getting updated.
Actually, yes, but only because I fixed that mistake just yesterday!. You'll notice that my IEnumerator method is private, so it can only be called from the same object. I provide the public method right under "Called from an ordinary method on the same object, so that other objects can call this if they want to be deleted right after:" That way, any other object that may or may not get deleted has to call the public method, thus attaching the coroutine to the dialog box manager.
I also just double checked, and yeah that Destroy method makes no difference. However, if I change `yield return new WaitForSeconds(typeDelay);` to `yield return null;`, it doesn't freeze up.
Sure, the delay is what I want, but the problem is that it never resumes.
Since StartCoroutine puts whatever you call in a different thread (sort of*), it's common to have flags to mark the state of the object. That way, if I get a request to stop the text typing (what skipTypingRequested does), I can check those flags in this coroutine. Like a primitive, degenerate form of semaphores.
That's a public variable on the class, so I can change it in the editor.
Since those determine what line to start and end on in a given text file, calling it without specifying will just display the first line. I may not end up using that at all, but it seemed like a thing I might want at some point. C# Optional Arguments
Edit:
I am given to believe that the coroutines don't actually start new threads, but the flow control is easier to visualize that way.
Ahaha, apparently coroutines are updated on frame updates, and adjusting Timescale applies to coroutines as well. Meaning that setting `Time.timeScale = 0` to stop enemy behaviors means that my coroutine won't do anything either!
What's the best way to pause action without freezing up my coroutines? I looked at Time.realtimeSinceStartup, but that sounds like just implementing my own game loop inside Unity's!
http://stackoverflow.com/a/32469037/20774
http://twistedoakstudios.com/blog/Post83_coroutines-more-than-you-want-to-know
It's a good thing to get a grasp on.
So Time.timeScale can get really dangerous and complex. A lot of unexpected corner cases and weirdness can pop up unless you are really careful with it. For a serious project I'd highly recommend coming up with your own pause logic.
That being said, do Invoke and InvokeRepeating work with time scale set to 0?
This is neat as hell man. Congrats on getting this done.
Are those two trackballs there?
Nice, reminds me a lot of Thief. The way you move you started to move camera up reminded me of the climb animation from the game as well.
Personal project for gamemaker.
I also hit another block as I completely forgot what happened when enemies damaged you in the original kung fu, had to find a streaming site and actually play it.
http://www.fallout3nexus.com/downloads/file.php?id=16534
I've got a good grasp on C#, IEnumerator, and the way yield works. Ruby probably did more of that for me than C# itself did.
But I'm using Unity like a dog rolling around a pile of leaves. It's messy, I don't really know what's happening, and hopefully I'll turn up something good if I just smother my face in it enough.
I didn't check InvokeRepeating; I think your advice about rolling my own pause logic is where I'll put my efforts next. I guess a finite state machine was inevitable!
Thanks!
It's one trackball, and then a button with an LED in it(that even changes colours!)
Tonight was the gallery opening and reception and.. looks like I need to patch it tomorrow. The towers aren't stopping when they're dying, which is normally fine if unclear, but the laser/melody towers also start playing the next time the scene is loaded and one laser tower is working, even though they're not firing at all and have no target. And then if you load again more play, and they get louder and louder with overlapping events until it's completely unbearable as soon as you build one tower on like the 3rd playthrough. And since it's supposed to be running for hours at a time, well.....
That's a pretty good idea. I think that in combination with a WaitForRealSeconds as suggested on the Unity blog would help.
it turns out my god damn string formatting was "Could not be locked by Process {0} because it is locked by Process {0}"
You could also go nuts and use an Entity Component System.
https://www.youtube.com/watch?v=1wvMXur19M4&utm_content=buffer601fb&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer
I wrote my game in it and it's a nice design pattern, though there is some pain points due to learning best practices for a new style of architecture.
ART!!!
Steam: Elvenshae // PSN: Elvenshae // WotC: Elvenshae
Wilds of Aladrion: [https://forums.penny-arcade.com/discussion/comment/43159014/#Comment_43159014]Ellandryn[/url]
Now with hats:
What can I say, it's not that interesting of a visual release.
I spent a lot of time tuning the input and performance for this release. I came up with a system to auto calibrate the accelerometer and I need to figure out how invisible I can make it to the players. If anyone takes a look I would appreciate feedback. I have survey set up here.
Click here for the public Android beta.
If you guys want to play what I'm still calling the "alpha", you can grab it here!(Currently the only hosting I have is my school server, but I'm probably going to put it elsewhere too)
EDIT: Ok also alt-links here(win), and here(mac)
One important note: In the intermediate menu-type screen that loads at the beginning, and also loads if you don't touch it for a minute after the end of the game, it says "Push button to start". "Button" in this case is the space bar, since that's what the button in the machine was bound to.
folder next to the executable"
I was in Vancouver last week, it would have been super cool to come check out the cabinet in person, too bad.
EDIT: It should be fixed and at the same address now.
I implemented the logic change I alluded to last time: instead of representing a curve by a dozen or so individual GameObjects with EdgeCollider2Ds, a curve is represented by just one EdgeCollider2D with its own points, and the Hamsterball will travel along it. The logic is a bit more complicated, but the savings on GameObjects is worth it!
After that, I moved on to learning how to do editor extensions. The SurfaceNode component I wrote now has an interface to automatically generate its Edge in the shape of a curve or a straight line that extends from your choice of the corners of any attached SpriteRenderer. Furthermore, SurfaceNode also has some grid-snapping behavior that keeps all the tiles nicely arranged. I haven't gotten to this bit yet, but I have plans to also detect whether the surface's endpoints are near any other surface's endpoints whose surface normals are close enough to treat as being contiguous with it. Once that's done, the end result will be the ability to define platform tiles and just fly them into place, Super Mario Maker-style. And that feels pretty damn good for only having an hour a day for a week thrown at this.
Obligatory screenshot! The tiles still have a debug component attached that renders their edge colliders and a representation of the surface normal at the center of each line segment in the edge.
Got a chance to try it out. Thoughts:
Really like the concept. Will be curious to see how it develops.
99 bugs of code
take one down, patch it around
HOLYFUCKHOWDOIUNDOWHATIDID on the wall
Back to square one. Transferring all the gamemaker step events to scripts went well for my player object and the generic enemies, but for some reason, the boss slowly descended the screen without impacting my objects as the EXACT same script should have had her do.
edit: I'm an idiot who forgot how to properly write a multi line "if statement"
So my code did compile
and it did switch states properly to the attack script
and the attack script did trigger the timeline
and the timeline did do everything properly in the first moment
and that's when the boss stopped working and just drifted to the left in her default animation and a hitbox still there.....I should color the boss' hitbox differently, maybe checkboards.
http://www.fallout3nexus.com/downloads/file.php?id=16534
That's the one thing that I'm uncomfortable with re: graphical logic editors like Blueprints. If I'm editing an object's BP and undo 10 steps, will it undo just that editor's 10 steps or is it undoing stuff I did globally? Can the undo/redo be reliably used even with complex operations like deleting a huge chunk of nodes?
Considering that logic inside, say, a function, is tied to the outside parameters feeding into it, what will happen if I change the outside parameters? Will it auto-adjust the function? And if I then undo that, will it fix what it adjusted?
Unreal Engine 4 Developers Community.
I'm working on a cute little video game! Here's a link for you.
Do they? Last I checked it was just a binary blob so the usual tools don't understand it
I've tried Unity in the past but I think I'd like working in C++ again, feels raw.
I found just playing around with their samples worked for me. Start with creating a few different type of template projects, then go download their free mini games and tech demos and look at how they do stuff
Yes they do - it's built right into the engine. So if you use Perforce, Git, or SVN with the engine integration (and there's really no reason why you shouldn't), you can diff them right there while working on stuff. It's pretty handy!
Unreal Engine 4 Developers Community.
I'm working on a cute little video game! Here's a link for you.