This criticism is protected by the Laws of Fair Use under the criticism category.
Any removal will be refuted legally in all the meanings of the word.
Hello there, if you came here with the intention of me shitting on YandereDev, you are on the wrong text. TThat is not my taste. I am here to criticise the game, while keeping personal insults at a minimum.
We can divide my criticisms into multiple categories, and offering help and solutions:
The Code and The Other Problems with the Game (Optimization), The Misuse of Patreon (People's funding), The Inappropriate Development Cycle (Building on top of a buggy base, slowing his progress down even more), The Youtube Development Videos, and, some other closing insults.
If you are wondering why you should listen to me, a random guy on the internet, it's because I have experience working with the Unity engine and I have used custom tools to reverse engineer the project, which means I can look at every single line of code and every single gameobject, audio clip, mesh etc.
This reverse engineering is legal since Yandere Simulator does not come with a "Terms of Service" or a "License", and I will be helping him to solve that as well.
I will do my best to be respectful in this text, so I respect all of you to be professional as well.
The Code and The Other Problems with the Game:
By using an assembly decompiler, we can easily take a look at the code where everything is conserved and nothing is obfuscated, including the structure. This is due to the use of C# by Unity. A way to avoid it, obfuscate the code, and also to speed up the game would be to use il2cpp, which converts the code into C++ which is a way lower level language due to less overhead and libraries. This basically translates to better performance.
The first script I saw, the about script, ran a while loop in the update function. The update function, in a gist, is a function which runs every frame. If you have a while loop that is not a coroutine, or a nested if else, the entire game freezes until it finishes. All the main game code in Unity is single-threaded, which means that your while loop is preventing everything from executing until it's done - not just Update, but also rendering, etc. Such update scripts are visible everywhere, from the character and events scripts
Your two best options are: You can either make your while loop a coroutine - where it "yields" once in your while loop, and lets the rest of the engine run for a frame before picking up where it left off - or you can put your loop in another thread, which will be able to run in parallel. Depending on your level of code expertise outside Unity, threading can be complicated to work out, while coroutines are kinda Unity-specific and are simpler to understand, and probably make more sense too. Also, the developer said the scripts where he does update something every frame are highly optimized (citation: https://yanderesimulator.com/debunk/, YandereDev is a bad programmer!).
"Many of the people who have claimed that I'm bad at programming have proven that they don't actually know what they are talking about. One guy said, "His Update function is 8,000 lines long! That means 8,000 lines of code are running on every frame!" In reality, only a fraction of the Update function is actually running at any given time. A character can only be in one state at a time (studying, dying, reacting to murder) and the rest of the Update function isn't running unless the character is actually in that state."
If the update line does have multiple if elses, the game HAS to check all those conditions (until one is met) before advancing to the next frame. In this condition, the developer is either lying on purpose, or has no clue what he is talking about.
The developer is using A-Star path finding, which is one of the most efficient solutions for path finding.
Yet, he claims that path finding is taking 8.11 ms. (citation: https://yanderedev.wordpress.com/2018/08/20/august-20th-bug-fixing-build-and-performance-update/)
Proof of how many navmeshes Unity actually can handle: https://www.youtube.com/watch?v=G9Otw12OUvE
Rendering – 28.05 ms,Physics – 24.94 ms,Animation – 16.16 ms
These are abnormal numbers. These occur because the game renders EVERYTHING on the basis of where you are looking. Unity has in built occulsion culling, which means the camera only renders whats in its view. However, when you look at the school building, every single classroom inside is rendered which is a waste of resources and a FPS killer.
User Interface – 3.72
This is because the UI is being updated EVERY FRAME. WHICH IS UNNECESSARY. IT IS LIKE RELOADING AN ANIMATION EVERYTIME. The better way would be to only update the GUI when the values shown on GUI are changed.
The developer, instead of using IEnumerators, declares every single animation as a constant in a script, which is very taxing on your computer.
Every single student is instanced, which means spawning them or despawning them will kill your performance. The correct way would be to switch over to the Entity Component System. ECS is an architectural pattern that is mostly used in game development. ECS follows the composition over inheritance principle that allows greater flexibility in defining entities where every object in a game's scene is an entity.
The developer calls Camera.main multiple times (transform,render distance, hdr, and many many more things), calls for lists in runtime, asks for an objects transform which is the worst way to do it, checks GetComponent is updates, uses FindGameObject in update and overall, just really poor choices.
You should never make all UI Elements in 1 Canvas and instead make many Canvases and section them accordingly , Static UIs , Dynamic UIs , Normal UIs , this is because UI geometry regenerates every time a UI element faces changes. when it does regenerate it does it for all UI elements in that canvas even if other UI elements have no changes. Do heavy getcomponent functions in "Awake" only.
Dont call for a material in runtime . It creates a whole new material for that mesh you referred it from. For example if you want to change a car's color , Make several folders and name them based on the color. Create a material in each folder make sure GPU instancing is on. Name each material "body". If you want to now change the body's color. search if the model has any "sharedmaterial"(not material :3 ) that has the name "body" in it . if yes switch it with the color you want to assign. this will lower down your set pass calls drastically giving you alot of boost in fps. This mainly refers to the character script used by the dev. The objects also need to be pooled.
The Misuse of Patreon:
From the transparency posts, you can see the amount of funding (10,000$+) being used to fund development of models, which he says he will update (citation: https://www.youtube.com/watch?v=L8SnsGlM52I). The modeler only makes hairstyles, stocking and other things, and makes the future rival models too, which doesn't make sense considering these aren't even the final models of the game. The other misappropriation of funds can be found just by a little research, but it includes dumb things being funded and his "salary" of 3500$ per month.
The Inappropriate Development Cycle:
The Game was developed in terms of content first. The most important thing is that MECHANICS TRUMP CONTENT. IF YOU BUILD YOUR GAME ON THE BASIS OF CONTENT, THE FOUNDATION IS BROKEN.
You won't be able to change the mechanics, fearing it will break the content. Yet, instead of fixing the foundation, YandereDev keeps building on top of a broken foundation which only makes his progress slower and slower.
I can go on a rant on these all days but I will link you to two series which cover these:
The Youtube Saga:
YandereDev spends multiple days working on his Youtube videos. He doesn't have an editor, and spends weeks sometimes working on videos such as this famous monstrosity: https://www.youtube.com/watch?v=dxa6FM9E1jI. He uses the terms as depression lightly. I am diagnosed with MDD and mild OCD and find it very infuriating on how the video is completely focused on shifting the blame. It's manipulative, it's cunty, and THIS IS NOT WHAT YOUR PATREON IS FOR. Work on the fucking game, you are not a Youtuber. If you want to be a Youtuber, do that, hand the game to someone else. Jesus fucking christ.
I suppose best way to elucidate this would be to compare his first video to his last video, you will see how he increased the quality unnecessarily, and in doing so, made the progress slow down to a crawl.
Please stop posting about bug fixes on your development blog. Please stop uploading videos about the non-existent game's lore. And, most of all, you can call people humans instead of gremlins. You can also call them mentally dysfunctional. What you absolutely cannot do is portray yourself as a pure angel. And please, don't use artists who plagiarize other's stuff. It is unprofessional.