2013-07-25 25 views
0

現在我的項目中有2個類。
我想用方法類2類1
而這種代碼C#Unity3d中錯誤代碼c#oop的位置

1級

public class controlBuilding : MonoBehaviour 
{ 
    ScaleModel cScale = new ScaleModel(); 

    public void Start() 
    { 

    } 

    public void Update() 
    { 
     cScale.touchScaleB1(); 
    } 

    public void OnGUI() 
    { 

    } 
} 

2級

public class ScaleModel : MonoBehaviour 
{ 
    public void touchScaleB1() 
    { 
     if (Input.touchCount >= 2) 
     { 
      Touch touch1 = Input.touches[0]; 
      Touch touch2 = Input.touches[1]; 

      if (touch1.phase == TouchPhase.Moved || touch2.phase == TouchPhase.Moved) 
      { 
       float pinchDistance = Vector2.Distance(touch1.position, touch2.position); 
       float prevDistance = Vector2.Distance(touch1.position - touch1.deltaPosition, 
                 touch2.position - touch2.deltaPosition); 
       float pinchDistanceDelta = pinchDistance - prevDistance; 

       if (pinchDistanceDelta > 0) 
       { 
        float mScaleFactor; 
        mScaleFactor = b1_floor1dae.transform.localScale.x; 
        mScaleFactor += 0.0004f; 
        b1_floor1dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor); 
        b1_floor2dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor); 
        b1_floor3dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor); 
        b1_floor4dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor); 
        b1_floorTop.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor); 
        b1_other.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor); 
       } 
       else if (pinchDistanceDelta < 0) 
       { 
        float mScaleFactor; 
        mScaleFactor = b1_floor1dae.transform.localScale.x; 
        mScaleFactor -= 0.0004f; 
        b1_floor1dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor); 
        b1_floor2dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor); 
        b1_floor3dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor); 
        b1_floor4dae.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor); 
        b1_floorTop.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor); 
        b1_other.transform.localScale = new Vector3(mScaleFactor, mScaleFactor, mScaleFactor); 
       } 
      } 
     } 
    } 
} 

爲什麼我摸上屏幕不是事件?代碼錯在哪裏?

對不起。我英語不好。

非常感謝您的回答。

+1

派生自Monobehaviour的類不應該用new來實例化。而是使用[Instantiate](http://docs.unity3d.com/Documentation/ScriptReference/Object.Instantiate.html)。你有沒有嘗試添加一些調試來驗證問題是Input.touches? – Jerdak

回答

1

如果你想在ScaleModel是唯一一個工具類: 不要MonoBehaviour繼承它。因此,您可以使用「新」關鍵字作爲常規課程來創建它。

如果你想在ScaleModel是一個遊戲對象組件: 你的兩個腳本添加到同一個遊戲對象,改變你這樣的一流... (通過調用GetComponent,您正在搜索的ScaleModel組件對同一個遊戲對象)

public class controlBuilding : MonoBehaviour 
{ 
    ScaleModel cScale; 

    public void Start() 
    { 
     cScale = GetComponent<ScaleModel>(); 
    } 

    public void Update() 
    { 
     cScale.touchScaleB1(); 
    } 

    public void OnGUI() 
    { 

    } 
} 
+0

我試着從這個code.It不工作 –

+0

你看到什麼錯誤?你應該提供詳細信息,如果你需要幫助:) – Xtro

+0

當我捏縮放和縮小不工作function touchScaleB1.But當我把touchScaleB1代碼在「公共無效更新」工作 –