# 스크립트 점검

> View and edit the fields of your C# scripts in the Inspector window.

프로젝트 창에서 스크립트 에셋을 선택하면 인스펙터에 해당 스크립트 에셋에 속하는 [어셈블리](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/script-compile-order-folders.md) 이름과 콘텐츠 미리 보기를 비롯한 몇 가지 기본 정보가 표시됩니다.

**참고:** 인스펙터는 스크립트의 콘텐츠를 표시하지만 인스펙터 창에서 콘텐츠를 편집할 수 없습니다.


**예시 스크립트를 표시하는 스크립트 인스펙터:**
![](/api/media?file=/engine/6000.0/media/images/ScriptInspector.png)

스크립트 인스펙터에는 **Open** 및 **Execution Order** 버튼 두 개가 표시됩니다.

**Open**은 프로젝트 창에서 스크립트를 더블 클릭하여 현재 설정된 외부 스크립트 편집기에서 스크립트를 여는 것과 동일한 기능을 수행합니다. [Preferences 창의 External Tools 섹션](/engine/6000.0/manual/unity-editor/editor-features/preferences.md#external-tools)에서 Unity가 스크립트를 열 때 사용하는 외부 에디터를 설정할 수 있습니다.

**Execution Order** 버튼을 누르면 Unity가 스크립트를 실행하는 순서를 설정할 수 있는 [Project Settings 창의 Script Execution Order 섹션](/engine/6000.0/manual/unity-editor/editor-features/comp-manager-group/class-mono-manager.md)이 열립니다.

## 인스펙터 창의 스크립트 컴포넌트##script-components-in-the-inspector-window

모든 [MonoBehaviour](/engine/6000.0/manual/scripting/get-started/fundamental-unity-types/class-mono-behaviour.md) 스크립트는 다음과 같이 [컴포넌트](/engine/6000.0/manual/working-in-unity/working-with-gameobjects/unity-components/components.md)로 사용할 수 있습니다.

* 스크립트를 [게임 오브젝트](/engine/6000.0/manual/working-in-unity/working-with-gameobjects/game-objects.md)에 연결할 수 있습니다.
* 스크립트의 프로퍼티 및 값을 [인스펙터 창](/engine/6000.0/manual/unity-editor/using-the-editor/using-the-inspector.md)에서 편집할 수 있습니다.

아래 예시 코드는 `myName`이라는 공개 필드를 선언합니다. 씬의 게임 오브젝트에 이 스크립트를 추가하면 필드가 **인스펙터** 창에서 **My Name**이라는 레이블이 지정된 필드로 표시됩니다. 스크립트에 선언된 `none`의 기본값은 필드에 입력하여 변경할 수 있는 **인스펙터** 창의 기본값이 됩니다.

```
using UnityEngine;
using System.Collections;

public class MainPlayer : MonoBehaviour 
{
	public string myName = "none";
	
	// Use this for initialization
	void Start () 
	{
		Debug.Log("I am alive and my name is " + myName);
	}
}
```

스크립트 컴포넌트를 연결하는 각 게임 오브젝트는 필드에 고유한 값을 가질 수 있습니다.


**인스펙터 창에서 편집할 수 있는 공개 문자열 필드:**
![](/api/media?file=/engine/6000.0/media/images/EditingVarInspector.png)

필드 이름은 [필드 이름을 레이블로 전환](/engine/6000.0/manual/scripting/get-started/inspecting-scripts.md#field-name-label-conversion)에 설명된 규칙에 따라 **인스펙터** 창 레이블로 전환됩니다. 하지만 이러한 변경 사항은 표시 목적으로만 적용됩니다. 코드에서는 항상 필드 이름을 사용해야 합니다.

**인스펙터** 창에서 **My Name** 값을 편집하고 플레이 버튼을 누르면 콘솔 메시지에 입력한 텍스트가 포함되어야 합니다.


**Frame:**
![](/api/media?file=/engine/6000.0/media/images/DebugLogMessage.png)

## 공개 및 비공개 필드##public-and-private-fields

모든 `public` 필드는 기본적으로 **인스펙터** 창에서 편집할 수 있습니다. public 변수가 **인스펙터 창**에 표시되지 않도록 하려면 [HideInInspector](/engine/6000.0/script-reference/unity-engine/hide-in-inspector.md) 속성을 추가합니다. **인스펙터** 창에서 `private` 필드를 편집할 수 있도록 하려면 [SerializeField](/engine/6000.0/script-reference/unity-engine/serialize-field.md) 속성을 추가합니다.

**참고**: [플레이 모드](/engine/6000.0/manual/scripting/compilation-and-code-reload/code-reloading-editor/configurable-enter-play-mode.md)에서 실행하는 동안 에디터에서 스크립트 필드의 값을 변경할 수 있습니다. 이렇게 하면 중지하거나 다시 시작하지 않고도 변경 사항의 효과를 직접 확인할 수 있습니다. 하지만 플레이 모드를 종료하면 필드의 값이 플레이 모드를 시작하기 전의 값으로 초기화됩니다.

## 오브젝트 레퍼런스 필드##object-reference-fields

`bool`, `string`, `int` 같은 간단한 [빌트인 C# 유형](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-types#built-in-value-types) 외에도 유형이 [`UnityEngine.Object`](/engine/6000.0/manual/scripting/get-started/fundamental-unity-types/class-object.md)에서 상속되는 필드를 **인스펙터** 창에서 편집할 수도 있습니다. 여기에는 모든 빌트인 컴포넌트 유형(예: [Transform](/engine/6000.0/manual/working-in-unity/working-with-gameobjects/gameobject-fundamentals/class-transform.md), [AudioSource](/engine/6000.0/manual/audio/reference/class-audio-source.md), [Camera](/engine/6000.0/manual/working-in-unity/cameras/birp/class-camera.md), [Light](/engine/6000.0/manual/lighting-overview/lighting-birp/class-light.md)), 자체 MonoBehaviour 스크립트 유형, 여러 에셋 유형이 포함됩니다.

스크립팅된 컴포넌트에서 Unity 에디터 드래그 앤 드롭 시스템을 사용할 수 있습니다. 예를 들어 스크립트에서 공개 `Transform` 필드를 생성하여 하나의 게임 오브젝트에 추가하면 **인스펙터** 창의 해당 필드에 다른 게임 오브젝트를 드래그하여 해당 게임 오브젝트의 Transform 컴포넌트에 대한 레퍼런스를 설정할 수 있습니다. 이 컴포넌트는 스크립트의 런타임 시점에 액세스할 수 있습니다.

예를 들어 이 `Follow` 스크립트는 하나의 게임 오브젝트가 다른 게임 오브젝트를 따르도록 합니다.

```
using UnityEngine;

public class Follow : MonoBehaviour
{
    public Transform objectToFollow;
    public float followSpeed = 1;

    void Update()
    {
		// calculate the distance between this object and the target object
		// and move a small portion of that distance each frame:

        var delta = objectToFollow.position - transform.position;
        transform.position += delta * Time.deltaTime * followSpeed;
    }
}
```

이 스크립트에는 에디터에 할당 가능한 필드로 표시되는 `Transform` 유형의 공개 필드가 있습니다. 다른 게임 오브젝트를 계층 창에서 이 필드로 드래그 앤 드롭할 수 있으며, 에디터는 드롭한 해당 게임 오브젝트에 연결된 Transform 컴포넌트에 레퍼런스를 할당합니다.

아래 스크린샷에서는 스크립트가 구체 게임 오브젝트에 배치되고 Cube를 계층 구조에서 **Object To Follow** 필드로 드래그 앤 드롭합니다.


**게임 오브젝트가 할당된 공개 트랜스폼 필드. 여기서 스크립트는 Sphere(현재 선택됨)에 있으며, Cube는 계층 구조에서 구체의 Object To Follow 필드로 드래그 앤 드롭되었습니다.:**
![](/api/media?file=/engine/6000.0/media/images/UnityObjectInspectorField.png)

## 기본 오브젝트 레퍼런스##default-object-references

MonoBehaviour 스크립트에서 [에디터에 할당](/engine/6000.0/manual/scripting/get-started/inspecting-scripts.md#object-reference-fields)할 수 있는 공개 [오브젝트](/engine/6000.0/script-reference/unity-engine/object.md) 필드를 정의하는 경우 이러한 필드에 대한 기본 레퍼런스를 설정할 수 있습니다. 프로젝트 창에서 스크립트 에셋을 선택하면 인스펙터에 기본 레퍼런스 필드가 표시됩니다.


**3개의 AudioClip 필드가 있는 MonoBehaviour 스크립트. 이 필드의 기본 레퍼런스는 설정되지 않은 상태로 표시됩니다.:**
![](/api/media?file=/engine/6000.0/media/images/MonoBehaviourDefaultReferences.png)

위 예시에는 기본 레퍼런스가 할당되지 않은 3개의 공개 오디오 클립 필드가 있습니다. 오디오 클립을 각 AudioClip 기본 레퍼런스 필드에 할당할 수 있습니다.

기본 레퍼런스를 할당하면 MonoBehaviour를 게임 오브젝트에 컴포넌트로 추가하거나 게임 오브젝트의 기존 MonoBehaviour 인스턴스를 기본값으로 초기화할 때 적용됩니다.

**참고:** 게임 오브젝트의 MonoBehaviour 인스턴스에 대한 레퍼런스와 기본 레퍼런스는 지속적으로 연결되어 있지 않습니다. 따라서 기본 레퍼런스를 변경하면 기존 게임 오브젝트에서 자동으로 업데이트되지 않습니다.

`UnityEngine.Object`에서 상속받지 않는 다른 유형의 [인스펙터 편집 가능한 필드](/engine/6000.0/manual/scripting/get-started/inspecting-scripts.md)(예: 공개 문자열 또는 int 필드)에는 인스펙터에 기본 필드가 없습니다. 대신 스크립트 자체에서 기본값을 가져옵니다.

## 필드 이름을 레이블로 전환##field-name-to-label-conversion

Unity는 일련의 규칙에 따라 **인스펙터** 창에서 C# 필드 이름을 레이블로 전환합니다. 예를 들어 위 예시에서는 변수 이름이 `myName`에서 **My Name**으로, `objectToFollow`에서 **Object To Follow**로 전환되었습니다. 규칙은 다음과 같습니다.

* 첫 글자를 대문자로 표기
* 소문자와 대문자 사이에 공백 추가
* 다음 단어의 시작 부분에 있는 머리글자어와 대문자 사이에 공백 추가
* `m_` 접두사 제거
* `k` 접두사 제거
* `_` 접두사 제거

`iPad` 또는 `x64` 같이 이러한 규칙이 적용되지 않는 몇 가지 특별한 사례도 있습니다.

## 추가 리소스##additional-resources

* [컴포넌트 소개](/engine/6000.0/manual/working-in-unity/working-with-gameobjects/unity-components/components.md)
* [인스펙터 창](/engine/6000.0/manual/unity-editor/using-the-editor/using-the-inspector.md)
