2017-08-21 3 views
0

私は、ゲームの開始時にインスタンス化された10個の球があるUnity C#でゲームを作っています。ユーザーが球のいずれかをクリックすると、球はset active falseプロパティを使用して非表示になります。今私が望むのは、いくつかの球の後ろに爆弾を置くことです。そのため、ユーザが爆弾を持っている球をクリックすると、ゲームは終了します。インスタンス化されたオブジェクトの背後に別のプロパティを設定するにはどうすればよいですか?

List<GameObject> hat; 
float q, w, r; 
public Spheres() 
{ 
    hat = new List<GameObject>(); 
    q = -2.5f;w = -2.5f;r = -2.5f; 
} 

public void AddSphere(GameObject gola) 
{ 
    for (int i = 0; i < 5; i++) 
    { 
     GameObject abc = GameObject.Instantiate (gola); 
     abc.transform.position = new Vector3 (abc.transform.position.x + q, abc.transform.position.y, abc.transform.position.z + 1.5f); 
     hat.Add (abc); q += 1.15f; 
    } 
} 

public void HideSphere() 
{ 
    if(Input.GetMouseButtonDown(0)) 
    { 
     Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);  
     RaycastHit hit; 
     if (Physics.Raycast (ray, out hit)) 
     { 
      if (hit.transform.gameObject.CompareTag ("Sphere")) 
      { 
       hit.transform.gameObject.SetActive (false); 
      } 
     } 
    } 
} 

インスタンス化球

for (int i = 0; i < 5; i++) 
{ 
    GameObject abc = GameObject.Instantiate (gola); 
    abc.transform.position = new Vector3 (abc.transform.position.x + q, abc.transform.position.y, abc.transform.position.z + 1.5f); 
    hat.Add (abc); q += 1.15f; 
} 
+3

ようこそスタックオーバーフロー!これは、人々があなたのためにコードを書くことがないように、ウェブサイトではありません。あなたが書いたコードをデバッグする助けが必要な場合は、[Minimal、Complete、and Verifiable example](https://stackoverflow.com/help/mcve)を投稿し、あなたのコードに関する特定の問題を説明しなければなりません。 – Nino

+0

あなたの質問はちょっとしたものをやるだけです。あなたは具体的でなければなりません。自分のプロジェクト[チュートリアル](https://unity3d.com/learn/tutorials)に従うことでUnityの学習を始めることができます。 – Programmer

+0

他の人が言っていたことプラス:あなたの質問を改善する方法(そして下書き/クローズアップを避ける)を[尋ねる]を読んでください。 – Fildor

答えて

0

まだコードを追加していないので、私はあなたの問題にどのようにアプローチするかを説明します。 GameObejectを非アクティブ化するスクリプトを添付している球のためのGameObjectを作成したか、onClick()を表示しないようにします。だから今従うべき手順は次のようになります。

  1. そのゲームオブジェクトにブール変数を追加しますが、あなたのシーンで10球をインスタンス化するとき、boolean hasBomb
  2. と呼ばれるランダムにその ブール値trueまたはfalseに
  3. オプションを設定します - あなたはまた、爆弾のプレハブを追加したい場合は、 hasBomb 属性は(hasBombが)に設定されているかどうかをチェック球のonClick()方法で
  4. trueに設定されている球の同じ位置にそれらをインスタンス化することができます true
  5. trueの場合、テキストまたはメニューでGameOverと呼ばれる新しいシーンを読み込みます。あなたのコメントで提供されているコードをApplication.LoadLevel("GameOver"

編集を使用する:

List<GameObject> hat; 
float q, w, r; 

public Spheres() {  
    hat = new List<GameObject>(); 
    q = -2.5f; 
    w = -2.5f; 
    r = -2.5f; 
} 

public void AddSphere(GameObject gola) {  
    for (int i = 0; i < 5; i++) { 
     GameObject abc = GameObject.Instantiate (gola); 
     abc.transform.position = new Vector3 (abc.transform.position.x + q, abc.transform.position.y, abc.transform.position.z + 1.5f); 
     hat.Add (abc); 
     q += 1.15f; 
    }  
} 

public void HideSphere() {  
    if(Input.GetMouseButtonDown(0)) {  
     Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
     RaycastHit hit; 

     if (Physics.Raycast (ray, out hit)) { 
      if (hit.transform.gameObject.CompareTag ("Sphere")) {  
       hit.transform.gameObject.SetActive (false);  
      }  
     }  
    }  
} 

私はゴーラは、エディタで作成したゲームオブジェクトであると仮定します。したがって、そのgameObjectを「球体」とタグ付けするのではなく、後でPhysics.Raycastを使用してボタンを押して検出する場合は、hideSphere.csというスクリプトを作成します。そのスクリプトに追加する必要があります

public boolean hasBomb; 

とも

function OnMouseDown() 
{ 
    if(hasBomb) 
    Application.LoadLevel("GameOver") 

    renderer.enabled = false; 
    //Or 
    //Destroy(gameObject); 
} 

を次に、あなたがする必要があります(それはクリックを検出したので)

  1. ゴーラゲームオブジェクトに衝突型加速器を追加取り付けスクリプトhideSphere。今

    球が爆弾を持っているかどうかをランダムに決定する:

    GameObject abc = GameObject.Instantiate (gola); 
    abc.transform.position = new Vector3 (abc.transform.position.x + q, abc.transform.position.y, abc.transform.position.z + 1.5f); 
    
    //Here we decide if it has a Bomb or not 
    float chance = Random.Range(0.0f, 1.0f); 
    if(chance > 0.75f) 
    abc.GetComponent.<hideSphere>().hasBomb = true; 
    
    hat.Add (abc); 
    

    注:ゴーラゲームオブジェクト

編集2に、CSラインを使用すると、変数hasBombへのアクセスをabc.GetComponent.<hideSphere>().hasBomb = true;これはGameObjectゴーラに添付されたスクリプトhideSphere.csのパブリック変数です。しかし、この場合は、現在の反復で生成された特定のインスタンスの属性のみを変更します。

+0

私はメインカメラ でスクリプトを添付しており、インスタンス化する元のオブジェクトとして球プレハブを使用しました。 したがって、球のプレハブでブール値を追加する必要があります。 しかし、どうすればそのブールをランダムに設定することができますか?インスペクタから またはスクリプトを使用していますか? しかし、スクリプトを使用している場合、それを行う方法? –

+0

私はその部分を私の答えに追加しようとします –

+0

待っています.... !!!! –

0

どの球の子供たちあなたの爆弾を置きます。 ユーザーが球をクリックすると、オブジェクトに「爆弾」と呼ばれる子があるかどうかをチェックします。

void OnClick() 
{ 
    if (transform.Find("bomb" != null)) 
    { 
     //gameover 
    } 
    else 
    { 
    gameobject.SetActive(false); 
    } 
} 
関連する問題