2016-04-03 17 views
0

私はこのスクリプトを使用して、ユーザーが文字をタッチしたときに実行時にSelectMoveスクリプトを追加します。前に追加したゲームオブジェクトのコンポーネントを削除する

public GameObject target; 

    void Start() { 
    } 

    // Update is called once per frame 
    void Update() { 
     if(Input.touchCount > 0 || Input.GetTouch(0).phase == TouchPhase.Began){ 
      ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); 

      Debug.DrawRay(ray.origin,ray.direction * 20,Color.red); 

      if(Physics.Raycast(ray, out hit,Mathf.Infinity)){ 
       Debug.Log(hit.transform.gameObject.name); 


       target = hit.transform.gameObject; 
       //Destroy(hit.transform.gameObject); 
       selectedPlayer(); 
      } 
     } 
    } 

    void selectedPlayer(){ 

       target.AddComponent(Type.GetType("SelectMove")); 

    } 

上記のコードで、ユーザーがプレーヤーAをクリックすると、プレーヤーAは加速度センサーを使用して移動します。私がする必要があるのは、別のキャラクターをクリックすると、プレーヤーBと言えば、移動を停止するにはプレーヤーAが必要で、移動するのはプレーヤーBの時間です。しかし、私は欲しいものを手に入れていないようでした。

if (target != null) 
       { 
        var sphereMesh = target.GetComponent<SelectMove>(); 
        Destroy(sphereMesh); 
       } 

しかし、それはまだ動作していない:私はDestroy(this)を使用するか、このコードによって、スクリプトを破壊しようとしました。

以前に追加したスクリプトを破棄しない場合、ユーザーが別の文字をクリックすると、前の選択されたプレーヤーは引き続き新しいものと一緒に移動します。

私は何をする必要があるかを達成する別の方法がありますか?

+0

'sphereMesh.enabled = false'を破棄するのではなく、falseに設定する方が良いです。 –

+1

破棄は正常に動作するはずです。 **(1つ)**あなたのコードでDestroy(sphereMesh); Debug.Log( "私はここにいる")を追加します。 「破棄」が実際に呼び出されているかどうかを判断します。私たちに報告してください! – Fattie

+0

これは実際には現在動作しています。私は上記のコードと同じですが、今はうまくいきます。私は何をしたのか分からないが、とにかく感謝する! :) – kmf

答えて

0
public GameObject target = null; 

void Update() 
{ 
    if(Input.touchCount > 0 || Input.GetTouch(0).phase == TouchPhase.Began) 
    { 
     Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); 
     Debug.DrawRay(ray.origin,ray.direction * 20,Color.red); 
     RaycastHit hit; 
     if(Physics.Raycast(ray, out hit,Mathf.Infinity)) 
     { 
      Debug.Log(hit.transform.gameObject.name); 
      if(this.target != null){ 
       SelectMove sm = this.target.GetComponent<SelectMove>() 
       if(sm != null){ sm.enabled = false; } 
      } 
      target = hit.transform.gameObject; 
      //Destroy(hit.transform.gameObject); 
      selectedPlayer(); 
     } 
    } 
} 

void selectedPlayer(){ 
    SelectMove sm = this.target.GetComponent<SelectMove>(); 
     if(sm == null){ 
      target.AddComponent<SelectMove>(); 
     } 
     sm.enabled = true; 
} 

コードをお使いのベースを再利用し、新しいパーツは、あなたが(私はそれが物事を動かす1であると仮定)SelectMoveスクリプトを無効にするには、以前選択したオブジェクトを使用することです。それを破壊するのではなく、それを有効/無効にして、そのメモリ消費を節約します。

0

私は思っていません。スクリプトを追加したり破棄したりするのが便利な方法です。
試してみよう:
1. SelectMoveスクリプトをすべての可動プレーヤーに追加します。
2. SelectMoveスクリプトにpublicプロパティbool IsMoving = false;を追加し、IsMovingがtrueの場合にifステートメントを移動します。
3. selectedPlayer()メソッドを変更して、ターゲットプレーヤーIsMovingをtrueに変更し、前のプレイヤー(または他のすべてのプレイヤー)をfalseに設定します。

+0

私はステップ3を実装する方法を混乱しています。 – kmf

+0

どこでスクリプトを破壊するのですか?それを 'target.IsMoving = false;'に変更することができます。 –

関連する問題