Roy clobbered 11 fours and two sixes off 44 balls during his maiden T20 half-century, as England scored 159 for three in 17.1 overs after Ben Stokes (three for 26) helped restrict New Zealand to 153 for eight.
England, the champions in 2010, will face the winner of the other semi-final between India and the West Indies in Mumbai today.
Roy, who had scored 42 against Sri Lanka and 43 against South Africa earlier in the tournament, took the game away from a team that had won all its previous four games by defending totals.
He set the tempo by smashing four fours off the opening over from left-arm pace bowler Corey Anderson and went on to exhibit some fine shots in front and square of the wicket.
Roy lofted and pulled fluently to add 82 in only 8.1 overs for the opening stand with Alex Hales (20) and continued in the same vein as England reached 100 for one in only 10.2 overs. Roy was bowled by leg-spinner Ish Sodhi with England needing 44 off 48 deliveries.
Sodhi also trapped captain Eoin Morgan lbw off the next delivery but Jos Buttler (32 not out) and Joe Root (27 not out) saw the side through with Buttler sealing the win with a six off spinner Mitchell Santner.
“It was a chance to get off to a great start on a decent wicket,” Roy said. “I gave it a crack and it came off. I got a few boundaries early and kept going from there.”
Morgan hailed a near-perfect performance from his side. “I don’t think [it could have gone any better],” he said.
“Maybe we could have started a little better with the ball, but I thought we did really well to peg it back after the first six or seven overs.
“Having played on this wicket before, it’s harder to start than most.
“So continuing to take wickets throughout the back end of their innings helped us a huge amount.”
Morgan, who was bowled for a golden duck, added: “It’s the kind of thing you dream of as a kid. Everybody in that changing room has worked tremendously hard and made a lot of sacrifices in order to put us in this position.”
Earlier, England’s bowlers took charge after the mid overs and strangled New Zealand in the death overs.
Put in to bat, New Zealand had kept a steady pace of runs with Colin Munro smashing three consecutive fours off Liam Plunkett to take the score to the 50-run mark in 5.4 overs while the 100 was reached in 12.2 overs.
Munro boosted the score, adding 74 for the second wicket with captain Kane Williamson, who struck a 28-ball 32. But New Zealand lost seven wickets for 62 runs following that partnership, the last ten overs of the innings yielding only 64 runs in the face of some tight bowling from both the pacemen and the spinners.
Anderson (28) could not convert his steady start into a big score and was the biggest of three wickets for Stokes.
“I knew we were probably a touch short,” Williamson said. “The 180-mark was realistic and it would have been a closer game.
“We were beaten by a far better team. We weren’t able to stem the flow of runs – it was a fantastic knock by Jason Roy.”