Unity3D - Sizuha/devdog GitHub Wiki

๋ฒ„์ „๊ด€๋ฆฌ

์™ธ๋ถ€ ๋ฒ„์ „ ์‹œ์Šคํ…œ์œผ๋กœ Unity3D ๋ฒ„์ „ ๊ด€๋ฆฌํ•˜๊ธฐ

  1. ๋ฉ”๋‰ด: Edit > Project Settings > Editor > (Inspector ์ฐฝ)
  2. ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ชจ๋“œ ๋ณ€๊ฒฝ: Version Control > Mode > Meta Files
  3. ์• ์…‹ ์ง๋ ฌํ™” ๋ชจ๋“œ ๋ณ€๊ฒฝ: Asset Serialization > Mode > Force Text

๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ํŒŒ์ผ ์ถ”๊ฐ€ํ•˜๊ธฐ

๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— .gitignore ํŒŒ์ผ์„ ์ƒ์„ฑ.

# Unity Folders
[Ll]ibrary/
[Tt]emp/
[Oo]bj/

# Autogenerated VS/MD solution and project files
*.csproj
*.unityproj
*.sln
*.suo
*.user
*.userprefs
*.pidb
*.booproj

# Unity3D Generated File On Crash Reports
sysinfo.txt

# Mac
.DS_Store

# Android
*.apk
*.obb

# Etc.
assetDatabase*
guidmapper
.~lock*
*.pyc
*.pyc.meta

์‚ฌ์šฉ๋ฒ•

Keys

  • Q,W,E,R: Hand, Move, Rotate, Resize
  • Option(Alt) : ํ™”๋ฉด ๊ฐ€์šด๋ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ทฐ๋ฅผ ํšŒ์ „.
  • Option + Command: Hand
  • ๋งˆ์šฐ์Šค ๊ฐ€์šด๋ฐ ๋ฒ„ํŠผ: Hand
  • Command + Shift + B: Build Settings
  • Command + B: Build

์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Scene ์ œ๊ฑฐ: Build Settings์—์„œ

์ง€์šฐ๋ ค๋Š” ์”ฌ์„ ํด๋ฆญํ•ด์„œ ์„ ํƒํ•œ ๋‹ค์Œ, ํ‚ค๋ณด๋“œ์˜ Deleteํ‚ค๋ฅผ ๋ˆ„๋ฅธ๋‹ค.

ํ™˜๊ฒฝ

Defines

ํ”Œ๋žซํผ

http://docs.unity3d.com/Manual/PlatformDependentCompilation.html

  • UNITY_EDITOR
  • UNITY_IOS
  • UNITY_ANDROID
  • UNITY_STANDALONE_OSX
  • UNITY_STANDALONE_WIN
  • UNITY_WEBPLAYER

์ฝ”๋“œ์—์„œ Define ์‹ฌ๋ณผ ๋ฆฌ์ŠคํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ

// ๅฎš็พฉใ•ใ‚Œใฆใ„ใ‚‹ใ‚ทใƒณใƒœใƒซใ‚’ๅ–ๅพ—ใ—ใพใ™
var defines = EditorUserBuildSettings.activeScriptCompilationDefines;

Runtime์—์„œ ํ™•์ธ

๋™์ž‘ ๋ชจ๋“œ

  • Application.isEditor

  • Application.isPlaying

  • Debug Build

if (Debug.isDebugBuild) {
    Debug.Log("Yay!");
}
else {
    Debug.Log("Booo...");
}

ํ”Œ๋žซํผ

ํ”Œ๋žซํผ ํ™•์ธ์€ Application.platform ํ™œ์šฉ.

public static string getOSName() {
  switch (Application.platform) {
    case RuntimePlatform.Android:
      return "android";

    case RuntimePlatform.IPhonePlayer:
      return "ios";

    default:
      return "other";
  }
}

์‹œ์Šคํ…œ ์–ธ์–ด

Application.systemLanguage ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

if (Application.systemLanguage == SystemLanguage.Korean) {
  // TODO ...
}

Garbage Collection

์“ฐ๋ ˆ๊ธฐ ์ˆ˜์ง‘ ์ง€์‹œ

System.GC.Collect();

ํ”Œ๋žซํผ๋ณ„ ๋ฒ„์ „ ํ™•์ธ

Editor ๋ชจ๋“œ์—์„œ ํ™•์ธ

// Android
int verCode = UnityEditor.PlayerSettings.Android.bundleVersionCode;

// ๊ธฐํƒ€.
string ver = UnityEditor.PlayerSettings.bundleVersion;

// iOS์—์„œ OS ๋ฐ sdk ๋ฒ„์ „ ํ™•์ธ
// UnityEditor.PlayerSettings.iOS ์ฐธ์กฐ.

Runtime์—์„œ ํ™•์ธ

๋Ÿฐํƒ€์ž„์—์„œ๋Š” UnityEditor ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค. ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์€ ๋„ค์ดํ‹ฐ๋ธŒ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ.

๊ทธ๋ž˜๋„, ์œ ๋‹ˆํ‹ฐ ์ฝ”๋“œ๋งŒ ๊ฐ€์ง€๊ณ ์„œ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ์•Œ์•„์•ผ ๋  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ ์œ ์šฉํ•  ๋“ฏ.

/* Assets/Editor/ ๊ฒฝ๋กœ์— ์œ„์น˜์‹œํ‚ฌ ๊ฒƒ. */

using UnityEngine;
using UnityEditor;
using System.IO;

[InitializeOnLoad]
public class BundleVersionChecker
{
  /// <summary>
  /// Class name to use when referencing from code.
  /// </summary>
  const string ClassName = "CurrentBundleVersion";
  
  const string TargetCodeFile = "Assets/Scripts/Config/" + ClassName + ".cs";
  
  static BundleVersionChecker () {
    string bundleVersion = PlayerSettings.bundleVersion;
    string lastVersion = CurrentBundleVersion.version;
    if (lastVersion != bundleVersion) {
      Debug.Log ("Found new bundle version " + bundleVersion + " replacing code from previous version " + lastVersion +" in file \"" + TargetCodeFile + "\"");
      CreateNewBuildVersionClassFile (bundleVersion);
    }
  }
  
  static string CreateNewBuildVersionClassFile (string bundleVersion) {
    using (StreamWriter writer = new StreamWriter (TargetCodeFile, false)) {
      try {
        string code = GenerateCode (bundleVersion);
        writer.WriteLine ("{0}", code);
      } catch (System.Exception ex) {
        string msg = " threw:\n" + ex.ToString ();
        Debug.LogError (msg);
        EditorUtility.DisplayDialog ("Error when trying to regenerate class", msg, "OK");
      }
    }
    return TargetCodeFile;
  }
  
  /// <summary>
  /// Regenerates (and replaces) the code for ClassName with new bundle version id.
  /// </summary>
  /// <returns>
  /// Code to write to file.
  /// </returns>
  /// <param name='bundleVersion'>
  /// New bundle version.
  /// </param>
  static string GenerateCode (string bundleVersion) {
    string code = "public static class " + ClassName + "\n{\n";
    code += System.String.Format ("\tpublic static readonly string version = \"{0}\";", bundleVersion);
    code += "\n}\n";
    return code;
  }
}

๋””๋ฐ”์ด์Šค ๊ณ ์œ  ID

SystemInfo.deviceUniqueIdentifier

Unity Project ๊ตฌ์กฐ

ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ

์ฐธ์กฐ: http://tsubakit1.hateblo.jp/entry/20131028/1382965930

Assets

์œ ๋‹ˆํ‹ฐ ํ”„๋กœ์ ํŠธ์—์„œ ์ฐธ์กฐ๋˜๋Š” ๋ชจ๋“  ์–ด์…‹ ์ž์›๋“ค์ด ์ด๊ณณ์— ๋“ค์–ด๊ฐ„๋‹ค.

Assets ๋””๋ ‰ํ† ๋ฆฌ ํ•˜์œ„์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน๋ณ„ํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.

  • Resources : ๊ฒŒ์ž„์—์„œ ๋™์ ์œผ๋กœ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค๋“ค. ํŒจํ‚ค์ง€ ๋นŒ๋“œ ์‹œ์— ๋ฐ˜๋“œ์‹œ ๋นŒ๋“œ์— ํ•จ๊ป˜ ํฌํ•จ๋œ๋‹ค.
  • Editor : ์œ ๋‹ˆํ‹ฐ ์—๋””ํ„ฐ ์ƒ์—์„œ๋งŒ ์ ์šฉ๋˜๊ณ , ์‹ค์ œ ๋นŒ๋“œ์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฃผ๋กœ ์—๋””ํ„ฐ์šฉ ํ™•์žฅ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค.
  • Plugins : ๋ง๊ทธ๋Œ€๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์šฉ ์ฝ”๋“œ ํ˜น์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(DLL ๋“ฑ)๋“ค์ด ์œ„์น˜ํ•˜๋Š” ๊ณณ. ๊ฐ ํ”Œ๋žซํผ๋ณ„๋กœ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.
    • Android
    • iOS
  • StreamingAssets : ๊ฒŒ์ž„ ๋‚ด์—์„œ OS์ƒ์˜ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์ฐธ์กฐ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค๋“ค์ด ์œ„์น˜ํ•˜๋Š” ๊ณณ. ๋‹น์—ฐํžˆ ๋นŒ๋“œ ํŒจํ‚ค์ง€์— ํฌํ•จ๋œ๋‹ค. Resources ๋””๋ ‰ํ† ๋ฆฌ์™€ ๋‹ค๋ฅธ ์ ์€ ํŒจํ‚ค์ง€ ์•ˆ์—์„œ ๋ฒˆ๋“ค๋กœ ๋ฌถ์ด์ง€ ์•Š๊ณ , ๊ฐ๊ฐ์ด ๊ฐœ๋ณ„ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ. ๋‹ค๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ Read Only ์ด๋‹ค.

๋นŒ๋“œ ํ›„ ํŒจํ‚ค์ง€์— ํฌํ•จ๋˜๋Š” ์š”์†Œ๋“ค

์œ ๋‹ˆํ‹ฐ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ์–ด์…‹์ด ํฌํ•จ๋˜์„œ ๋นŒ๋“œ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

  1. ์šฐ์„  Assets ๋””๋ ‰ํ† ๋ฆฌ ์ดํ•˜์˜ ๋‚ด์šฉ๋ฌผ๋“ค์ด ํŒจํ‚ค์ง• ๋Œ€์ƒ๋“ค์ด๋‹ค.
  2. ๋Ÿฐํƒ€์ž„ ๋•Œ ์ฐธ์กฐ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์–ด์…‹๋“ค์€ ๋ฌด์กฐ๊ฑด ํŒจํ‚ค์ง•์— ํฌํ•จ๋œ๋‹ค.
    1. Resources ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ๋œ ๋””๋ ‰ํ† ๋ฆฌ ์ดํ•˜์˜ ๋‚ด์šฉ๋ฌผ์€ ๋ฌด์กฐ๊ฑด ํŒจํ‚ค์ง• ๋œ๋‹ค.
    2. StreamingAssets๋„ ๋งˆ์ฐฌ๊ฐ€์ง€.
  3. ๋™์ ์œผ๋กœ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๋ฆฌ์†Œ์Šค(๊ทธ๋ž˜ํ”ฝ, ์‚ฌ์šด๋“œ ๋“ฑ) ์ค‘์—, ์‹ค์ œ๋กœ ์–ด๋””์—์„œ๋„ ์‚ฌ์šฉ๋œ ์ ์ด ์—†์œผ๋ฉด ํŒจํ‚ค์ง•์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.
    1. ์ตœ์ ํ™” ์˜ต์…˜์ด ์ผœ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹นํ•˜๋Š” ๋“ฏ.
  4. Editor ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋œ ๋””๋ ‰ํ† ๋ฆฌ ์ดํ•˜์˜ ๋‚ด์šฉ๋ฌผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒจํ‚ค์ง• ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋‹ค๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ˆ์™ธ๊ฐ€ ์žˆ๋‹ค.
    1. Resources ๋””๋ ‰ํ† ๋ฆฌ ์ดํ•˜์— Editor๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์ œ์™ธ.
    2. ์–ด๋”˜๊ฐ€์—์„œ ์ •์ ์œผ๋กœ ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด, Editor ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ๋“ค์–ด์žˆ์–ด๋„ ๋‹น์—ฐํžˆ ํŒจํ‚ค์ง•์— ํฌํ•จ๋œ๋‹ค.

์ด ๊ทœ์น™๋“ค์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด, ๋นŒ๋“œ ํ›„ ํŒจํ‚ค์ง€์˜ ์šฉ๋Ÿ‰์„ ์ž˜ ์ปจํŠธ๋กค ํ•  ์ˆ˜ ์žˆ๋‹ค.

Script

Unity Script ์ฐธ์กฐ.

๊ฒŒ์ž„ ๊ฐœ๋ฐœ

ํ”Œ๋žซํผ ์—ฐ๋™

Unity ํ”Œ๋žซํผ ์—ฐ๋™ ์ฐธ์กฐ.

Build

๋นŒ๋“œ ์ž๋™ํ™”

Unity ๋นŒ๋“œ ์ž๋™ํ™” ์ฐธ์กฐ.

Asset Bundle

์–ด์…‹ ๋ฒˆ๋“ค ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ Unity Asset Bundle ์ฐธ์กฐ.

์‚ฝ์งˆ

Code Strip ์˜ต์…˜์—์„œ ์ฃผ์˜์‚ฌํ•ญ

Code Stripping ์‹œ์— C#์—์„œ ์ œ๊ณตํ•˜๋Š” Security๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์ œ๋Œ€๋กœ ๋™์ž‘์„ ์•ˆ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
Security ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด, Stripping ์˜ต์…˜์„ ํ•œ๋ฒˆ ๊บผ ๋ณผ ๊ฒƒ.

Jar ๋ฆฌ์†Œ์Šค ๋ฌธ์ œ

AdFresca ๋“ฑ์˜ jar ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•ด์„œ ์‚ฌ์šฉํ•  ๋•Œ, ์ด๋“ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ jar์— asset ๋ฆฌ์†Œ์Šค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ด๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ jar ์••์ถ•์„ ํ’€์–ด์„œ ๊ด€๋ จ ๋ฆฌ์†Œ์Šค๋ฅผ ์œ ๋‹ˆํ‹ฐ ํ”„๋กœ์ ํŠธ Plugins/Android/assets ๊ฒฝ๋กœ์— ๋ณต์‚ฌํ•ด์•ผ ํ•จ.

โ€ป jar ๋Œ€์‹  aar ์‚ฌ์šฉ์„ ๊ถŒํ•จ.

InvalidOperationException: Operation is not valid due to the current state of the object

  1. Layout ๋ฉ”๋‰ด์—์„œ ๋ ˆ์ด์•„์›ƒ์„ ๋””ํดํŠธ๋กœ ์„ค์ •.
  2. Layout ๋ฉ”๋‰ด์—์„œ ๋ ˆ์ด์•„์›ƒ ๊ณต์žฅ ์ดˆ๊ธฐํ™” ์ง„ํ–‰.
  3. Unity ์žฌ์‹œ์ž‘
โš ๏ธ **GitHub.com Fallback** โš ๏ธ