Customers can design, buy, or import digital assets like forests, sound effects, and aliens and create the logic guiding how all these elements interact with players. That positions Unity — as Facebook CEO Mark Zuckerburg argued in a memo in favor of acquiring it — as a key platform for the next wave of consumer technology after mobile. While other game engines targeted the big AAA game makers at the top of the console and PC markets, Unity went after independent developers with a less robust product that was better suited to their needs and budget.
As it gained popularity, the company captured growth in frontier market segments and also expanded upmarket to meet the needs of higher-performance game makers. This article is part of my ongoing research into the future of interactive media experiences. This research has included interviews with dozens of developers, executives, and investors in gaming and other industries, including interviews with over 20 Unity executives.
Its story began on an OpenGL forum in May , where Francis posted a call for collaborators on an open source shader-compiler graphics tool for the niche population of Mac-based game developers like himself. It was Ante, then a high school student in Berlin, who responded. The plan was to start a game studio grounded in robust tech infrastructure that could be licensed as well. Support for custom high-performance native audio plugins through a new SDK.
Reverb Zone Mix slider and curve in order to be able to control amount of signal routed to the global reverb associated with Audio Reverb Zones.
This allows setting up natural transitions between near field and distant sounds and also allows routing 2D sounds into the reverb. Rewritten Audio asset pipeline and AudioClip backend.
AudioClip settings now support multi-editing. Per-platform compression setting overrides for AudioClip import, much like texture importing. This includes an API change. Users will now be able to enable override settings per platform and have unity have different compression characteristics for different platforms. Audio transcoding and packing now happens in a separate tool, removing risk of crashing Unity on import. No double loading of sounds during import processing.
Better handling of huge audio files. If a sound is set to streaming, it is never fully loaded in the editor or player now.
Editor profiling of Audio is now accurate and reflects how it would be in the game. Streaming file handle resources are now freed immediately after playback of sound. Much improved audio formats in terms of memory and CPU usage. The audio data of an AudioClip can now be loaded on demand by scripts, and loading can happen in the background without blocking the main game thread.
Memory management can now be performed much easier of AudioClips in the project. Improved Audio Profiler with better statistics and detailed information. Improved Audio Profiler AudioSettings. The new API allows querying the current configuration and applying all changes at once.
Notification callback AudioSettings. OnAudioConfigurationChanged deviceChanged callback which can be used to get notifications when sound system reinitialisation happens. This can then be used to adapt audio device settings further or reload volatile AudioClips such as generated PCM clips and restore other audio system state.
Consoles Unity 5. A custom editor is no longer required for any console. The console extensions are compatible with the general Unity editor! Many developers are already building their games with Unity 5. Editor Unity editor is now bit! Note that this affects native plugins used in the editor, which now also need to be bit. New AssetBundle build system. Supports incremental build, which only rebuilds AssetBundles that actually change.
AssetBundle dependencies don't force the rebuild of all the bundles in the dependency chain. By default includes type tree in the assetBundle on all the platform except metro. New Project Wizard dialog. Recent projects list shows "Last Saved With" version number for each project if available - this information is only saved starting with 5.
Each thread has its own timeline; This is mostly useful for multi-threaded profiling. Timeline Profiler Version Control: Scene and Prefab Merging Command line merge tool that understands the scene and prefab formats in order to do semantic merges. Merge tool integration with Unity's existing version control integration. Can be enabled from EditorSettings. Plugin Inspector: new native plugin importing system.
From now on, you can place them anywhere. Platform specific settings can also be set, e. CPU type. Different platforms may have different settings. Graphics Integrated Enlighten real-time global illumination GI technology, and improved lightmapping workflow.
Emissive surfaces can emit light into GI at runtime. Emissive colors can be changed affect static and dynamic objects in realtime. Directional lightmaps can now be baked in a "directional specular" mode which allows materials to retain their specular look or in a cheaper "directional" mode materials get a normal-mapped diffuse look.
All 3 options are available for both baked and realtime lightmaps. UI grouped by logical areas. When real-time lightmaps are disabled and baked lightmaps enabled, indirect lighting of real-time lights is automatically baked into baked lightmaps. If you don't want this behavior, set indirect lighting to 0. Support for. HDR textures from. You can alter this behavior in advanced texture import settings. Reflection Probes New "ReflectionProbe" component that captures its surroundings into a cubemap.
Cubemap is assigned to Renderers in the proximity from the probe and can be used to produce glossy reflections. Reflection probes are baked similar to light probes and are stored as cubemap assets. Specular convolution is applied automatically to achieve high-quality glossy reflections. Reflection probes can also be rendered in realtime, with optional timeslicing across multiple frames.
Added global reflection cubemap in Lighting settings; by default matches the skybox. Reflection Probes Skybox and ambient improvements: New scenes are now set with directional light, procedural skybox and a reflection probe by default.
Skybox materials can be assigned by drag-and-drop on the background in the Scene View. Cubemap textures can be assigned to skybox by drag-and-drop on the background in the Scene View. Ambient lighting automatically matches to a skybox.
This behavior can be turned off by specifying ambient colors explicitly in Lighting settings. Skybox and ambient improvements New "Deferred Shading" rendering path: Single pass, multiple-rendertarget G-buffer shading.
Fully supported by the new Standard shader. Possible to even exclude the shaders from game build, in case you don't need them at all. Surface shaders can generate code for new Deferred Shading rendering path. All 4. Deferred G-buffer Improved and extended cubemap workflow. Automatic detection of the mapping mode for spherical, cylindrical and 6 image layouts; removed 2 obscure spherical mappings which were rarely used.
Textures imported as cubemaps can use texture compression now! Added specular and diffuse convolution options to cubemap textures. Improved seamless cubemap edge fixup. Moved old Cubemap menu entry from Assets into Assets Legacy. Meshes: More than two UV coordinates! Non-uniformly scaled meshes no longer incur any memory cost or performance hit. Instead of being scaled on the CPU they are scaled and lit correctly in shaders. MeshRenderer has a new additionalVertexStreams property for per-instance mesh data overrides.
For example just vertex color for one instance. This is currently used by Enlighten for per-instance UVs. SpeedTree integration: SpeedTree models. SPM files now can be recognized, imported and rendered by Unity. The workflow is very similar to other mesh formats like FBX. SpeedTree features like smooth LOD transition, billboards, wind animation and physics colliders are fully supported by specialized SpeedTree shaders.
SpeedTree models are selectable as tree prototypes on terrain. Frame Debugger. See how exactly frame is rendered by stepping through draw calls. Create command buffers "draw mesh, set render target, Command buffers can be executed from a bunch of places during rendering, e. Ability to control directional light shadow cascade split ratios in Quality Settings; and added a shadow cascade scene view visualization mode.
Replaced "cast shadows" checkbox in Renderer component with a popup. Additional modes: Two Sided - casts two-sided shadows even from single-sided geometry; Shadows Only - cast shadows, but make the object invisible otherwise.
In Forward rendering, directional light shadows are computed from camera's depth texture instead of a separate "shadow collector" rendering pass.
Saves a bunch of draw calls, especially when depth texture is needed for image effects anyway. This means that ShadowCollector shader passes aren't used for anything; you can just remove them if you had any. Now it is generated using same shaders as used for shadowmap rendering ShadowCaster pass types. Most platforms now internally use floating point RFloat format for point light shadows, instead of custom encoded ARGB32 format. Saves shader instructions and has better precision.
Particles: Added a Circle emitter with an option to specify an arc and one-way Edge emitter. LOD Group was improved. Support for XIB launch screens. Xcode manipulation API for editor scripts, and rewritten Xcode project generator. You can switch to it in Player Settings. Metal graphics API support. Picked automatically on eligible devices. Can be controlled in Player Settings.
Gamepad hot plugging. Includes default configurations for several common gamepads. Physics PhysX 3 integration! Better performance on multi-core processors, and especially on mobile. Better simulation quality, e. Cleaner codebase, which does not contain some of the long standing issues. Added Physics2D. IsTouching, IsTouchingLayer methods.
Added Rigidbody. Added TerrainData. Add Cloth. ClearTransformMotion method to allow teleportation of cloth instances. Exposed WheelCollider. Physically based shader, suitable for most everyday surfaces metals, plastics, wood, stone etc. Introduce detail normalmaps and ambient occlusion support. Features driven by what you enable in the inspector e. This is a default shader for newly created objects now.
Most of Unity 4. Build-time stripping of unused shader features, and shader variant compilation improvements. If no materials use a particular shader feature variant, shader code for it is not included into game data. This expands to two shader variants without and with the parameter defined. Can specify vertex- or fragment-only shader variants. Useful for defining default shader behavior.
No need to manually add "nolightmap" and friends to shader code now. For example, you can base it for SM2. Syntax: pragma target 3.
Using this approach makes the custom shader GUI show within the inspector for Substance materials. Standard Assets A new suite of Standard Assets including cameras, first and third person controllers, car controller, aeroplane controller and sample particle systems. A cross platform input helper. New mobile control prefabs based on the new UI system. Image effects have been converted to C. New sample project based on the Standard assets shows how to best utilize them.
Unity Download Assistant As part of optimizing download, we're shipping Unity 5 as multiple installers. The Download Assistant lets the user select which components to download and install.
The individual installers can be downloaded separately and installed silently, as described in the documentation. Uses the same il2cpp scripting backend as bit iOS. Use Sprite. NavMesh data format has changed - you need to rebuild the NavMesh to use it!
NavMeshObstacle supports two basic shapes - Capsule and Box, for both carving and avoidance. Setting destination on a NavMeshAgent doesn't resume the agent after calling Stop; call Resume explicitly to resume the agent. Setting NavMeshAgent. Use smaller navmesh tile partitioning to improve baking and carving speed. When NavMeshAgent. Android Disabled hidden input keyboard.
Tegra 2. This gives a significant performance boost to Mecanim and PhysX among other things. User resolution now gets swapped when the orientation is changed. WebCamTexture is no longer supported on Gingerbread 2. Switched default from being a NativeActivity to a regular Java Activity. This should make the default Activity more compatible with 3rdparty Android frameworks. Animation Added Animator. HasState to be able to query if an animator has a certain State.
Added console warning when an IK function is called when the Animator is not in the IK pass Animator with Apply root motion ON will always be affected by physic gravity when playing a clip without any root motion curve. Animator Tool deleting a layer or parameter can now be done with delete key. Changed profiling detail to see more information for the Animator evaluation pipeline. Renamed Animator. In the character transform hierarchy, if a transform doesn't belong to the skeleton, then we preserve it as it is while doing optimization.
Moved AvatarMask to the Animations namespace. Moved GameObjectUtility. Transform scale now blends linear instead of exponential. Changed Culling Mode for the Animator. Rename AssetBundle. Load to AssetBundle. LoadAll to AssetBundle. Provide AssetBundle. LoadAllAssetsAsync which loads all assets asynchronously. AllAssetNames to return all the assets in the assetBundle.
Support type tree incremental build check. Asset Management Resources. LoadAssetAtPath is no longer available outside of the Editor. Audio AudioClip. The hardware, loopable and compressionBitrate properties of AudioImporter are now obsolete. Please use "BlackBerry" instead. Editor Apply build target switch from -buildTarget before initial domain load. Creating, duplicating or instantiating prefab in editor generates unique name between siblings.
Does not affect renaming, re-parenting, scripting or playmode. Editor always runs in background when a debugger is attached. If you need a new scene with no GameObjects in it use EditorApplication. If standalone is current build target, do a full build target switch when setting EditorUserBuildSettings.
It is now recommended to derive from ShaderGUI instead of deriving from MaterialEditor to make custom gui for shaders.
Merged two scene view render mode dropdowns into one. New bug reporter Players always run in background when "Script Debugging" is enabled. Prefab instance objects are no longer stored as part of the scene file. Replace EditorUtility. When manipulating preview object in Material inspector camera will rotate around the object instead of rotating the object itself, this was needed so you can see different reflections from different angles.
Fonts Font. This change cannot be upgraded automatically by the script updater. Graphics Added GL. SetRevertBackfacing function. Changed behavior of what happens with textures that are too large for the GPU to handle, and they don't have mipmaps. Now such textures are displayed in blue color.
Before, some platforms were downscaling them in some cases; other platforms were leaving them as garbage; others were crashing. GLES: Replaced 16bit depth buffer support with the ability to completely disable depth and stencil buffers. You probably want to delete old files and import the fresh Effects package if you want the latest version. Removed old Glow image effect; use Bloom or Bloom optimized instead. Light and Reflection Probes are enabled on Renderer components by default.
Made SystemInfo. Now it always returns -1, just like it used to for unknown GPUs. OnPreRender script callback is called before rendering camera's depth texture now.
Create now actually does nothing if RenderTexture is already created, just like documentation always said : Replaced the built-in sphere and capsule meshes with versions that are better suited for lightmapping. Because the topology has changed both UV1 and UV2 are now different. Setting Mesh. This allows you to store higher-precision color values on meshes.
Note that it will use more memory so if that is a concern use Mesh. Skybox geometry was changed for cubemapped and other single-pass skybox shaders. Now instead of a big cube, it's a big and somewhat tessellated sphere, with more polygons near horizon. Allows computing things per-vertex in skybox shaders for performance. Added methods to AppController to override to provide custom ones. An animated splash screen with a Unity logo is shown for non-Pro license users by the engine itself.
Static pre-splash screens can be customized by all users. Changed the way UI integration works. Now there are specialized ViewController's for fixed orientation. Also made custom UI integration easier - both for simple and complicated cases e. Override createUnityView instead.
Override willStartWithViewController instead. Use createUI instead if you had it called from custom place. Refactored player pausing in the trampoline. Default splash screens set to solid color. Fixed TCP port in now used by player for script debugging. Linux Minimum supported version is now Ubuntu OS X Application.
Physics Disabled MonoBehaviours will no longer receive collision or trigger callbacks. Expose contactOffset both global and per-shape. This comes to replace Physics. Contact offset is the value that directly affects the distance at which PhysX starts generating contacts; when the distance between colliders is less than the sum of their respective contact offsets the contacts are generated. The value is useful when you have fast moving ragdolls and observe the not physically correct behaviour of joints when the colliders they connect penetrate other collision geometry.
Expose enablePreprocessing on joints. Having this flag unset basically lets PhysX to ignore some of the broken joint constraints in complicated configurations; otherwise such constraints may produce huge impulses that lead to "explosions".
A typical usecase would be when upgrading a PhysX-powered Unity 4 2D game where you have 2 rotations frozen on each Rigidbody and joints are attached to some of them. Expose projections on CharacterJoint to help with stretching of limbs. Joint projection is a technique that once enabled makes sure the joint constraints are not violated for more than a tolerance value by adjusting the connected bodies' pose so that they it is always within tolerance.
This is not a physical process it may loose energy and comes with some performance cost, but can serve as a good last resort in challenging configurations where otherwise ragdolls explode or overstretch. You can still use Rigidbody. Use AddComponent instead. Added generic version of Object.
Instantiate has been in the docs since 3. This allows for multiple subscribers. C compiler defaults script encoding to UTF8. Deprecated Component. SampleAnimation moved to AnimationClip.
MetroPlayer became BuildTarget. Metro became PlayerSettings. Removed quick property accessors, like. Instead, use GetComponent to get references. Removed obsolete graphics APIs: Camera. GetScreenWidth use Screen. GetScreenHeight use Screen. DoClear, Camera. Render, Graphics. SetupVertexLights, obsolete Graphics. SetBorderColor, Screen. GetResolution use currentResolution , Mesh.
Vertex programs are always supported. GetPhysicMaterial and TerrainData. This means that image effects that used "alpha as fake HDR" e. Built-in default "gray" shader texture is color space aware now. Built-in functionality for directional lightmaps, dynamic Enlighten GI and soft shadows all require shader model 3. If you had them declared in your own shader code, you might need to remove them we'll try to do that automatically. Fog handling in shaders was changed.
For surface shaders and fixed function shaders, nothing to do. Can add "nofog" to surface shader pragma line to explicitly make it not support fog. Check out built-in shader source, for example Unlit-Normal how to do it.
Improved error messages for some shader compilation errors. This makes per-draw-call CPU overhead slightly lower across all platforms. Removed TexGen. If you have old Projector shaders, they might be using this; upgrade to 4. Removed texture combiner matrix transforms, i. SetTexture stage count is limited to 4 on all platforms. It was never working on mobile, consoles or DirectX 11 anyway. Direct3D 9 shader compiler was switched from Cg 2. This fixes a bunch of issues where Cg was generating invalid D3D9 shader assembly code; and generally produces slightly more efficient shaders.
You no longer need to write " pragma glsl" to get to features like vertex textures or derivative instructions. Shadows All built-in shadow shaders use backface culling now.
Shadows on D3D9 require "native shadowmap" support in the driver now pretty much all systems that can do shadows have that, so this should be fairly invisible.
Upside: less shader variants are included into game builds now. Upside: less shader variants and faster shader loading times. Removed screenspace directional light shadow blur PCF 5x5 is used now. Normal-based shadow bias defaults to 0. Load additional unity web file from website script code.
Improvements 2D Added Sprite. Sprite geometry can now be overridden using Sprite. OverrideGeometry Vector2[] vertices, UInt16[] triangles. SpritePacker: Atlas texture name will now also contain the atlas name. The new AssetPostprocessor. AI Carving navmesh supports carving the detailed tessellation. Fixes height discontinuities when an undulating region is carved Expose pathfinding iteration limit, and avoidance prediction time to script API In Editor the "Show Avoidance" option for NavMeshAgent will show the sampled velocities for avoidance calculation New icons for navmesh asset and components Warn if agent and obstacle components are placed on the same GameObject Warn if navmesh slope bake setting is unreasonable.
Hardware upscaling for Screen. Build fails if only JRE is present. Made VRAM estimation somewhat more correct. Public Java API for attaching custom rendering surfaces. Reconfiguring antialiasing or changing display framebuffer properties should no longer result in a GL context loss. Reduced system memory usage. Support for Android TV banners. Support for MouseDrag event.
Animation Added AnimationEvent. Always display numeric values for Transition's duration, offset and exitTime. Display Animator stats in inspector: Clip count, curve count, etc. The differences between Generic and Humanoid animation are now less than 0. Runtime access to Animator's parameters Animator. States can now be renamed on synchronized layers Support the case that both SkinnedMeshRenderer and Animator are on the same GameObject optimised mode.
Transition Solo and Mute are now undoable. Trigger parameters now have different UI to distinguish them from Bool parameters. OnPreProcessAnimation, this new callback is called just before animation clips are created. Added ModelImporter. Asset Management Allow to access files with long path more than characters on Windows. Audio Added more descriptive error message when FMOD fails to initialise on Windows because of sound card drivers configured to give applications exclusive mode access.
AudioSources now take up fewer resources. Previously this caused problems when importing projects with a large number of AudioSource contained in prefabs. Improved audio importer interface to be make options more clear Increased default virtual voice count from to and made it user-configurable through project settings.
Renamed AudioSource. There is no longer a mode toggle, but a continuous interpolation between the two states. This is to remove confusion about the nature of this property. This happens before spatial panning is applied and can be applied in conjunction with 3D panning. Blackberry Added "Add Attached Device" to the debug token creation window.
Registration now uses BlackBerry's Currently registered systems do not need to re-register. Documentation Default language for code snippets in the Scripting Reference is C , with many more examples in C available, with Javascript as a secondary language, and Boo removed. Localized documentation available in Russian, Spanish and Japanese currently based on 4. Improved handling of namespaces, generics and interfaces.
API history improved with information about obsolete members. Editor Added maximum texture size option in import settings. DrawMesh and DrawWireMesh the meshes drawn are pickable too. Added virtual function ScriptableWizard. Added warning on exiting play mode when objects have been spawned into the scene from OnDestroy.
Asset Store: The asset store window is now much faster, more responsive, and looks better. Camera inspector shows camera's depth texture mode. Also, scene view camera makes sure to match main camera's depthTextureMode.
Drag-and-drop assigns material to a specific part of the mesh now. Holding Alt key will assign material to all the parts of the mesh. Expose RenderTexture color format in the inspector, just like with depth format. Exposed AssetPreview. Finished builds will be shown in OS X notification center when Editor in the background. Improved build times for textures and AudioClips Improved searching for class names in different namespaces and across different user assemblies.
License: Added -returnlicense command line option, which returns the currently active license and quits the editor. License: A progress bar will be shown during returning or releasing a license. Added TexturePropertyMiniThumbnail : Draw a property field for a texture shader property that only takes up a single line height.
The thumbnail is shown to the left of the label. Clicking the thumbnail will show a large preview info window. Returns the free rect below the label and before the large thumb object field. Is used for e. Texture scaling and offset values can now be dragged. Optimization of Hierarchy Window Prevent tooltips from showing while dragging.
Tag editor facelift by removing the empty tag and using Reorderable list to draw tags and layers. When browsing for a location to create or open a project, the dialog starts at the location where a project was last created or opened. When saving scenes, overwrite existing scene file only after successful save. For ex. Added new APIs to get font metrics if you want to implement your own font rendering: Font. Optimized texture rebuilds to happen less often. Added Camera. Added RenderTextureFormat.
ARGB and Shadowmap formats. Added Shader. Added SystemInfo. Added Texture2D. SetPixels32 overload that accepts offset and dimensions. When using pure lightmaps, it should in fact look very similar. Allow SkinnedMeshRenderer to accept non-skinned meshes. DDS importer can import Float, Half and Helps with shadow caster batching, and unlit shaders. Image Effects: GlobalFog image post-processing effect was rewritten.
Now it has "distance fog" matches what is set in lighting settings , and optional "height fog" linearly increasing fog density below specified height. Increased maximum number of simultaneous render targets MRT to 8 on capable platforms.
Light intensity now behaves consistently between linear and gamma space rendering mode. Lights in linear mode can now have much higher intensity. The light intensity is now defined to be in gamma space, hence in linear rendering it is converted to linear space when passed to the shader.
In linear space the maximum effective light intensity is now 97 while previously it was 8. This reduces RGBM compression artifacts for lightmaps. Emissive surfaces for enlighten are encoded with a range of 8 in gamma space and 97 in linear space. Meshes: Mesh compression will now also do lossy compression of vertex colors. Optimized per-object light culling in forward rendering by using multiple CPU cores better.
Overhauled stats window to be more compact and profiler rendering stats to be more comprehensive. Reduced memory consumption when loading textures on mobile devices.
Rendering code optimized to reduce amount of material SetPass calls. Light probes and lightmap UV transform state changes are now internally applied via MaterialPropertyBlocks without requiring a full SetPass. This reduces cost on the main thread to send commands to the render thread, and on the the render thread the driver overhead is reduced.
Scene View: Can drag a cubemap onto empty space in the scene view to assign it as a skybox. Skinned meshes use less memory by sharing index buffers between instances.
Support for more shader keywords , up from Allow to set compile flags for already existing files in Xcode API Better support for Unity view size changes from native side. Enabled basic background processing.
Expose font directories to the trampoline Game controller button pressure is now also exposed as axis float value. Implement a way to select iOS framework dependencies for native plugins.
Improved performance of adding large number of files to Xcode project Optimized Texture2D. Linux Added Input. IsJoystickPreconfigured for querying 5. Networking WWW: Populate. Internally multithreaded parts culling, skinning, mecanim, Temporary memory allocations done by some jobs are more efficient now. Improved loading performance. More work has been offloaded to the loading thread, reducing the overhead of asynchronous loading on the main thread.
Instantiate performance has been improved. Mecanim optimizations: Optimized Animator Enable , 2x speed on complex controllers. Optimized Animator memory usage per instance, 2x smaller on complex controllers. Improved performance for Animator Tool. Optimized memory usage and runtime performance when serializing objects with backward compatibility type-tree enabled.
Optimized texture importing performance. Static batching performance is improved in many cases. Updated occlusion culling Umbra version; contains improvements for mobile Umbra culling performance, and improves occlusion culling robustness in some cases.
Physics Adaptive force is now optional disabled by default. Changed default cloth coefficient values, and added info boxes to cloth editor Cloth constraint editing UI has been replaced by a more intuitive UI inside the Scene View. Cloth; exposed sleep force parameter to tune minimum force after which cloth will start sleeping.
Cloth; exposed tethers flag to improve cloth simulation quality. Cloth inspector is now much faster and capable of dealing with meshes of any vertex count Exposed a function ConfigureVehicleSubsteps in WheelCollider to make it possible for developers to customise vehicle sub-stepping.
This helps setting up heavy vehicles, that require different amount of sub-steps to simulate wheels correctly. Make scaling mesh colliders cheaper, by not creating a new mesh with scaling applied to it with every scale change.
0コメント