At us it is translated and prepares for output wrote.
And not so long ago interesting article about development of mobile games using Unity has caught sight to us (of August 12, 2015); the truth, key advantage of article is that in it this tool is compared to the main competitor: Unreal Engine.
We suggest you to get acquainted with this remarkable research in Friday evening. In comments we will be glad to see recommendations about the edition of books of UE, and also we hope for fruitful discussion.
Article is translated with small reductions
We (OnlineFussballManager GmbH company) start development of the new project for mobile devices now. We are going to create fascinating and unique combination of step-by-step strategy and " game the football manager".
Players will be able to plan and create own club platforms and sports complexes, to train team and to work on its tactics. Team players will not simply units in the numbered t-shirts, and realistic persons with the lines and even look. Everything will occur in isometric representation of different rooms and platforms of club where the animated buildings will be located in specially certain grid.
So, the moment of truth has come when we have undertaken development of visual representation.
Considering the requirements put before us and that fact, what we have to develop this game both for iOS, and for Android — how to implement this project technically?
One of the first questions which should be solved — whether to create own engine or to use the already available. Certainly, the first option is optimum if you wish to control completely everything that occurs in your source code, the tulcheena, and also quite to represent what your income from this game will be. The lack of such approach is that similar development will demand considerable efforts — because of what terms of all project will increase, and it will significantly rise in price. We have quickly refused this idea as wanted to keep the cost and terms of the project within the reasonable.
Further it was necessary to be defined, what engine we will use. Options there was set: from Stencyl, GameMaker to Cocos2d and Marmalade and, at last, Unreal and Unity.
Of course, it is possible to give the mass of arguments about what engine is better and for what purposes. How many people — are so much opinions. Have to admit, for some moment and we have felt such subjectivity. The team has actively supported Unreal Engine. However, how many we looked narrowly at UE, nobody could characterize it objectively, without appeal to personal opinion.
So, we have decided not to distract from the facts and have begun to investigate other, better known tools.
GameMaker has soon been rejected as it is more oriented to the beginners only starting development of games. Thus, it is quite easy to study it, but possibilities of GameMaker obviously did not hold out before that we wanted to make.
Further the turn of Cocos2D which at first sight seemed promising has come. As it is clear from the name, Cocos2D is optimized under development of two-dimensional games. Therefore there was question: whether we want to create our isometric grid of buildings in true 2D or in actual 3D with the fixed overview point. After some additional researches we have selected implementation from the 3D. In that case Cocos2D us, obviously, did not arrange.
We have addressed to Marmalade. After all by means of Marmalade such known games as" have been created by Plants vs. Zombies "and" Godus ". But, though we have also found many advantages at this engine, there were problems which have forced us to address to other options. One of the most essential shortcomings was that the community of specialists in Marmalade is quite small.
So, from large alternatives there were only Unreal and Unity. But even by this moment we could not select surely one of two without assistance.
Fortunately, the game GDC conference in San Francisco therefore we have used chance to fly there and to consult to colleagues came nearer.
Have met children from Epic there, have closely got acquainted with Unreal Engine, have tried Paper 2D, their tool for viewing of preview of mobile applications and have asked, than to us to use: their engine or Unity?
Children have done an ill turn to us, having told the approximately following: "Unreal cool, but also is quite good Unity. Try both that, and another".
Then we have gone to the Unity developers and have looked narrowly at Unity 5 — as it increases productivity in iOS. Eventually, have asked them the same question and have received the similar answer.
At this stage we were solved on thorough technical research. Have designed the prototype sufficiently reminding our project to check on different mobile devices as build process will go and what will be productivity. Thus we also wanted to find out, what reefs and problems can trap us when developing on the first and on the second engine.
As all our programmers have been occupied on the current projects, we have charged work on prototype to specialists from the Bit Baron company.
The research of engines executed in the Bit Baron company
Company" Online Fußball Manager "(OFM) was going to create mobile game. We were asked about the help more surely to be defined, what engine best of all is suitable for their project. Until then we were engaged only in development of browser games, but have decided that we will cope with task. It was offered to compare two options: Unity and Unreal. Now it is two "locomotives" in the world of programming of games. There are many reports which are in detail illustrating the smallest distinctions between them. But feature of our work was that we have written two almost identical test applications for comparison and have characterized their indicators according to system of checkpoints (benchmark testing).
Having written two similar applications, we could test both on equal game field, report OFM, what version works better and to emphasize additional problems.
We wanted to create such reference test which would provide to OFM information which is directly connected with type of the game created by them. Customers have specified that in prototype there have to be some animated buildings and trees. Therefore we have created the 3D - scene where the user was offered to place independently these objects on the card. The sizes of grid made 11x16, it contained to 176 buildings. Each square of grid supported to 6 trees, thus, in scene there could be over 1000 trees. We have added the simple user interface where it was possible to add the specified quantity of trees and buildings to scene. Also have added function of adding of buildings in specific places — it was for this purpose necessary to click on the card in desirable point. As for the organization of the program, we have constructed grid on the plane, and viewing of scene have made via the camera located "over the head" the user. We have also added special functionality of the camera that the user could scale and pan scene. As this prototype was created to decide on the engine for development, we have done everything possible that in both options the scene looked almost equally. Otherwise it would be impossible to compare visual quality of the first and second option. For this purpose it was necessary to tinker as some things are processed in Unreal and in Unity differently. As a result at us two very similar scenes have turned out.
To unify testing of productivity, we wanted to apply identical models of trees and buildings in both systems. For trees the mobile SpeedTree model including just about 1000 polygons was used and allowed to evaluate well, how small increments in the displayed triangles affect frame frequency. As for the animated buildings, we did not manage to find for them such model which would work with both engines therefore we have applied two different models. Both have been expected a little more than 16 000 polygons everyone, they had almost identical settings of materials. We have completely disconnected the detail levels (LOD) that in both options at any distance from the camera the identical quantity of triangles was displayed. The test was projected not only with the purpose to reflect distinctions of productivity between two engines but also to show difference as rendering. Besides, it was necessary to watch closely standard shaders of Unreal Engine. Having noticed that Unreal looks clearly best of all, we have found out that in the camera number of shaders, costly from the point of view of productivity works. After their shutdown the scene visually has almost not changed. Lighting represented absolutely other problem therefore we needed some time to lick it into shape.
Customers were interested not only tests of rendering, but also what impressions of development on the first and second engine will be. Eventually that I pound from productivity if you do not manage to write game to established periods. To outline these impressions, we have compared also such factors as assembly duration, the available documentation, complexity of expansion in the mobile environment, and also complexity of iterations of code. We believed what exactly on these indicators of Unity will be stronger (as leader in the development areas of mobile games).
"alt = "image"/>
Prototype in Unity. On the card 200 trees are put
- Basic elements of Unity are objects (" GameObject ") and components (" MonoBehaviour "). Having mastered this concept, you can already work with Unity. If it is correct to use this system, it allows to improve the organization of the project considerably.
- In Unity it is included many components providing you to all necessary for game creation – except game logic as that. As it has been stated above, the component can be such small, as Plane (in Unreal is absent), which we used for creation of grid. The newest additions of the engine — the components of" UI "and" Layout "providing creation of powerful and scalable graphic user interfaces.
- The editor it is possible to expand with own scenarios, besides, in Asset Store the mass of resources for all occasions is available. The Asset Store storage also contains set of useful scenarios, models of materials and so forth. They will be especially by the way when prototyping — can simply load all necessary in the form of temporary resources and use it as improvised simulation models.
- Unity was one of the first public engines supporting mobile development. Therefore it is very convenient at expansion in the mobile environment, looks and works there practically as well as in the editor. The system is constantly improved, and expansion proceeds very smoothly. It was the essential factor thanks to which we have decided to do mobile prototype.
- Perhaps, Unity can brag of the widest community of specialists among all game engines therefore if you will have question — most likely, the answer to it will be. Let Unity also support set of languages for writing of scenarios, documentation on each of them very thorough. Moreover, even if you will find the answer concerning other language, the logician of this answer to you will be nevertheless clear, and you will be able to adapt it for solution of the problem.
- In Unity huge work on optimization of rendering for set of the same objects is done. To achieve comparable productivity in Unreal, Instanced Rendering should involve, and this mechanism is usually less flexible, than rendering in Unity.
- The source code of the engine is closed. If you to discuss the price of the source code with Unity, it is necessary to reconcile to it. Therefore problems if this or that opportunity on which you rely refuses are possible — it is necessary to wait for updating.
- The new UI system is quite good. In it there is no special editor, all changes are made directly in scene — and scene very big. When you open scene and want to edit UI, you at first should increase the scale of the area interesting you fairly.
It is the picture from the Unity editor. We were very lucky that we could add it with our own scenarios
- Two problems are the C new UI system in Unity. When clicking by finger you will not be able to determine by the touch screen, whether the specific graphic element has been clicked. Let's say the user wants to pan the screen by means of slider. But if we inherited the class GraphicsRaycaster, it is possible to open any desirable data which can be made the public. If to replace GraphicsRaycaster in object of canvas, it is possible to check, whether the UI element has been clicked.
- The second problem with the user interface Unity is connected with scaling under displays of the different size. In principle, the object of canvas has scaling options with some parameters. But it was very difficult to organize their preview, it was necessary to unroll several times application on the device until we have picked up normal configuration.
- Besides, we were very much puzzled by the statistical Unity panel. Having implemented the intra game counter of frame frequency, we have compared its value that was displaid on statistical panel of the Unity editor. These values differed. Having looked for other options of implementation on the Internet, we have found the answer: the statistical panel gives assessment of that, how many personnel game if worked independently, but not in the editor would waste. Therefore the logic of our counter of personnel was absolutely correct.
Values of frame frequency 37 against 32. In the statistical Unity panel we see estimated data for autonomous application which do not match the real
Here is how the project looks in the Unreal editor. There are a lot of specialized enclosed editors, some of which are comparable on functionality with the whole programs
In UE the same screen picture, kk and in Unity is made (see above), and mobile settings are left by default, without illumination of trees
When settings have been modified, trees have turned out better, but it is all the same not so good, as in Unity
- Trial version of Unreal absolutely free. In it you receive the full-function editor. In Unity also there is free version, but transition to Pro will manage in round sum.
- In Unreal there is powerful editor comprising some highly specialized editors. If you are familiar with these "enclosed" editors, they very much will help you with development, and often will provide also such information which in Unity you will not see. There are editors who even can serve as full replacement to some programs. Interaction of all these subsystems — simply masterpiece.
- The engine is delivered together with all source code. Therefore in it it is possible to rummage and understand how separate parts function. Moreover, you even can correct bugs in the engine or independently supplement its functionality.
- Visualization in the editor is magnificent. Simply eyes run up from abundance of the options of rendering (connected, for example, with lighting or with complexity of shaders). Here you will find the mass of ultramodern shaders which are also delivered together with the engine. In principle, Unreal offers the best mechanism of rendering in the market. It is possible to create surprisingly beautiful scenes.
- Drawings (blueprints) are convenient quickly to create something simple and to implement basic game logic. They are excellently integrated with C ++, and such decision is made not casually: it not only opens the most ample opportunities both for beginners, and for experienced developers, but also allows them to interact with each other.
- The general integration with C ++ is magnificent. As well as hot reboot.
Drawings are excellent at solution of simple tasks, their integration with C ++ the simply fantastic. But if more difficult logic is involved, they quickly come to disorder, and to deal with them becomes difficult.
- When developing on Unreal Engine it is difficult to achieve of speed. Even if you perfectly know C ++, a lot of time for studying of different macroes and the UE4 functions will be required. It can be very difficult for those who at the same time is engaged in studying of C ++.
- In drawings it is possible to get confused very quickly. When the logic includes tens nodes, in each of which there is drawing, it sometimes manages to be simplified to couple of code lines written on normal to C ++. Normally it not problem as it is quite possible to work and with C ++, but with some things, for example," UMG "(UI system) it is necessary to use drawings therefore the confusion is possible.
- The mobile simulator was very inconsistent. It gave out warnings when we tried to use the shader functions which are not used in the mobile environment but even if the shader passed validation, could not work. In principle, this simulator – good thing, but its visual qualities leave much to be desired.
- Though Unreal also possesses big community of developers, we seldom received answers to questions there. Besides, almost all support given us concerned drawings. Unreal Engine 4 actively increases community, it already works well not bad, there is feeling that specialists aim to develop and help. But the community Unity after all is better.
- Seriously there is no documentation on C ++. The on-line reference material on classes C ++ is inconvenient. Besides, because of continuous updatings many opportunities quickly become outdated. Be attentive, viewing help videos as there the irrelevant version of the engine and function which are not used any more can be described.
- Working with GUI, we used the innovation system" UMG ". It is based on drawings and can be very useful. Having a little worked, we managed to inherit class C ++ and to bring order with drawings a little. However the system still crude, in it lacks some controls, for example, of buttons switches. Besides, the corresponding documentation on C ++ is practically absent. The editor several times fell off while we developed UI. Unexpected failures can cost the whole working hours, they fairly irritate. Development of this system proceeds, but so far it is far from perfect.
- Mobile development with Unreal the slow. The program is unrolled on the device very long. In Android there were some visual problems — for example, there were indistinct outlines and dark trees. In iOS of problem were much more serious. UE4 supports assembly for the device with iOS only on condition that your application consists only of drawings. It is wine of Apple, but we have done all way on import of keys of development (can imagine) before have faced this problem. In iOS of texture of the trees constructed on the basis of SpeedTree were not displayed, trees stood gray and naked, without leaves. So, support of mobile development in Unity significantly wins in comparison with Unreal.
Results of benchmark testing. Frame frequency
Surprisingly, but when testing the frame frequency (FPS) on different devices we have received very not similar results. On some Unity devices won at any configuration. In other cases of Unreal arranged Unity in those tests where there were many buildings. In principle, Unreal has won, but expensive price. Image quality and coherence in Unity were significantly better. Textures of Unreal on some devices looked vaguely, trees turned out much worse. The difference in quality has been partly caused by that is displayed on the one hand in the Unreal editor and mobile preview, and with another – on the real mobile phone. This problem was especially obvious if to speak about illumination of scene. It was very difficult to pick up settings so that it is correct to configure light, all setting on mobile devices often looked is darkened. In this respect Unity was much more consecutive, the image on any smartphones was same, as well as at print preview in the editor.
Results for both engines were much better, than we calculated (as you remember, in our test models was approximately in 10 times more of triangles, than in normal mobile games).
In iOS both engines approximately with identical success displayed the animated models. However tests with trees on this device were ineffectual as Unreal has not displayed any textures on models of trees. We have tried to find the reason of this model, but could not resolve it. Besides, have to note that at expansion using these engines you near at hand have to have computer of Apple. It is very inconvenient, but the company Apple is guilty of such situation. Customers also asked us to execute benchmark testing on Windows Phone. Unfortunately, Unreal does not support expansion yet on Windows phone therefore here Unity has won by definition. As so far Windows Phone occupies very small share of the market, development of Unreal in this direction is not considered priority task.
Finally, benchmark testing has only shown that two engines are almost equal on force. Therefore it is especially important to pay attention to specific merits and demerits of each of them. Eventually, if productivity is so close, to the forefront there is convenience and speed of development to each of these engines.
Other control parameters
Here still some interesting results which managed to be found out during our tests:
- Both engines almost did not differ on memory consumption. On devices with Android won Unity, on devices with iOS — Unreal a little.
- The Unity project is significantly more compact (Android: 42 MB/iOS: 100 MB) than Unreal (Android: 101 MB/iOS: 173 MB).
- Unity is approximately three times quicker unrolled on the device. Besides, in Unity the code is much quicker compiled.
- Unreal spent the battery much more economically. Later two hour of work with 150 animated models on the Unreal screen has managed to discharge the Android battery for 42 percent and iOS – for 36 percent. Unity has consumed about 72 percent on Android and 47 percent on iOS at the same setup and duration of work.
By results of research a lot of things were pleasant to us in both engines. Besides, we have found many areas where these tools can be improved that it was more convenient to programmer to work. Any of engines had no essential overweight over another, considering as their opportunities and support quickly change. Testing of rendering has shown that both products squeeze out of the device at most and, in principle, are quite comparable. Besides, in this situation to the forefront there is convenience of use and intuitive clearness of development. Considering everything that we have learned about these engines, and what problems have faced when developing, we have appeared before difficult choice, but as a result have given preference to Unity.
In spite of the fact that initially we put on Unreal Engine victory, Unity after all more advantageous option, at least, now if to speak about development of mobile games.
Here the main arguments in favor of our solution:
- Unity visually looks more in coordination on all devices, besides, is quickly unrolled by "one click" on any platform.
- Unity borrows on the device much less place, affects work of the ultimate user less. The compact size is especially important in Google Play Store where APK should be divided into parts if this file is larger 50mb.
- It is much simpler to Unity to study and understand. Having armed with Unity, the novice user can get to work quicker and create products which support is guaranteed by big community of specialists.
- Iteration duration in Unity much less (expansion and compilation of the source code happens quicker, shaders are compiled almost instantly)
We would like to emphasize that our results should be regarded in the context of the made prototype. That is suitable for one company, is not suitable for another. Besides, there is still set of game engines, some of which can correspond to your specific objective better. In some companies possessing sufficient time and resources it will be more reasonable even to write own engine. In development of games of universal solution does not exist. Render yourself service and experiment properly. Especially as many of them are reduced the price or in general become conditionally free as Unreal. We will not be surprised if Unity also follows the example of Unreal and liberalizes price model.
It is interesting to note, as children from Bit Barons before creation of prototype advised us to take Unreal Engine for our project. Considering, as we initially gave preference in OFM to Unreal Engine, perhaps, the final solution was non-optimal.
Of course, it is hard to design, write and test prototype, especially if it is required to decide simply on the engine for the project. But the question of such choice is crucial.
At last, we have considered still some factors which could change our opinion. Namely: it is how easy to find experienced each engine specialists now, and what available business models?
On personnel question we have consulted to experienced recruiters to learn more or less real digits. At present about four professionals on Unity are the share of each Unreal specialist. As for business model, Unreal does not provide primary fixed contribution, and demands runtime royalty fees. In Unity all absolutely on the contrary. Both mentioned factor were important for us, and as a result we after all have stopped on Unity.
This article is a translation of the original post at habrahabr.ru/post/269415/
If you have any questions regarding the material covered in the article above, please, contact the original author of the post.
If you have any complaints about this article or you want this article to be deleted, please, drop an email here: firstname.lastname@example.org.
We believe that the knowledge, which is available at the most popular Russian IT blog habrahabr.ru, should be accessed by everyone, even though it is poorly translated.
Shared knowledge makes the world better.