Project Settings

Unity Doc on Project Settings

Here we briefly go through most relevant project settings. Check the link above for comprehensive documentation.

Borodar

Project Settings - Audio

Adaptive Performance

Audio

Here the most interesting settings(unless you're working on an audio based game) are the Spatializer and Ambisonic Decoder Plugins. Depending on the platform you may want or need to change this.
Unity documentation

There are various spatializers you can use if you're not using Oculus:
Unity documentation

Project Settings - Audio

Editor

Settings about editor use - worth getting familiar!
Below are some important ones.

Project Settings - Editor 1 Switch between 2D and 3D modes. With VR-projects we always use 3D-mode.

Project Settings - Editor 2 Prefab editing background environment.

Project Settings - Editor 3 If you're working on linux, switch this.

Project Settings - Editor 4 These settings can make play-mode happen faster.

Project Settings - Editor 5 How does Unity handle file naming? Very useful if you're following a certain naming scheme.

Graphics

Select wanted Scriptable Render Pipeline-settings file.

Input Manager

Old input system settings.

Memory Settings

Oculus

Really nice checklist for decent standalone VR development settings.

Package Manager

Project Settings - Package Manager If you don't see all the packages you want in package manager, you might need to enable pre-release packages. The preview packages are often completely usable, since Unity often keeps packages as preview for a long time, such as entities was preview for four years or so, but it was being hyped and talked about by unity - and indeed was quite usable.

Physics

Project Settings - Physics_1 These settings tweak critical aspects of physics system. While they are most times fine by default values, if you're working on physics based games you should play around and read to learn what these do.

If above settings are rarely tweaked, the Layer Collision Matrix is used very often, especially when starting a new project and creating new layers.
Project Settings - Physics_2
Simply put: which layers can collide with which other layers. Well done collision matrix can save a ton of needless physics calculations.

Player

Player settings are very important for the inner workings of the built app. The "Other settings" is the most relevant of the tabs, the three top tabs might be added later.
Project Settings - Player 1 I recommend looking into color space in general, but for VR we'll use linear with Vulkan and sRGB. With some projects Vulkan might not work for various reasons, such as what Oculus package is used, do you have URP or built-in rendering pipeline, do you use depth texture, or stencil, etc. Unfortunately Unity has been fairly inconsistent with Vulkan support:
This is why we're testing Unity 2022, supposedly it should fix some of these somewhat random issues with Vulkan and VR performance in general.
What does Vulkan matter? In short, it allows for multiple performance boosts for VR rendering. More on this at XR Plug-in management.

Project Settings - Player 2
Use ASTC or ETC2 texture compressions.

Project Settings - Player 3
Keep version numbering as you build the app. Bundle version code is an integer number, basically your Version number times 100 and it is used by stores and alike to differentiate between builds.
Scripting backend can be either IL2CPP or Mono. Both work fine, but IL2CPP is recommended for VR because of faster loading times.
The main difference between the two is that IL2CPP compiles whole build when you build, while Mono compiles parts of the build at runtime as you start playing.
Use ARM64 and "Both" for Active input handling.

Project Settings - Player 4
Scripting Define Symbols are simple, but extremely important: These strings define which set parts of scripts are active.
Basically this means that programmer can make string-based toggles for whole sections of code, so for example above you can see VDINTEGRATION_OCULUS:
This scripting define will toggle on parts of our custom scripts that should only be running when using Oculus platform.
Using scripting defines in code looks like this:
#if VDINTEGRATION_OCULUS --some code-- #endif

Project Settings - Player 5
Publishing settings allow you to create encryption key for your project. Notice that once you create one, you will need to set the passwords every time you open Unity and want to build the project, so you should only create the keystore once you are trying to release the build.
Important! Save all the keystore information, because you won't be able to update a released build without that information!

Preset Manager

Project Settings - Preset Manager Any component can save preset settings.

Here we have saved some audio and image presets and set up a folder-based filtering, so when we import files to those folders, they get different presets automatically.
We are expanding the preset system a lot in the future.

Quality

Project Settings - Quality
Quality settings in addition to the set render pipeline asset controls the graphics settings of the project.
Read Unity documentation on both.
Unity documentation

Scene Template

Script Execution Order

Project Settings - Script Execution Order
As it says, this list controls the order in which scripts are executed.
This usually doesn't need to be touched, but if you run into a scripting problem where some frame-specific actions don't execute in the correct order, this could solve it.

Services

Tags and Layers

Tags and layers are basic development features. Basically you can use layers with layer collision matrix(in project settings->physics) to disable/enable collisions between layers.
Tags can be used for many things, but most common one is to check tag on trigger/collision to trigger an unity event.
The tags in the template project include lot of redundancy. We're going to clean up the tag list at some point.

TextMesh Pro

Change default text mesh pro settings.

Time

Project Settings - Time
Default time settings are usually fine.
Time Scale allows for slow motion.
Timesteps can be used to tweak physics accuracy with high performance impact.

VFX

XR Plug-In Management

Project Settings - XR 1
Select the platform and the XR plugin.

Project Settings - XR 2
Select XR plugin settings. Notice that there are a lot of Vulkan-specific optimisations enabled.
If you need to use OpenGLES3, you need to disable all of those, which will hurt the performance.

If you run into a problem where some effects render only on one eye of VR HMD, it indicates there's a problem with the multiview(used to be called single instance rendering).
Using multiview gives a big CPU performance boost compared to multi pass.
Steps you can try if you run into such problem:
- Update Unity to the latest 2021.x.xx - Update XR Management - Update Oculus XR plugin - Update Oculus Integration asset if used - Enable depth from scripting render pipeline file.(note that this may create other problems and/or performance hit.