2014-11-15 1 views
0

스크립트 시작 부분에서 전화 할 때 전화 번호를 변경하지 않는 방법을 궁금합니다.고정 번호 사용

그럼 Awake() 또는 Start()에서 정의한 후에 어떻게 번호를 고칠 수 있습니까? 함수조차도 그것을 변경할 수 없습니다.

2 또는 5 또는 100 또는 심지어 1000000과 같은 명확한 숫자를 제공하고 싶지 않습니다. Awake() 또는 Start() 함수에서 변경할 수 있도록 변수를 만들고 싶습니다. 그리고 전체 스크립트에서 고정되어 있어야합니다.

그럴 수 있습니까?

+1

.aspx) 필드. –

+0

질문에 약간의 결함이 있습니다. 메서드 "Awake"또는 "Start"를 사용하여 메서드로 설정할 수없는 필드를 설정하려고합니다. 생성자에서 설정하고자한다면, readonly를 사용하거나, 빌드 타임에 정의하고 싶다면 const로 만들 수있다. 그러나 메소드에서 설정하려는 경우 일반 쓰기 가능 필드 여야합니다. – jt000

답변

3

짧은 대답은 당신이 설명하는 방법으로이 작업을 수행 할 수 없다, 당신이 할 수있는 가장 가까운 것은 읽기 전용 필드와 당신이 절대적으로 필요한 경우는 다음과 같은 작업을 수행 할 수

public class Foo 
    { 
     public readonly int myInt; 
     public Foo() 
     { 
      myInt = 1; 
     } 

     public void doBad() 
     { 
      myInt = 1213; // Not allowed 
     } 
    } 

생성자를 사용하는 것입니다, 그러나이 패턴은 불안정한 패턴이며 시작에 의해서만 설정되었음을 보증하지 않습니다. 너는 이것을하지 말아야한다 !!!!!

public class Foo2{ 
    private bool calledOnce = false; 
    private int _myInt; 
    public readonly int myInt{ 
     get {return _myInt;} 
     set { 
      if (calledOnce){ 
       throw new Exception("Not allowed"); 
      }else{ 
       _myInt = value; 
       calledOnce = true; 
      } 
     } 
    } 

    public void start() 
    { 
     myInt = 1213; 
    } 

    public void doBad() 
    { 
     myInt = 1213; // will throw 
    } 

는 경우에는 큰 대문자는 두 번째 것은 매우 가난한 생각하고, 명확하지 있었고, 코드에 많은 문제를 반영하고, 가능성이 이상한 버그의 원천이 될 것이다, 그러나 한 번 파란 달에는 아주 이상한 문제를 다루는 끔찍한 이상한 코드가 필요하지만, 나는 이것이 그 경우가 아닌 것으로 짐작하고있다. 전체 문제를 재고하고 실제 요구 사항이 무엇인지 더 잘 이해하는 것이 가장 좋습니다.

+1

후자의 옵션이 바람직한 경우가 절대적으로 * 있어서는 안됩니다. OP가 모든 코드를 직접 작성한다면 함정을 코딩하지 않도록 현명한 디자인 결정을 내릴 수 있습니다. –

+0

첫 번째 예는 Unity3D에서 너무 잘 작동하지 않습니다. – FunctionR

0

Awake() 또는 Start()에 설정하려는 경우 해당 논리에 따라 원하는 것은 상수 변수입니다. 이 두 함수에 매개 변수를 전달할 수 없으므로 해당 논리에 따라 변수가 일정해야하며 컴파일시에 값이 알려 져야합니다.

const int WHAT_WANT = 11011; 

또한 클래스가 MonoBehaviour 일 때 생성자를 사용하는 것은 안전하지 않습니다. 그러므로 readonly은 끔찍한 생각입니다.

(PS 깨어하고 시작 영업 이익은 MonoBehaviour를 사용하는 의미) 당신은 아마 그것을 [`readonly`] (http://msdn.microsoft.com/en-us/library/acdd6hb7을 만들 필요가

관련 문제