Bird
Raised Fist0
Unityframework~5 mins

Platform-specific settings in Unity

Choose your learning style10 modes available
Introduction

Platform-specific settings let you change how your game works on different devices. This helps your game run well everywhere.

You want different screen resolutions for mobile and desktop.
You need to use special controls on a console but not on PC.
You want to enable or disable features depending on the device.
You want to set different graphics quality for phones and computers.
You want to handle file paths differently on Windows and Android.
Syntax
Unity
using UnityEngine;

#if UNITY_ANDROID
    // Android-specific code here
#elif UNITY_IOS
    // iOS-specific code here
#else
    // Code for other platforms
#endif

Use #if directives to include code only for certain platforms.

Unity defines many platform symbols like UNITY_ANDROID, UNITY_IOS, UNITY_STANDALONE_WIN, etc.

Examples
This example prints a message depending on the platform the game runs on.
Unity
using UnityEngine;

void Start() {
#if UNITY_ANDROID
    Debug.Log("Running on Android");
#elif UNITY_IOS
    Debug.Log("Running on iOS");
#else
    Debug.Log("Running on another platform");
#endif
}
This example sets different graphics quality levels for Windows and Android.
Unity
using UnityEngine;

void SetupGraphics() {
#if UNITY_STANDALONE_WIN
    QualitySettings.SetQualityLevel(5); // High quality on Windows
#elif UNITY_ANDROID
    QualitySettings.SetQualityLevel(2); // Lower quality on Android
#endif
}
Sample Program

This script prints a message when the game starts, telling you which platform it is running on. It helps you test platform-specific code easily.

Unity
using UnityEngine;

public class PlatformChecker : MonoBehaviour {
    void Start() {
#if UNITY_EDITOR
        Debug.Log("Running inside Unity Editor");
#elif UNITY_STANDALONE_WIN
        Debug.Log("Running on Windows standalone");
#elif UNITY_ANDROID
        Debug.Log("Running on Android device");
#else
        Debug.Log("Running on some other platform");
#endif
    }
}
OutputSuccess
Important Notes

Platform symbols are set automatically by Unity based on the build target.

You can also set platform-specific settings in Unity's Build Settings and Player Settings windows.

Use platform-specific code carefully to avoid errors on unsupported platforms.

Summary

Platform-specific settings help your game work well on different devices.

Use #if directives with Unity platform symbols to write platform-specific code.

Test your game on each platform to make sure the settings work as expected.

Practice

(1/5)
1. What is the main purpose of using platform-specific settings in Unity?
easy
A. To disable all graphics features
B. To increase the game's file size
C. To make the game work well on different devices
D. To make the game run only on Windows

Solution

  1. Step 1: Understand platform-specific settings

    Platform-specific settings allow customizing game behavior for different devices.
  2. Step 2: Identify the main goal

    The goal is to ensure the game works well on all targeted platforms.
  3. Final Answer:

    To make the game work well on different devices -> Option C
  4. Quick Check:

    Platform-specific settings = device compatibility [OK]
Hint: Think about device compatibility and performance [OK]
Common Mistakes:
  • Confusing platform-specific settings with increasing file size
  • Assuming settings limit the game to one platform
  • Believing settings disable features globally
2. Which of the following is the correct way to write platform-specific code for Android in Unity?
easy
A. #if UNITY_ANDROID // Android code #endif
B. #if ANDROID // Android code #endif
C. #if PLATFORM_ANDROID // Android code #endif
D. #if UNITY_MOBILE // Android code #endif

Solution

  1. Step 1: Recall Unity platform symbols

    Unity uses symbols like UNITY_ANDROID for Android platform checks.
  2. Step 2: Match the correct syntax

    #if UNITY_ANDROID is the correct directive for Android-specific code.
  3. Final Answer:

    #if UNITY_ANDROID // Android code #endif -> Option A
  4. Quick Check:

    Use UNITY_ANDROID for Android platform [OK]
Hint: Use UNITY_ prefix for platform symbols [OK]
Common Mistakes:
  • Using incorrect symbols like ANDROID or PLATFORM_ANDROID
  • Assuming UNITY_MOBILE covers Android specifically
  • Missing #endif to close the directive
3. What will be the output when running this Unity C# code on iOS platform?
#if UNITY_IOS
Console.WriteLine("Running on iOS");
#else
Console.WriteLine("Running on other platform");
#endif
medium
A. Running on other platform
B. No output
C. Compilation error
D. Running on iOS

Solution

  1. Step 1: Check platform directive

    The code uses #if UNITY_IOS, which is true on iOS platform.
  2. Step 2: Determine executed code

    Since UNITY_IOS is defined, it prints "Running on iOS".
  3. Final Answer:

    Running on iOS -> Option D
  4. Quick Check:

    UNITY_IOS true prints iOS message [OK]
Hint: Match platform symbol with current device [OK]
Common Mistakes:
  • Confusing UNITY_IOS with UNITY_IPHONE
  • Expecting else block to run on iOS
  • Thinking code causes compilation error
4. Identify the error in this Unity C# code snippet for platform-specific compilation:
#if UNITY_STANDALONE
Debug.Log("Standalone platform");
#else
Debug.Log("Other platform");
medium
A. Missing #endif to close the #if directive
B. Wrong platform symbol UNITY_STANDALONE
C. Debug.Log cannot be used in platform directives
D. No error, code is correct

Solution

  1. Step 1: Check #if directive syntax

    The code starts with #if but does not have a matching #endif.
  2. Step 2: Understand preprocessor rules

    Every #if must be closed with #endif to avoid compilation errors.
  3. Final Answer:

    Missing #endif to close the #if directive -> Option A
  4. Quick Check:

    #if must end with #endif [OK]
Hint: Always close #if with #endif [OK]
Common Mistakes:
  • Assuming UNITY_STANDALONE is invalid
  • Thinking Debug.Log is disallowed inside #if
  • Ignoring missing #endif causes errors
5. You want to write code that runs only on Windows or macOS but not on mobile platforms. Which directive correctly achieves this in Unity?
hard
A. #if UNITY_STANDALONE // code #endif
B. #if UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX // code #endif
C. #if UNITY_ANDROID || UNITY_IOS // code #endif
D. #if UNITY_MOBILE // code #endif

Solution

  1. Step 1: Identify platforms to include

    Windows and macOS correspond to UNITY_STANDALONE_WIN and UNITY_STANDALONE_OSX.
  2. Step 2: Combine platform symbols correctly

    Use logical OR (||) to include both platforms in one directive.
  3. Final Answer:

    #if UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX // code #endif -> Option B
  4. Quick Check:

    Use || to combine Windows and macOS platforms [OK]
Hint: Use || to combine multiple platforms [OK]
Common Mistakes:
  • Using UNITY_STANDALONE alone includes all standalone platforms
  • Confusing mobile symbols with desktop platforms
  • Using && instead of || for platform combination
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard