Roy lit the touchpaper to a chase of 178 with a blistering 70 off 38 balls while Morgan (52 off 34) was at his belligerent best in the penultimate over to leave England needing seven from the last six deliveries.
However, Tom Curran holed out before Moeen Ali was bowled by Lungi Ngidi, which left England needing three from the last ball, and Adil Rashid was run out coming back for a second as South Africa drew first blood in the three-match series.
Roy had seemingly left England in a promising position following an innings containing seven fours and three sixes but they, like South Africa before them, found scoring increasingly difficult as the innings progressed.
Having been 105 for one at the halfway stage of their innings, South Africa settled for 177 for eight in a total where Moeen collected one for 22 and Rashid took one for 23, with Chris Jordan taking two wickets in the last over.
They were asked to bat first under the evening sun, where England fielded a near full-strength line-up as they started preparations for this year’s T20 World Cup.
There was no room for Dawid Malan, though, who made a century in his last T20 innings for England against New Zealand last November.
It was a tale of two ends in South Africa’s first powerplay. Moeen yielded just 17 runs in his three overs and took the crucial wicket of Quinton de Kock, while Curran, Mark Wood and Jordan conceded a combined 49.
Each paceman was taken the distance, with Wood enduring a nightmare start as a beamer that was tickled for four was followed by a free-hit which appeared suspiciously close to being another no-ball for height being helped for six.
De Kock eventually holed out to deep midwicket for 31 and although the industrious Temba Bavuma and Rassie van der Dussen showed no sign of applying the handbrake, matters went awry after the end of their 63-run partnership.
Van der Dussen pulled Ben Stokes to deep square-leg for 31, while Bavuma (43) could not capitalise on being dropped by Roy at short cover on 42 as he swept Rashid to short fine-leg two balls later.
Stokes and Rashid continued to stifle South Africa while they found no joy in Moeen’s final over, leading to David Miller clubbing Curran to Jordan running back from mid-off for 16.
JJ Smuts’ run-a-ball 20 ended after picking out mid-off in the penultimate over off Wood, while Jordan bowled Dwaine Pretorius and Beuran Hendricks with successive deliveries as the hosts took only eight runs in the last two overs.
Jos Buttler miscued to mid-off for 15 off Dale Steyn, who was making his first South Africa appearance in 11 months, at the start of England’s reply before Roy took centre stage as Smuts conceded in one over what fellow spinner Moeen did earlier in four.
If there was a little fortune when Miller fumbled over the rope at long-on, Roy took advantage with crunching fours either side of a towering straight six before then dispatching fast bowler Ngidi over the sightscreen.
A drag-down from the otherwise economical left-arm wrist-spinner Tabraiz Shamsi was belted through square-leg by Roy for his fifth four to reach his fifty from only 22 balls – England’s joint second fastest in T20s.
Jonny Bairstow departed for 23 as he was lbw to Andile Phehlukwayo to end a 72-run stand with ODI opening partner Roy before back-to-back fours off the Proteas seamer from Morgan brought up England’s 100 in the 11th over.
Left-arm seamer Hendricks was oddly held back until the 15th over and pounced second ball, Roy horribly toe-ending a pull to a slower ball to short fine leg.
Joe Denly and Ben Stokes were both caught in the deep, as England were left needing 23 from the final two overs. While Morgan took four-four-six off Hendricks, he holed out immediately after reaching his fifty.
Ngidi was able hold his nerve at the last as England’s nerve deserted them.