For Unity, you user either C# or UnityScript (A sort of JavaScript variant) for programming game logic, and Cg (Very similar to HLSL) for shaders. If you want to spend some money, though, you can also get node based programming tools (Sort of like Unreal Engine 4’s Blueprints) from the Unity Asset Store for both.
As for actual concepts, knowing most of the general use aspects of C# is a must (The different loops, Lists and Dictionaries etc), but you also need to learn that Unity has added some things of it’s own like coroutines, as well as the fact that Unity is a game engine and how game engine flow works (ie, don’t put a loop in the Update method that runs for a long time or the entire game will lag, etc). Reading up on component based architectures is also important, as instead of just having one class per game object, you can have multiple components. This way, you can say add a behaviour (Unity’s name for a component) that gives something the ability to pathfind, and another that gives that same object the ability to shoot at the player, etc.
Finally, have a look at Unity’s documentation on serialization. Serialization is extremely important in many aspects of Unity, including recompiling your code without restarting the editor, as well as saving/loading and networking if you want to get into such things. It’s handy to know how this works though to make sure what you’re doing is both efficient and that the engine is treating your data how you expect it to do.
solved Do I need to know C# to program with Unity? [closed]