Announcement

Collapse
No announcement yet.

C++ poor dev performance vs Blueprint(slow and intellisense buggy)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    C++ poor dev performance vs Blueprint(slow and intellisense buggy)

    Hey guys,
    once again, one of many topics with that idea.
    Im veteran developer in Unity, with extra big experience with C# and with Objective C/Swift.
    Now my company is trying to make our game in UE4.
    I have been playing with that for a while, but I still can't answer this question:
    Guys, how do you work with C++ here?
    It is impossible!
    One change in .h or .cpp - and 1 min of compilation time is guaranteed!
    Intellisense is usually buggy, and not showing in 50% of times.

    I am highly interested in UE4, but in Unity all comes 400x faster, ofc quality is significantly less, but anyways.

    So, just a discussion question, how to work here?
    I want to make an RPG game, we have some progress in development of that, we have budget, resources and so on.
    But when I see how long it takes to work in C++, I understand that it will stretch the budget a bit.

    So, what is the way to work here? In Unity you just simply code in C#, and all is compiled pretty quickly.
    Here, what is the way to work on middle size project from scratch?
    Is that originally design to firstly build your full game in Blueprint(they are surer fast, what has taken me full day with C++, takes a few hrs to script in BP, all is straightforward, no compile times and so on)?
    And in BP - all functions are pretty clear, while In C++, you should firstly find where the function is defined(like in UKismethSystemLibrary.h), then add that header, then compile, then start writing, probably without intellisense,so kind of blindly. It is impossible!

    What is your thoughts?
    How to work here, not design, but work? Taking into account, that BP project would be less optimized when published.

    Im working on maximized 2017 MacBook Pro, and have VR Ready Skylake PC in office. on both machines all is the same.

    Thanks, and have a nice day!

    #2
    You can solve the intellisense problem with a visual studio plugin like Visual Assist or Resharper. You can't really work with a large code base without them.
    Regarding compile times, I have exactly the sentiment, but if you have resources as you say, look into tools like Incredible (pricey) or FastBuild (free) etc. They allow you to distribute the load over multiple workstations and thus accelerate build times.
    Other than that, get a fast ssd, a fast cpu and a lot of ram.

    Remember that changes to cpp files are pretty quick to compile, whereas header file changes take quite a bit longer.

    Comment


      #3
      To add what Bolobolo said,

      - Get Visual Assist. It's pretty much a requirement for any large code base. Intellisense is terrible. I realize he called this out, but it's worth repeating.
      - Avoid Shotgun Programming (compiling a bunch to catch errors as you write code, basically throwing everything at the compiler/code to see what sticks). Write code and only compile when you're ready to test things.
      - Only add header files if you need the class functionality, otherwise just use forward declaration.
      - Use Incredibuild if you are building from scratch often - otherwise you can skip it.

      I can write tons of code quickly and efficiently, my average compile times are less than 10 seconds (unless I'm making some heavy change, then it may hit 20 seconds, if that).
      Able Ability System - A high performance, robust ability system for UE4. Now Available!

      Comment


        #4
        Originally posted by Bolobolo View Post
        You can solve the intellisense problem with a visual studio plugin like Visual Assist or Resharper. You can't really work with a large code base without them.
        Regarding compile times, I have exactly the sentiment, but if you have resources as you say, look into tools like Incredible (pricey) or FastBuild (free) etc. They allow you to distribute the load over multiple workstations and thus accelerate build times.
        Other than that, get a fast ssd, a fast cpu and a lot of ram.

        Remember that changes to cpp files are pretty quick to compile, whereas header file changes take quite a bit longer.
        Originally posted by ExtraLifeMatt View Post
        To add what Bolobolo said,

        - Get Visual Assist. It's pretty much a requirement for any large code base. Intellisense is terrible. I realize he called this out, but it's worth repeating.
        - Avoid Shotgun Programming (compiling a bunch to catch errors as you write code, basically throwing everything at the compiler/code to see what sticks). Write code and only compile when you're ready to test things.
        - Only add header files if you need the class functionality, otherwise just use forward declaration.
        - Use Incredibuild if you are building from scratch often - otherwise you can skip it.

        I can write tons of code quickly and efficiently, my average compile times are less than 10 seconds (unless I'm making some heavy change, then it may hit 20 seconds, if that).
        Ok guys, thanks a lot, I guess my top MacBook Pro isn't a good machine, to work in UE4, neither because of hardware, nor because of xCode

        Comment


          #5
          Here's a few tricks I use.

          Create C++ classes in batches
          There is a some tediousness in creating new C++ classes, whether you manually create a header and cpp file or you use the editor UI to do this. Both interrupt your work, so be sure to design ahead and create all the necessary classes at once, so you have to interrupt your work as little as possible.

          Expose test values to blueprint
          Ints, floats, booleans, magic numbers etc, expose these to blueprint so you can experiment with different values without recompiling.

          Create blueprints right away
          When I make C++ classes, I tend to make child blueprints right away: AMyActor -> BP_MyActor. The child blueprints are used in-game. Then, whenever you want to expose a variable to the editor, you already have the blueprint created and hooked up. I do this for the game framework classes too (GameMode, GameState, PlayerController, PlayerState).

          Put extra thought into function signatures
          As bolobolo said, header files take long to recompile and link, but cpp files (function bodies) don't. So put some extra time into designing function bodies, going as far as creating empty functions ahead of time, because changing and recompiling those function bodies is relatively fast.

          Create a header file with common includes
          Create a header file that includes your game's player controller, pawn and other common classes, to be done quicker with including. However, this is just for including in cpp files, as you'll want to use forward declarations as much as possible in header files.

          Edit: Also I want to emphasize that you have the right idea to experiment with blueprint. Starting out in UE4 and going to C++ right away can be daunting since you don't even know all the engine functions yet. If you set up C++ and BP classes beforehand, it will be relatively easy to translate blueprint code to C++ code, so you have the best of both worlds.
          Last edited by Zhi Kang Shao; 12-20-2017, 08:55 AM.
          Journeyman's Minimap - Available on Marketplace - Forum topic - Video

          Comment


            #6
            The Intellisense is still pretty slow (Visual Studio 2015 and 4.18), especially coming from Unity/C#, but it is at least tolerable now. Back in Visual Studio 2013 and Unreal 4.9-ish it was near useless. ;(

            Anyway, definitely as mentioned above:

            + forward declare in .h
            + only include what you need in .cpp

            And it should keep your build times down.

            Comment


              #7
              Originally posted by Jocko Jonson View Post
              The Intellisense is still pretty slow (Visual Studio 2015 and 4.18)
              Intellisense is way faster in VS 2017.

              Comment


                #8
                I agree that Unreal is a more rugged experience, although I personally enjoy the experience much more than Unity as it helps me grow as a programmer and game designer.

                Happy Holidays
                Director at Pixel by Pixel Studios
                Developing Resurgence: Earth United

                Comment

                Working...
                X