cancel
Showing results for 
Search instead for 
Did you mean: 

Help Creating a third person platformer like Lucky's Tale

lukearmer
Honored Guest

I treated myself to the Quest 3 at Christmas, my first VR machine,  and it has blown me away. I'm 40 this year so seen practically everything in gaming, to me this is the biggest leap since the Snes to N64. 

The game that has impressed me the most is Lucky's Tale. It transports you into the 3d platform world, whilst still keeping video game controls at the heart, no gimmicks etc.  

Due to my admiration for this, especially the camera used on the game, I am wanting to delve back into creating games (I have done bits over the last 10 years), ultimately to make games for myself and son. 

In looking to recreate something like Luckys tale (again in terms of the camera, which follows you like a camera man is filming it, allowing you to just looking around with your head and take in the world) , what would be the best platform for me to use, Unreal or Unity?

In terms of programming, I would be much more comfortable to use visual scripting like blueprints, but ultimately I would like to use the engine that will be easiest to achieve a game like this. Also is there any difference in Performance for the Quest 3.

Any advice /help on which program to use would be much appreciated, along with any advice on how to replicate the camer, eg guides/youtube videos.

Thanks in advance

 

1 REPLY 1

I'm also a huge fan of 3rd person platformers in VR! The other obvious titles for you to play are the Moss games and Ven VR Adventure but Edge of Nowhere and Chronos (old PCVR games) are also well worth a look at.

At the end of the day, game engines are just tools and it's worth you trying both out to see what feels best to you.

Unreal comes with a lot 'out-of-the-box', and if blueprints are your thing you may be find it suits you best. Be warned that it's a complex beast which is arguably better suited to larger teams with multiple specialists with in-depth knowledge of the engine. It's harder to find support and tutorials and it tends to have fewer assets (especially good VR related ones) if you need a helping hand getting started. If you go down that route, https://www.youtube.com/@GDXR is well worth following for tutorials and his VR template.

Unity has fewer bells and whistles but a much larger community and more indie/solo VR developers (which means lots of tutorials, established frameworks, etc.). There are plenty of assets that you'll be able to lean on and I'd argue that it's probably the easiest to get started with even though you will need to get your hands dirty with C# at some point. I don't use visual scripting so have never tried Unity's version (or the third party ones) but there are some.

In general terms, creating a 3rd person perspective in VR, is relatively easy although there are some issues that Lucky's Tale hides due to its great design. The basics is that you would have a normal 3rd person character controller, moved from the player's joystick input. Add a follow script to the player XRRig with the character as the target, but only moving the player's positional transform. Don't force the rotation to look at the character (as you would in a normal non-VR game) as this should always be controlled by the player's actual head movement. You should offset the player so that they're positioned where you want it at a distance above the character. Here's a basic Unity C# script to give you a basic idea:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraFollowVR : MonoBehaviour
{
    private Transform myTransform;
    [SerializeField] private Transform target;
    [SerializeField] private Vector3 offset = new Vector3(0, 0, -5);

    [SerializeField] private float lerpSmooth = 10f;
	
	void Start()
	{
		myTransform = this.transform;
	}
	
	void LateUpdate()
	{
		if (target != null)
		{
			Vector3 destination = new Vector3(target.position.x+offset.x, myTransform.position.y, target.position.z+offset.z);
            myTransform.position = Vector3.Lerp (myTransform.position, destination, Time.deltaTime*lerpSmooth);
			
		}
	}
}

Keep in mind that moving the player in VR can make some people feel nauseous, so keep the character's movement smooth and not too fast. You want linear movement rather than acceleration as again, that can be a trigger for motion sickness. You might notice that offset.y isn't being used, the destination position vector remains at myTransform.position.y. That's because in this simple example I didn't want the camera to move up and down with the character as it jumps. If your level design has some elevation (i.e. you need the character to go up slopes but also jumps) you'll most likely want to code for that. For example, make the destination Vector3 track the character's y position, but only when the CharacterController is not jumping. This is what I mean by Lucky's Tale camera controller making this seem effortless. There's a great attention to detail that makes movement feel very comfortable. In VR development, the devil's in these kinds of  details but please don't let it put you off. Prototype and try it out in the headset, you'll be able to get very far very quickly and trying it out for yourself (and getting other people to try it too) will let you know what tweaks you need to make. Prototype and iterate. Try it in the headset regularly, not just the editor. You won't know if it works until you're actually in VR.

Have fun on your VR dev journey! And please don't hesitate to ask questions if you get stuck.