A little bit about yourself
Hello, I am 16 years old and I love playing Just Shapes & Beats (JSAB). One fine day I learned about a game like JSAB. I was very absorbed in the gameplay part, the developers created more than 30 levels from simple geometric shapes - it's brilliant! But I didn't want to play just like that, I wanted to create something of my own. And since JSAB has a level editor, but it has been in pre-alpha testing for more than 2 years, and I want to make levels, I decided to create my own JSAB. Now let's get down to the very beginning.
The very beginning began
Since I have long wanted to make my own game, but I didn’t have my own ideas, I decided to make a JSAB clone, but add something of my own. The engine I chose, of course, Unity, since I had been interested in it for a long time and had at least some experience of working with it, though small. I decided to make JSAB for mobile devices, as I myself wanted to play wherever I was. Initially, the color scheme of my game was not similar to the original, everything was monochrome.

It all looked like this. The controls were also different, the player was controlled by the mouse or by touching the screen and there was no way to dash.
Technical part
Let's get down to the technical part of the game, and start by creating objects.
Object creation
All objects were created via Instantiate, which, as it turned out later, has a huge impact on optimization. Just imagine this situation
public GameObject Obj;
private void Start(){
for(int i = 0; i < 100; i++){
GameObject.Instantite(Obj);
}
}
, , . .
, . , . JSON , , .
{
attacks: [
{
"attackType": "DotCircle",
"time": "1,0828",
"dotCount": "20"
},
{
"attackType": "Beam",
"time": "3,06713",
"width": "50"
}
]
}
JSON Update .
. , , -. . , . Unity
Animation anim = GetComponent<Animation>();
AnimationCurve curve;
// create a new AnimationClip
AnimationClip clip = new AnimationClip();
clip.legacy = true;
// create a curve to move the GameObject and assign to the clip
Keyframe[] keys;
keys = new Keyframe[3];
keys[0] = new Keyframe(0.0f, 0.0f);
keys[1] = new Keyframe(1.0f, 1.5f);
keys[2] = new Keyframe(2.0f, 0.0f);
curve = new AnimationCurve(keys);
clip.SetCurve("", typeof(Transform), "localPosition.x", curve);
// update the clip to a change the red color
curve = AnimationCurve.Linear(0.0f, 1.0f, 2.0f, 0.0f);
clip.SetCurve("", typeof(Material), "_Color.r", curve);
// now animate the GameObject
anim.AddClip(clip, clip.name);
anim.Play(clip.name);
X .
, , . .
, , . , , . C# . , . , , . π 180, , Unity . (AngleInDegree) .
public float AngleInDegree = 90f;
private void Start(){
float cos = Mathf.Cos(AngleInDegree * Mathf.Deg2Rad);
float sin = Mathf.Sin(AngleInDegree * Mathf.Deg2Rad);
}
" "
- . , JSON . (, , ). , . Playable ( , ..) AudioSource' () .
:
, , Chronos ( ).
I have already made full use of the timeline's capabilities, I tied the keyboard keys I needed to the attacks I needed and thus made the levels. I also want to say thank you to those who read this, I hope it was at least a little interesting! Soon there will be the second part, in which I will already talk about what I came to for almost 3 months of development and a little about the current stage of development. You can also visit my channel to follow the development process, and I also have a discord server .