2017-01-08 27 views
0

左右の2つのキューブからなるオブジェクトを移動しています。これらの立方体は、y軸上でランダムに生成されます。キューブを左右に移動するタッチコントロール

私は問題なく左右に移動できますが、いずれかのキューブを左右に動かすとすべて移動します。

キューブのいずれかを、すべてではなく、左または右にだけタッチしたときに、どのように移動できますか?ここでは以下の私のコードは次のとおりです。

public Transform block; 
public Transform player; 
private float objectSpawnedTo = 5.0f; 
public static float distanceBetweenObjects = 5.0f; 
private float nextCheck = 0.0f; 
private ArrayList objects = new ArrayList(); 
void Start() { 
    maintenance(0.0f); 
} 


void Update() { 
    float playerX = player.position.y; 
    if(playerX > nextCheck) 
    { 
     maintenance(playerX); 
    } 
} 

private void maintenance(float playerX) 
{ 
    nextCheck = playerX + 30; 
    for (int i = objects.Count-1; i >= 0; i--) 
    { 
     Transform blck = (Transform)objects[i]; 
     if(blck.position.y < (transform.position.y - 30)) 
     { 
      Destroy(blck.gameObject); 
      objects.RemoveAt(i); 
     } 
    } 
    spawnObjects(5); 
} 

private void spawnObjects(int howMany) 
{ 
    float spawnX = objectSpawnedTo; 
    for(int i = 0; i<howMany; i++) 
    { 
     Vector3 pos = new Vector3(-3.5f,spawnX, 0); 
     //float firstRandom = Random.Range(-6.0f, 1.0f); 
     Transform blck = (Transform)Instantiate(block, pos, Quaternion.identity); 
     //blck.localScale+=new Vector3(firstRandom*2,0,0); 
     objects.Add(blck); 
     //pos = new Vector3(0,spawnX, 0); 
     //blck = (Transform)Instantiate(block, pos, Quaternion.identity); 
     //blck.localScale +=new Vector3((8.6f-firstRandom)*2,0,0); 
     //objects.Add(blck); 
     spawnX = spawnX + distanceBetweenObjects; 
    } 
    objectSpawnedTo = spawnX; 
} 

} 

キューブ・制御コード:

は、キューブのコード生成

public float speed = 5; 

// Use this for initialization 
void Start() { 

} 

void Update() { 
    if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) { 
     // Get movement of the finger since last frame 
     Vector3 touchDeltaPosition = Input.GetTouch(0).deltaPosition; 

     // Move object across XY plane 
     transform.Translate(touchDeltaPosition.x * speed, 0, 0); 


     Vector3 boundaryVector = transform.position; 
     boundaryVector.x = Mathf.Clamp (boundaryVector.x, -5.5f, -2.8f); 
     transform.position = boundaryVector; 
    } 
} 

} 

答えて

0

を問題は、あなたのキューブ・制御コードは、キューブがあるかについて、それには条件を持っていないです選択:あなたはInput.touchCountが> 0になるのを待ってから、キューブを移動します。だから、このスクリプトを持っているキューブはすべて動くでしょう。 、

[SerializeField] 
private float speed = 0.5f; 

private int MAX_TOUCH_COUNT = 5; 
private bool[] touched; 

protected void Start() 
{ 
    touched = new bool[MAX_TOUCH_COUNT]; 
} 

void Update() 
{ 
    if (Input.touchCount > 0) 
    { 
     for(int i = 0; i < (Input.touchCount <= MAX_TOUCH_COUNT ? Input.touchCount : MAX_TOUCH_COUNT); i++) 
     { 
      if(touched[i] && Input.GetTouch(i).phase == TouchPhase.Ended) 
      { 
       touched[i] = false; 
      } 
      else if (!touched[i] && Input.GetTouch(i).phase == TouchPhase.Began) 
      { 
       Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position); 
       RaycastHit hitInfo; 
       if (Physics.Raycast(ray, out hitInfo)) 
       { 
        if (hitInfo.transform.GetComponentInChildren<*YOUR_CUBE_CONTROL_CLASS_NAME*>() == this) 
        { 
         touched[i] = true; 
        } 
       } 
      } 
      else if (touched[i] && Input.GetTouch(i).phase == TouchPhase.Moved) 
      { 
       // Get movement of the finger since last frame 
       Vector3 touchDeltaPosition = Input.GetTouch(i).deltaPosition; 

       // Move object across XY plane 
       transform.Translate(touchDeltaPosition.x * speed, 0, 0); 

       Vector3 boundaryVector = transform.position; 
       boundaryVector.x = Mathf.Clamp (boundaryVector.x, -5.5f, -2.8f); 
       transform.position = boundaryVector; 
      } 
     } 
     else 
     { 
      touched = false; 
     } 
    } 
} 

・ホープ、このヘルプのための

+0

おかげ:

は、私はあなたが「感動」とレイキャストが成功した場合のみ、それを移動されたキューブをチェックするレイキャストがある何をする必要があるかと思いますコメント、iveはこのコードを使用しましたが、レイキャストに関連するエラーを取得していますか?どのように私はこれを解決することができます。また、私は最初のものの代わりに残りのタッチで作業するために何をする必要があります。あなたが正しい方向に私を指すことができれば、私はそれを感謝する – U53R

+0

私は提供されたコードのエラーを修正した(主に私がここにそれを書いたし、それをテストしなかったという事実のために)、それをテスト:それはうまく動作します。タッチデバイスでテストしていることを確認してください。 'Input.GetTouch()'が使用されているので、マウスのクリックでは動作しません。残りのタッチで動作させるために、私は単純に '触れた' boolロジックをboolの配列に変換しました。 – Kardux

+0

はい、その作業。これで私はゲームオブジェクトの親であるメインキューブを選択するときにキューブを左右に動かすことができますが、gameobjectを左右に動かすことはできますか?あなたはGetComponentsInChildrenを使う必要があると思いますか? – U53R

関連する問題