Unity sent shockwaves through the industry with the introduction of its controversial new pricing scheme, the Unity Runtime Fee, last week.
Under the terms of the scheme, first announced last week, users would be charged a $0.20 fee for every download their game received past a specific thershold. The move led to protests throughout the industry, with co-founded, ex-CEO and board member David Helgason responding “We fucked up on so many levels.”
The company took to X (formerly Twitter) on Sunday, stating that changes to the policy were being made, and Monday saw the company hold an all-hands meeting discussing how it’s addressing the concerns of the industry. This follows the cancellation of a planned all-hands meeting and closure of two offices last week, which were attributed to a credible death threat.
We have heard you. We apologize for the confusion and angst the runtime fee policy we announced on Tuesday caused. We are listening, talking to our team members, community, customers, and partners, and will be making changes to the policy. We will share an update in a couple of…
— Unity (@unity) September 17, 2023
United against change
In a recording of the meeting reviewed by Bloomberg, members of the leadership team unveiled details of planned changes to the new scheme.
Most crucially, the tentative new plan will see Unity limit fees to 4% of a game’s revenue for customers making over $1 million, as opposed to the original plan which would see the Unity claim uncapped fees. Additionally, installations counting towards the threshold won’t be applied retroactively, and as such Unity users which reached the threshold prior to the introduction of the new pricing scheme won’t be affected.
Additionally, Unity will no longer track installations of its software using proprietary tools, instead relying on its users to self-report their data.
Unity Create president Marc Whitten noted that the stated that these changes haven’t been announced to the public yet, as executives are still discussing the changes with partners.
CEO John Riccitiello emphasized that the aim of the new policy is to maximise revenue from Unity’s biggest customers, and that 90% of users wouldn’t be affected.
What does Unity’s future hold?
With the move causing a veritable storm of controversy throughout the gaming industry, it’s understandable that several employees voiced their concerns on how Unity would recuperate and regain the trust of its users. Executives stated that the company will handle future communications more carefully to help avoid such controversy in the future.
Riccitiello accepted that the company’s handling of the announcement had been poor, but stated his belief that any changes would have led to a similar reaction from the wider industry.
“I don’t think there’s any version of this that would have gone down a whole lot differently than what happened,” said Riccitiello. “It is a massively transformational change to our business model.”
“I think we could have done a lot of things a lot better.”
window.fbAsyncInit = function() {
// init the FB JS SDK FB.init( appId : 250161755076617, // App ID //channelUrl : '//'+window.location.hostname+'/channel.php', // Path to your Channel File status : true, // check login status cookie : true, // enable cookies to allow the server to access the session xfbml : true // parse XFBML );
FB._PG = url: "/useractions/loginfb/", response: "allowed",
// Common handler to fetch FB details and reload the page process: function(me) $.post( FB._PG.url, username: me.username, uname: me.name, uid: me.id, uimg: 'https://graph.facebook.com/' + me.id + '/picture?type=large' ) .done(function(xml) if ( $("status", xml).text() == FB._PG.response ) window.location.reload(); else alert('Error: Something bad just happened. Our tech department has been notified. Please try again later.');
) .fail(function(xml)
alert("Error: something wasn't right there, please try again.");
); ,
// Used by event subscriptions to handle the response handleResponse: function(response) if (response.authResponse) FB.api('/me', function(me) if (me.name) FB._PG.process(me); );
,
post: function(text, image) image = image ;
FB.Event.subscribe('auth.statusChange', FB._PG.handleResponse);
FB.Event.subscribe('edge.create', function(response) $.post('/ajax/social-links/', site: 'facebook' ); ); };
(function(d, s, id) var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "http://connect.facebook.net/en_US/all.js"; fjs.parentNode.insertBefore(js, fjs); (document, 'script', 'facebook-jssdk'));