# C# lost in learning programming as I just left "Beginner's zone"

## Recommended Posts

I guess my level could be classified as "just left Beginner's zone", so, gone through a lot of beginner's programming tutorials already, still junior and the problem is I don't know what's next.

I mean, I found a lot of tutorials for beginners everywhere, and the next things I found everywhere are beautiful and complicated source code on Github:

tutorials for beginners -- materials for "Grade 1 students" to learn

beautiful and complicated source code on Github (not the beginner type of source code) -- materials for "Phd students" to learn

However, what's in between? After I learned the Grade 1 materials I can't just directly jump to Phd level, I am trying to find the Grade 2,3,4,5,6 level materials to learn, right? Didn't find a lot of those. I am still a junior programmer.

When I finished the beginner's programming tutorials I feel like leaving the Beginner's zone, no guidance anymore.

I'm in LA, game programming is not like web programming,etc; there are some web programming bootcamps, but not game programming bootcamps, sad.

Maybe as a junior programmer it is too much for me to request the market/youtube/online learning websites to produce structured intermediate level materials for learning game programming?

It is also possible that I misjudge my own levels so I don't know where I am, therefore don't know what I should aim for next.

The demo of the game I made for practice, somehow showing my level:
https://youtu.be/RNAXWTQOQ2E
The video about programming of my game, somehow showing my level:
https://youtu.be/mi26UiFwvqY
Github:
https://github.com/nancyivy/Game_for_practice

I would be grateful if you give me advice like:
"you are still in beginner's zone", or
"you can do xxx in your game to improve yourself", or
"you may do xxx in programming to improve yourself"
or anything else.

I don't know, I'm just lost. I'm not sure whether this is the right place to post this type of questions; I hope my struggles can help someone in someway (don't know how this will help...)

##### Share on other sites

The thing is, there is no straight step-by-step way to become a master of programming. Every person has different preferences and every software is different.

Try to find a project that's fun for you. If you don't immediately know how to get it done, that's your project. You will run into problems that you will have to solve.

Here are some ideas that you might not have tried, yet: graphic rendering, web sockets, server/client protocols.

##### Share on other sites

I somehow get the feeling that no programmer ever leaves the "beginner zone".

Think of this more in categories than in one big education.

You might be proficient in simple game design and one or two programming languages as well as one or two game engines.

Now the question is, do you want to broaden your knowledge or is it time to go deeper into what you know right now.

Many beginner tutorials only show some examples of one game engine or aspect of development, they do not integrate into the big picture.

When I look at your examples, I would say you are ready to drop the training wheels and try a bigger project.

Try planning a game until you feel comfortable to make it and then post your idea here.

You know how to code and how to structure a game.

Now you need to know how to plan a project and finish it.

The finishing part is where I personally struggle a lot, just like many other game developers.

Feature creep is an evil nemesis which you have to overcome when leaving the safety of tutorials and small projects.

Set yourself a schedule as well to see what you can manage in a set amount of time.

You could do one project, then learn one new thing and implement it in your next game.

This way you learn and get experience in a more consistent rate.

After that project...rinse and repeat.

That initial "beginner stuff" and experience is what game development is all about IMO.

##### Share on other sites

As you discovered, tutorials typically teach some feature, and only that feature. Beginner tutorials are a bit wider, but still limited in scope.

The problem for a tutorial beyond the above is that literally the sky is the limit. Anything is possible, and the path to mastering programming takes 5-10 years, in widely different directions. A tutorial for that path would be mostly as large as all knowledge that exists in computer science.

In other words, the pre-cooked world ends here, your next step is to learn how to write delicious programs by yourself. The simplest way to do that is to find a small program that you want to make or extend.

Some suggestions, but feel free to pick something else:

- Your current program is very static, nothing is moving. Couldn't people move around, talk to other people, blink with their eyes, order a drink at the bar, etc?

- At this site, there is a game development challenge group (Commnuity -> Groups -> Gamedev challenge), which is running a friendly "create base defender game" competition now.

- The usually quoted starter article has a list of games you can try to make.

##### Share on other sites

I would suggest a couple of things:

1) Get feedback on your existing code, and learn about what could be improved. The forum in our Beginners section is a great place to ask for code review from more experienced developers.

You don't necessarily need to rewrite your code based on the suggestions, but you should get an idea of what to work on in future programs.

2) Seek out resources on more advanced topics such as design patterns, how to use tools like a debugger (helps you to find and fix bugs), profiler (helps find the correct places to optimize your code), and version control (let's you roll back changes, can help with collaboration).

Game Programming Patterns is really good.

If you're interested in examining some of that complicated source code, take a look at Fabian Sanglard's site - his black books and code reviews are a good look at existing code.  It's likely some of it will still be beyond you, but reading someone else's assessment may be a bit more approachable than just wading in for yourself.

3) Most importantly, get practical experience!  Try to write your own games or other software - whatever interests you. Try to pick some projects that don't seem too difficult, but are a little beyond your current abilities - you want to push yourself to improve.

The GameDev Challenges (recommend above) or any game jam (check this calendar for heaps for options) are great ways to get experience and meet other people who share your interest.

Don't try to write perfect code, just make games work, however you can. Practical experience along with feedback and learning from the tips above will teach you so that over time your technique, your code, and your finished products improve.

Try to solve problems for yourself first, but seek advice or look for tutorials if necessary.

##### Share on other sites

Oh just want to thank you all! You all give me detailed and helpful advices and I cannot thank you enough. Now I have a lot of things to check out after reading all your replies. Thank you, thank you so much.

You're welcome

##### Share on other sites

Hello April i already replied to you on Quora , and you can track back to that reply, but you are still in the beginner zone IMHO and so are most of us.

What you should do at this time to fix the knowledge you have is do as many projects as you can , introducing variation from one to the next to exercise the skills you acquired , there are also a lot of intermediate and advanced tutorials on youtube, some are complete projects while some are single issue based (where the issue is more complex , as for example one i followed about implementing FACEBOOK SDK).

Anyway as i said in the previous reply you can follow Brackeys RPG tutorial , another example of beginner/intermediate tutorial would be this TD series https://www.youtube.com/watch?v=PgDpRMMyxw8, also brackeys has a td series to but it is somewhat lower level, if not search for tutorials on the kind of game you plan to do next , the only way to leave the beginner zone is to have a lot of projects done.

I only recently published my first game but before i got here i made 100s of tutorials and about 40+ projects based on tutorials , including 2048 clone , stacks clone , cookie clicker clone etc. I suggest you do the same, every project you do will most likely teach a new concept and help you fix a lot of previous knowledge.

##### Share on other sites
17 hours ago, CrazyApplesStudio said:

Hello April i already replied to you on Quora , and you can track back to that reply, but you are still in the beginner zone IMHO and so are most of us.

What you should do at this time to fix the knowledge you have is do as many projects as you can , introducing variation from one to the next to exercise the skills you acquired , there are also a lot of intermediate and advanced tutorials on youtube, some are complete projects while some are single issue based (where the issue is more complex , as for example one i followed about implementing FACEBOOK SDK).

Anyway as i said in the previous reply you can follow Brackeys RPG tutorial , another example of beginner/intermediate tutorial would be this TD series https://www.youtube.com/watch?v=PgDpRMMyxw8, also brackeys has a td series to but it is somewhat lower level, if not search for tutorials on the kind of game you plan to do next , the only way to leave the beginner zone is to have a lot of projects done.

I only recently published my first game but before i got here i made 100s of tutorials and about 40+ projects based on tutorials , including 2048 clone , stacks clone , cookie clicker clone etc. I suggest you do the same, every project you do will most likely teach a new concept and help you fix a lot of previous knowledge.

Really? Thank you for knowing the Quora question is asked by me and thank you for telling me all these details. Hopefully one day I can report back here to everyone that I improved myself.

##### Share on other sites
14 minutes ago, April_X said:

Really? Thank you for knowing the Quora question is asked by me and thank you for telling me all these details. Hopefully one day I can report back here to everyone that I improved myself.

I forgot also unity has a lot of intermediate tutorial series , some quite complex in my opinion(like the adventure tutorial that i cannot yet fully follow here: https://unity3d.com/learn/tutorials/projects/adventure-game-tutorial).

You can find all of the topics here:

I suggest you do all of them as the concepts you might learn from each might come in hand in future projects.

## Create an account

Register a new account

• 17
• 10
• 19
• 14
• 19
• ### Similar Content

• I've got a bug with my brick breaker style game. The bricks move down one line at a time ever 1.5 seconds. What appears to be happening is occasionally the ball will be just about to hit the brick when the brick moves down a line, and now the ball is behind it. I'm not sure how to fix this. I have two ideas but I'm not sure of implementation. 1 solution would be to check where they were and where they are going to be before rendering the frame. Then if they crossed paths, then register the brick as hit. Solution 2 would be change how the bricks move. I could maybe slide them down line by line, instead of a jump down. I'm not sure of this will fix the issue or not. Any ideas?

• Once again Unity is frustrating me to the point of insanity.
What I am looking for is a way to find a ray intersect with the edges of the mesh, using Unity's already made collision system. I want to point out that I know how to do a line intersect, what I want to know is if Unity supports this already.

The image above shows how I sweep a ray,intersecting the mesh. The top green image shows what I want and the red shows what Unity is giving me.
I want to know if there is some way, to find the edges in Unity without creating a custom line intersection tool.
Most engines I know don't use rays for this but instead use a plane like this:

I checked the Unity "Plane intersection" but it is just a ray cast. It will still need me to find the vertices on the collision mesh to cast the ray from; if I am doing that then making my own line intersection tool is better.

I looked online and can find anything on this. Also I don't want to cut the mesh, so I don't need a way to know what side is what.
Does Unity even have collisions that support edge only detection?
• By JuliaAxt
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody2D))]
public class TapController : MonoBehaviour {
public float tapForence = 10;
public float tiltSmooth = 5;
public Vector3 startPos;
Rigidbody2D Rigidbody;
Quaternion downRotation;
Quaternion forwardRotation;
private void Start() {
Rigidbody = GetComponent<Rigidbody2D>();
downRotation = Quaternion.Euler(0, 0, -90);
forwardRotation = Quaternion.Euler(0, 0, 35);

}
private void Update() {
if (Input.GetMouseButtonDown(0))
{
transform.rotation = forwardRotation;
Rigidbody.AddForce(Vector2.up * tapForce, ForceMode2D.Force);   (The name tapForcedoes not exist in current context)
}
transform.rotation = Quaternion.Lerp(transform.rotation, downRotation, tiltSmooth * Time.deltaTime);
}
}
void OnTriggerEnter2D(Collider2D col){
if (col.gameObject.tag == "scoreZone")
{
// register a score event
// play a sound
}
{
Rigidbody.simulated = false;   (Rigidbody does not contain a definition for `simulated´)
//play a sound
}
}

}

• Hi, I want to pass message back and forth on client and server which are on different scenes, how can I do that in Unity?**
Following is my Scenario:-
I have 5 scenes-
1. BaseScene (2) OfflineScene (3) OnlineScene (4) ClientOnline (5)
ServerOnline.
All these scenes have button having text of the names of the scenes.
On Base Scene, I have add empty game object on which i have placed "customNetworkScript" which extends from "NetworkManager" script and also placed "Network Manager HUD" on it. Following is the code which i have placed in "customNetworkScript":-

public class customNetworkScript : NetworkManager {                              public override void OnClientSceneChanged(NetworkConnection conn)                 {                     SceneManager.LoadScene("ClientOnline", LoadSceneMode.Single);                     ClientScene.Ready(conn);                     ClientScene.AddPlayer(conn, 0);                 }                              public override void OnServerSceneChanged(string sceneName)                 {                     SceneManager.LoadScene("ServerOnline", LoadSceneMode.Single);                 }         } I have placed "OfflineScene" and "OnlineScene" in the fields, named "Offline Scene" and "Online Scene" in "Network Manager" component. Also have placed an empty prefab in "Spawn Info" in "customNetworkScript" and it has component "Network Identity" on it. Now when i run project, on one instance, I click on "LAN Server only" and on another instance, I click on "LAN Client". And I get my respective scenes on both the instances -> "ServerOnline" appear on instance where I click "LAN Server only" and "ClientOnline" appear on other instance.
What I want is, when i click on "ServerOnline" button, a message string will pass on to "ClientOnline" scene and same happens in backward direction when i click on "ClientOnline" button.
I have tried "Rpc" and "Command" but they only work when I click on "LAN Host" instead of "LAN Server Only".
I have tried very hard but couldn't find anything useful. It will be a great pleasure if someone explain to me in detail along with the code, how can I achieve this.
ThankYou Very Much for Your Time.

• If you are a software developer working in the video game industry and wondering what else you could do to improve the quality of your product or make the development process easier and you don't use static analysis – it's just the right time to start doing so. You doubt that? OK, I'll try to convince you. And if you are just looking to see what coding mistakes are common with video-game and game-engine developers, then you're, again, at the right place: I have picked the most interesting ones for you.

Why you should use static analysis
Although video-game development includes a lot of steps, coding remains one of the basic ones. Even if you don't write thousands of code lines, you have to use various tools whose quality determines how comfortable the process is and what the ultimate result will be. If you are a developer of such tools (such as game engines), this shouldn't sound new to you.
Why is static analysis useful in software development in general? The main reasons are as follows:
Bugs grow costlier and more difficult to fix over time. One of the principal advantages of static analysis is detecting bugs at early development stages (you can find an error when code writing). Therefore, by using static analysis, you could make the development process easier both for your coworkers and yourself, detecting and fixing lots of bugs before they become a headache. Static analysis tools can recognize a great variety of bug patterns (copy-paste, typos, incorrect use of functions, etc.). Static analysis is generally good at detecting those defects that defy dynamic analysis. However, the opposite is also true. Negative side effects of static analysis (such as false positives) are usually 'smoothed out' through means provided by the developers of powerful analyzers. These means include various mechanisms of warning suppression (individually, by pattern, and so on), switching off irrelevant diagnostics, and excluding files and folders from analysis. By properly tweaking the analyzer settings, you can reduce the amount of 'noise' greatly. As my colleague Andrey Karpov has shown in the article about the check of EFL Core Libraries, tweaking the settings helps cut down the number of false positives to 10-15% at most. But it's all theory, and you are probably interested in real-life examples. Well then, I've got some.

Static analysis in Unreal Engine
If you have read this far, I assume you don't need me telling you about Unreal Engine or the Epic Games company – and if you don't hold these guys in high regard, I wonder whom you do.
The PVS-Studio team has cooperated with Epic Games a few times to help them adopt static analysis in their project (Unreal Engine) and fix bugs and false positives issued by the analyzer. I'm sure both parties found this experience interesting and rewarding.
One of the effects of this cooperation was adding a special flag into Unreal Engine allowing the developers to conveniently integrate static analysis into the build system of Unreal Engine projects.
The idea is simple: the guys do care about the quality of their code and adopt various techniques available to maintain it, static analysis being one of them.

John Carmack on static analysis
John Carmack, one of the most renowned video-game developers, once called the adoption of static analysis one of his most important accomplishments as a programmer: "The most important thing I have done as a programmer in recent years is to aggressively pursue static code analysis." The next time you hear someone say that static analysis is a tool for newbies, show them this quote. Carmack described his experience in this article, which I strongly recommend checking out – both for motivation and general knowledge.

Bugs found in video games and game engines with static analysis
One of the best ways to prove that static analysis is a useful method is probably through examples showing it in action. That's what the PVS-Studio team does while checking open-source projects.
It's a practice that everyone benefits from:
The project authors get a bug report and a chance to fix the defects. Ideally, it should be done in quite a different way, though: they should run the analyzer and check the warnings on their own rather than fix them relying on someone else's log or article. It matters, if only because the authors of articles might miss some important details or inadvertently focus on bugs that aren't much critical to the project. The analyzer developers can use the analysis results as the basis for improving the tool, as well as demonstrating its bug-detecting capabilities. The readers learn about bug patterns, gain experience, and get started with static analysis. So, isn't that proof of the effectiveness of this approach?

While some are pondering introducing static analysis into their development process, others have long been using and benefiting from it! These are, among others, Rocksteady, Epic Games, ZeniMax Media, Oculus, Codemasters, Wargaming (source).

Top 10 software bugs in video-game industry
I should point right off that this is not some ultimate top list, but simply bugs which were found by PVS-Studio in video games and game engines and which I found most interesting.
As usual, I recommend trying to find the bug in each example on your own first and only then go on reading the warning and my comments. You'll enjoy the article more that way.
Tenth place
Source: Anomalies in X-Ray Engine
The tenth place is given to the bug in X-Ray Engine employed by the S.T.A.L.K.E.R game series. If you played them, you surely remember many of funny (and not quite funny) bugs they had. This is especially true for S.T.A.L.K.E.R.: Clear Sky, which was impossible to play without patches (I still remember the bug that 'killed' all my saves). The analysis revealed there were many bugs indeed. Here's one of them.
BOOL CActor::net_Spawn(CSE_Abstract* DC) { .... m_States.empty(); .... } PVS-Studio warning: V530 The return value of function 'empty' is required to be utilized.
The problem is quite simple: the programmer is not using the logical value returned by the empty method describing whether the container is empty or not. Since the expression contains nothing but a method call, I assume the programmer intended to clear the container but called the empty method instead of clear by mistake.
You may argue that this bug is too plain for a Top-10 list, but that's the nice thing about it! Even though it looks straightforward to someone not involved in writing this code, 'plain' bugs like that still appear (and get caught) in various projects.
Ninth place
Source: Long-Awaited Check of CryEngine V
Going on with bugs in game engines. This time it's a code fragment from CryEngine V. The number of bugs I have encountered in games based on this engine was not as large as in games based on X-Ray Engine, but it turns out it has plenty of suspicious fragments too.
void CCryDXGLDeviceContext:: OMGetBlendState(...., FLOAT BlendFactor[4], ....) { CCryDXGLBlendState::ToInterface(ppBlendState, m_spBlendState); if ((*ppBlendState) != NULL) (*ppBlendState)->AddRef(); BlendFactor[0] = m_auBlendFactor[0]; BlendFactor[1] = m_auBlendFactor[1]; BlendFactor[2] = m_auBlendFactor[2]; BlendFactor[2] = m_auBlendFactor[3]; *pSampleMask = m_uSampleMask; } PVS-Studio warning: V519 The 'BlendFactor[2]' variable is assigned values twice successively. Perhaps this is a mistake.
As we mentioned many times in our articles, no one is safe from mistyping. Practice has also shown more than once that static analysis is very good at detecting copy-paste-related mistakes and typos. In the code above, the values of the m_auBlendFactor array are copied to the BlendFactor array, but the programmer made a mistake by writing BlendFactor[2] twice. As a result, the value at m_auBlendFactor[3] is written to BlendFactor[2], while the value at BlendFactor[3] remains unchanged.
Eighth place
Source:  Unicorn in Space: Analyzing the Source Code of 'Space Engineers'
Let's change course a bit and take a look at some C# code. What we've got here is an example from the Space Engineers project, a 'sandbox' game about building and maintaining various structures in space. I haven't played it myself, but one guy said in the comments, "I'm not much surprised at the results ". Well, we did manage to find some bugs worth mentioning, and here's two of them.
public void Init(string cueName) { .... if (m_arcade.Hash == MyStringHash.NullOrEmpty && m_realistic.Hash == MyStringHash.NullOrEmpty) MySandboxGame.Log.WriteLine(string.Format( "Could not find any sound for '{0}'", cueName)); else { if (m_arcade.IsNull) string.Format( "Could not find arcade sound for '{0}'", cueName); if (m_realistic.IsNull) string.Format( "Could not find realistic sound for '{0}'", cueName); } } PVS-Studio warnings:
V3010  The return value of function 'Format' is required to be utilized.  V3010  The return value of function 'Format' is required to be utilized. As you can see, it's a common problem, both in C++-code and C#-code, where programmers ignore methods' return values. The String.Format method forms the resulting string based on the format string and objects to substitute and then returns it. In the code above, the else-branch contains two string.Format calls, but their return values are never used. It looks like the programmer intended to log these messages in the same way as they did in the then-branch of the if statement using the MySandboxGame.Log.WriteLine method.
Seventh place
Source: Analyzing the Quake III Arena GPL project
Did I tell you already that static analysis is good at detecting typos? Well, here's one more example.
void Terrain_AddMovePoint(....) { .... x = ( v[ 0 ] - p->origin[ 0 ] ) / p->scale_x; y = ( v[ 1 ] - p->origin[ 1 ] ) / p->scale_x; .... } PVS-Studio warning: V537 Consider reviewing the correctness of 'scale_x' item's usage.
The variables x and y are assigned values, yet both expressions contain the p->scale_x subexpression, which doesn't look right. It seems the second subexpression should be p->scale_y instead.
Sixth place
Source: Checking the Unity C# Source Code
Unity Technologies recently made the code of their proprietary game engine, Unity, available to the public, so we couldn't ignore the event. The check revealed a lot of interesting code fragments; here's one of them:
public override bool IsValid() { .... return base.IsValid() && (pageSize >= 1 || pageSize <= 1000) && totalFilters <= 10; } PVS-Studio warning: V3063 A part of conditional expression is always true if it is evaluated: pageSize <= 1000.
What we have here is an incorrect check of the range of pageSize. The programmer must have intended to check that the pageSize value was within the range [1; 1000] but made a sad mistake by typing the '||' operator instead of '&&'. The subexpression actually checks nothing.
Fifth place
Source: Discussing Errors in Unity3D's Open-Source Components
This place was given to a nice bug found in Unity3D's components. The article mentioned above was written a year prior to revealing Unity's source code, but there already were interesting defects to find there at the time.
public static CrawledMemorySnapshot Unpack(....) { .... var result = new CrawledMemorySnapshot { .... staticFields = packedSnapshot.typeDescriptions .Where(t => t.staticFieldBytes != null & t.staticFieldBytes.Length > 0) .Select(t => UnpackStaticFields(t)) .ToArray() .... }; .... } PVS-Studio warning: V3080 Possible null dereference. Consider inspecting 't.staticFieldBytes'.
Note the lambda expression passed as an argument to the Where method. The code suggests that the typeDescriptions collection could contain elements whose staticFieldBytes member could be null – hence the check staticFieldBytes != null before accessing the Length property. However, the programmer mixed up the '&' and '&&' operators. It means that no matter the result of the left expression (true/false), the right one will also be evaluated, causing a NullReferenceException to be thrown when accessing the Length property if staticFieldBytes == null. Using the '&&' operator could help avoid this because the right expression won't be evaluated if staticFieldBytes == null.
Although Unity was the only engine to hit this top list twice, it doesn't prevent enthusiasts from building wonderful games on it. Including one(s) about fighting bugs.
Fourth place
Source:  Analysis of Godot Engine's Source Code
Sometimes we come across interesting cases that have to do with missing keywords. For example, an exception object is created but never used because the programmer forgot to add the throw keyword. Such errors are found both in C# projects and C++ projects. There was one missing keyword in Godot Engine as well.
Variant Variant::get(const Variant& p_index, bool *r_valid) const { .... if (ie.type == InputEvent::ACTION) { if (str =="action") { valid=true; return ie.action.action; } else if (str == "pressed") { valid=true; ie.action.pressed; } } .... } PVS-Studio warning: V607 Ownerless expression 'ie.action.pressed'.
In the given code fragment it is obvious that a programmer wanted to return a certain value of the Variant type, depending on the values ie.type and str. Yet only one of the return statements – return ie.action.action; – is written properly, while the other is lacking the return operator, which prevents the needed value from returning and forces the method to keep executing.
Third place
Source: PVS-Studio: analyzing Doom 3 code
Now we've reached the Top-3 section. The third place is awarded to a small code fragment of Doom 3's source code. As I already said, the fact that a bug may look straightforward to an outside observer and make you wonder how one could have made such a mistake at all shouldn't be confusing: there are actually all sorts of bugs to be found in the field...
void Sys_GetCurrentMemoryStatus( sysMemoryStats_t &stats ) { .... memset( &statex, sizeof( statex ), 0 ); .... } PVS-Studio warning: V575 The 'memset' function processes '0' elements. Inspect the third argument.
To figure this error out, we should recall the signature of the memset function:
void* memset(void* dest, int ch, size_t count); If you compare it with the call above, you'll notice that the last two arguments are swapped; as a result, some memory block that was meant to be cleared will stay unchanged.
Second place
The second place is taken by a bug found in the code of the Xenko game engine written in C#.
Source: Catching Errors in the Xenko Game Engine
private static ImageDescription CreateDescription(TextureDimension dimension, int width, int height, int depth, ....) { .... } public static Image New3D(int width, int height, int depth, ....) { return new Image(CreateDescription(TextureDimension.Texture3D, width, width, depth, mipMapCount, format, 1), dataPointer, 0, null, false); } PVS-Studio warning: V3065 Parameter 'height' is not utilized inside method's body.
The programmer made a mistake when passing the arguments to the CreateDescription method. If you look at its signature, you'll see that the second, third, and fourth parameters are named width, height, and depth, respectively. But the call passes the arguments width, width, and depth. Looks strange, doesn't it? The analyzer, too, found it strange enough to point it out.
First place
Source: A Long-Awaited Check of Unreal Engine 4
This Top-10 list is led by a bug from Unreal Engine. Just like it was with the leader of "Top 10 Bugs in the C++ Projects of 2017", I knew this bug should be given the first place the very moment I saw it.
bool VertInfluencedByActiveBone( FParticleEmitterInstance* Owner, USkeletalMeshComponent* InSkelMeshComponent, int32 InVertexIndex, int32* OutBoneIndex = NULL); void UParticleModuleLocationSkelVertSurface::Spawn(....) { .... int32 BoneIndex1, BoneIndex2, BoneIndex3; BoneIndex1 = BoneIndex2 = BoneIndex3 = INDEX_NONE; if(!VertInfluencedByActiveBone( Owner, SourceComponent, VertIndex[0], &BoneIndex1) && !VertInfluencedByActiveBone( Owner, SourceComponent, VertIndex[1], &BoneIndex2) && !VertInfluencedByActiveBone( Owner, SourceComponent, VertIndex[2]) &BoneIndex3) { .... } PVS-Studio warning: V564 The '&' operator is applied to bool type value. You've probably forgotten to include parentheses or intended to use the '&&' operator.
I wouldn't be surprised if you read the warning, looked at the code, and wondered, "Well, where's the '&' used instead of '&&'?" But if we simplify the conditional expression of the if statement, keeping in mind that the last parameter of the VertInfluencedByActiveBone function has a default value, this will clear it all up:
if (!foo(....) && !foo(....) && !foo(....) & arg) Take a close look at the last subexpression:
!VertInfluencedByActiveBone(Owner, SourceComponent, VertIndex[2]) &BoneIndex3 This parameter with the default value has messed things up: but for this value, the code would have never compiled at all. But since it's there, the code compiles successfully and the bug blends in as successfully. It's this suspicious fragment that the analyzer spotted – the infix operation '&' with the left operand of type bool and the right operand of type int32.

Conclusion
I hope I have convinced you that static analysis is a very useful tool when developing video games and game engines, and one more option to help you improve the quality of your code (and thus of the final product). If you are a video game industry developer, you ought to tell your coworkers about static analysis and refer them to this article. Wondering where to start? Start with PVS-Studio.