Wednesday, May 13, 2020

Added a Tilemap based 2D map generator!


The plan for this is to start working now on area detection, then on to connecting any isolated rooms!

Obviously very early development days, with much beautification to add once the actual functionality is completed.

Saturday, May 9, 2020

Procedural!

some time ago I worked on a procedural cave generator using cellular automata with C++ and SFML (Cave Bunny)

I have been wanting to explore that within unity too and so have been following along with the tutorials from Sebastian Lague, I haven't stopped on the Mr. Taft tutorials and in some way there is a plan to link everything up at some point, but whilst there are some ideas, these aren't yet tied into specific gameplay features - however - it's probably fairly obvious that I'm going to add some kind of procedural element!

For the mesh creation, that's a bit of a learning curve for me - probably overkill for my 2D needs but nonetheless, it's good to keep learning new things! Who knows maybe one day I'll break into 3D!

Stay Safe & Happy Coding

PappaP x


Saturday, April 18, 2020

Been busy, actually coding!

So been a quiet couple of weeks in lockdown, some (more) exciting personal news which I will be able to share soon but also working on implementing A* within the Mr. Taft Zelda-like series.

As usual, my code for this is fully shared on Github but is yet to be properly documented! That is the next task.

Anyway, for a sneaky preview of the finished article.

Features: 


  • It only starts pathfinding if the player is inside the grid, will also stop pathfinding once the player exits.
  • Unwalkable grid positions are calculated at runtime start based on the tilemap colliders (via a layermask)
  • pathfinding runs every x seconds as to not be continually calculating paths

Thank you!

Wouldn't have been possible without the excellent grid tutorials from CodeMonkey and of course Mr Taft! and his amazing Zelda-like.




Wednesday, April 8, 2020

A Unity experiment - Boss!

I wondered just how much of a Trinexx type boss I could make without much code, this is my WIP so far!

Uses: Hinge Joints x LOTS!, DoTween for movement and an FSM per head and body.

Still lot's to do but it's getting there!
Janky WIP Boss

Mr Taft FAQ 2 - Player Movement Speed is Choppy/Slow

This is the second in a series of FAQ articles to accompany the Zelda Like Tutorial Series from Mr. Taft. 


The Question:


"Hi guys my player is moving choppy like it is slowing down then going faster after a few seconds I'm not sure what I did wrong?"


The Solution(s):


1. The quick one!


Toggle VSync on in your game options.

Vsync On!

2. The longer (better?) one!


The issue is related to having the movement and animation updating from well, Update(). Update() is called once every frame and by its nature is variable in when it is called unless you are locked in with a VSync which limit's the calling of Update to the refresh rate of your monitor and is why the quick fix above works.

It is better, in my opinion for this tutorial series, to keep the input code within Update() but move the animation/movement code to within FixedUpdate() this occurs at a fixed interval determined by your project settings. Some sample code from my own PlayerMovement.cs is below. 

Excerpt from PlayerMovement.cs



Happy coding! :D

PappaP x

Thursday, March 26, 2020

Mr Taft FAQ 1 - Signal

This is the first in a series of FAQ articles to accompany the Zelda Like Tutorial Series from Mr. Taft. This question comes up a lot on the Discord Server.

The Question:

Hey guys - I've come to a complete standstill when implementing Signals in this Zelda for Unity project. My code for Signal & SignalListener are exactly as they should be with no errors, but I can't seem to drag my "Signal" over to my Signallistener. Any ideas why? Using unity 2019.1"

Or.

"im doing the signal system but seems like it doesnt recognize the object as an scriptable object, what can cause this?"


The Answer:

Unity 2019 already has a Signal, your one and the Unity one are being confused with each other. There are two fixes.

1. Don't use Signal as the name of your scritpable object, use Notification or TaftSignal for example instead!

2. You can create an object called signal but place it in a folder in the asset menu, that way Unity will treat it as a separate entity. 

in the Signal.cs file modify the CreateAssetMenu directive to read as follows.


When you want to create a signal as directed by Mr Taft, be sure to select the signal from your Scriptable folder!



Happy coding! :D

PappaP x

Sunday, March 22, 2020

Serialization of Scriptable Objects in Unity (Nesting) pt2. Binary!

In my last blog I said I wasn't going to do a binary saver, well - actually I was asked on the Mister Taft creates Discord server to post up a binary version, so here it is!

Disclaimer: I am in NO way a professional Unity coder, I am hacky and this might not (probably isn't) the best way to do this! But it works for me and I and hopefully, this is useful to someone, if so or if you have any questions please come to the Discord channel and let me know!

Not one to shy away I have modified the classes from <Part 1> to allow a flip between JSON and binary based on a selection in the editor!

Thanks again to my friend Ashfid from the discord server, we had a discussion on utilising an approach which was also featured in a GameGrind video.

I have again left out a lot of error checking for sake of clarity, but make sure to put some in your own code :) 

Thanks, Ashfid, MisterTaft, Bomara and all on the Mister Taft Discord.

Much love to you all, this is an absolutely crazy time, stay safe!

PappaP x

ps. I'm moving to Pastebin for the code, whilst not as pretty - it supports cutting the code out directly!

Downloads:



First up, a change to our SerializeListString class!

I have moved the Struct out into its own class SerialItem. There is no other change to this class.

Exceprt from SerializableListString.cs




The BinarySaver class.

Almost completely a shameless rip off from the GameGrind video mentioned above, I'd suggest having a watch if you want to understand the nuances. The methods in this class are static, so we can call them from anywhere.

Essentially I am utilising a generic method to ensure I can save out my SerializeListString class object. I'll let the code speak for itself as it's quite simple - there are some comments inline to explain where I think it's required.

For the binary save, I'm using the ./saves/ directory in our application persistent data path.

BinarySaver.cs



Meat and potatoes, again! Or How to actually use the BinarySaver!

As promised here we actually get to control whether we want to save out in JSON or Binary.

I am creating an enum to represent the two different save states and creating a public variable in the inspector to allow us to switch between states.

Exceprt from InventorySaver.cs




Switch for Saves! (and loads...)

OK, that was an awful pun, did anyone else get it? I didn't think so.

So, what we need to do now is this. We know from part 1 that our SL object is all we care about as we recreate/or save our inventory from that object; therefore BuildSaveData() and ImportSaveData() don't need to change at all! Nice!

In fact, the only things we actually need to change are the two functions LoadScitpables() and SaveScriptables(). That's a little misleading, as what I'm also going to do is break out the code for saving and loading via JSON into their own methods. The code inside the method is the same as we created in part 1.

JSONSave()


JSONLoad()

And next, I'm going to create a couple of complementary methods for BinarySave() and BinaryLoad(). I'm sure there are loads among you who can see where I'm going with this, hold on to your hats we are almost there! :D

BinarySave()



BinaryLoad()



Having the static methods saved earlier in the BinarySaver class really help to make this more readable! I should really go back and pull out the JSON methods into their own static method class too. Feel free to do that if you want!

Igor, Flip the switch!

These are the last couple of changes, first up, SaveScriptables. We take advantage of the enum saveType we have set in the inspector, depending on which one is set we either call JSONSave or BinarySave()!

SaveScriptables()

LoadScriptables()


And that's really it! You can now choose between using JSON or Binary to save your inventory object!

Hope you enjoyed!

PappaP x

 Hey, I'm alive! I haven't posted in a while, a long time, a very long time - having a newborn kinda saps your life when it comes to...

Most Viewed