質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • C#

    9035questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    5499questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

unity クリック処理 イベント

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,493

user1041

score 26

下記の状態でwhileの中にif文でgetmousebuttondownの処理を行うにはどうすればいいでしょうか?  ちなみにif(Input.GetMouseButtonDown(0));と書いたらコンパイルはできたが、何も
変わらなかったです。

処理内容・クリックを1カウントしたらDeathMAXHP -= DeathReceivedamage;が実行される というものです。


追記


public class VS : MonoBehaviour {
    
    
    public AudioSource audiosource;
    public AudioSource audiosource2;
    
    private DragonStatus status;
    private DeathStatus status2;
    private DragonStatus DragonMAXHP;
    private DragonStatus DragonReceivedamage;
    private DeathStatus DeathReceivedamage;
    private DeathStatus DeathMAXHP;
    private DragonStatus DragonleftHP;
    private DeathStatus DeathleftHP;
    public AudioClip audioclip;
    public AudioClip audioclip2;
    
    void Start () {
        audiosource = gameObject.GetComponent<AudioSource> ();
        audiosource.clip = audioclip;
        audiosource.Play ();



        status = GetComponent<DragonStatus> ();
        status2 = GetComponent<DeathStatus> ();
        
        int DragonMAXHP = status.HP;
        int DeathMAXHP = status2.HP;
        
        int DragonReceivedamage = status2.attack - status.defend;
        int DeathReceivedamage = status.attack - status2.defend;
        
        
        int DragonleftHP = DragonMAXHP -= DragonReceivedamage;
        int DeathleftHP = DeathMAXHP -= DeathReceivedamage;
    }



 void Update(){

        Debug.Log (DragonMAXHP); 
        if(Input.GetMouseButtonDown(0))
        {
            DragonMAXHP -= DragonReceivedamage; 
            Debug.Log (DeathMAXHP); 
        }       
        
        audio.PlayOneShot(audioclip); 
        if(Input.GetMouseButtonDown(0))
        {
            DeathMAXHP -= DeathReceivedamage; 
            audio.PlayOneShot(audioclip2);
        }
        
        if(DragonMAXHP < 0 || DeathMAXHP < 0)
        {
            // DragonMAXHPまたはDeathMAXHPのどちらかが0になった時の処理
        }
        
    }

    
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

毎フレーム、左ボタンが押されたらダメージを与えるということでしたら以下のような感じですかね。

Update(){ 

    Debug.Log (DragonMAXHP); 
    if(Input.GetMouseButtonDown(0))
    {
         DragonMAXHP -= DragonReceivedamage; 
         Debug.Log (DeathMAXHP); 
     }       

    audio.PlayOneShot(audioclip); 
    if(Input.GetMouseButtonDown(0))
    {
        DeathMAXHP -= DeathReceivedamage; 
        audio.PlayOneShot(audioclip2);
    }

    if(DragonMAXHP < 0 || DeathMAXHP < 0)
    {
        // DragonMAXHPまたはDeathMAXHPのどちらかが0になった時の処理
    }

}
それとも1回のUpdate(最初の1フレーム目)でHPが0になるまでダメージを与え続けたいということですか?


追記
サンプルだけは示しますが、プログラムを書く上で自分で調べることがとても大事です。
「○○はどうやりますか。」という質問ではなく、「○○をこれだけ調べてみたのですが、△△のところがどうしてもわかりません。□□であっていますか?」というような質問ができるように心がけるといいですよ。

using UnityEngine;
using System.Collections;
//オーディオ再生 
public class VS : MonoBehaviour {
    
    
    public AudioSource audiosource;
    public AudioSource audiosource2;
    
    private DragonStatus status;
    private DeathStatus status2;
    
    public AudioClip audioclip;
    public AudioClip audioclip2;
    
    
    // 以下をメンバ変数として宣言
    int DragonMAXHP = 0;
    int DeathMAXHP = 0;
    
    int DragonReceivedamage = 0;
    int DeathReceivedamage = 0;
    
    int DragonleftHP = 0;
    int DeathleftHP = 0;
    
    
    void Start () { 
        audiosource = gameObject.GetComponent<AudioSource> (); 
        audiosource.clip = audioclip; 
        audiosource.Play (); 


        status = GetComponent<DragonStatus> (); 
        status2 = GetComponent<DeathStatus> (); 
        
        DragonMAXHP = status.HP; 
        DeathMAXHP = status2.HP; 
        
        DragonReceivedamage = status2.attack - status.defend; 
        DeathReceivedamage = status.attack - status2.defend; 
        
        
        DragonleftHP = DragonMAXHP -= DragonReceivedamage; 
        DeathleftHP = DeathMAXHP -= DeathReceivedamage; 
    }



    void Update(){

        // なんかifの中身が違う気がしたので直しました。
        // おせっかいでしたら戻してください。
        Debug.Log (DragonMAXHP);
        if(Input.GetMouseButtonDown(0))
        {
            DragonMAXHP -= DragonReceivedamage;
        }
        Debug.Log (DeathMAXHP);
        
        audio.PlayOneShot(audioclip);
        if(Input.GetMouseButtonDown(0))
        {
            DeathMAXHP -= DeathReceivedamage;
        }
        audio.PlayOneShot(audioclip2);
        
        if(DragonMAXHP < 0 || DeathMAXHP < 0)
        {
            // DragonMAXHPまたはDeathMAXHPのどちらかが0になった時の処理 
        }
    
    }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/06 12:06

    上記でコンパイルしたらエラーがでます。。

    キャンセル

  • 2015/07/06 12:48

    エラーの内容はどのようなものですか?

    キャンセル

  • 2015/07/06 13:20

    >>毎フレーム、左ボタンが押されたらダメージを与えるということでしたら以下のような感じですかね。 そのとおりです。

    キャンセル

  • 2015/07/06 13:22 編集

    VS.cs(39,7): error CS0116: A namespace can only contain types and namespace declarations がでます。。。。

    キャンセル

  • 2015/07/06 13:30

    クラスの外に書いていないですか?

    キャンセル

  • 2015/07/06 13:36 編集

    追記しました。上記でエラーがでました。

    キャンセル

  • 2015/07/06 13:53

    public class VS : MonoBehaviour {
    }
    の中にUpdateを入れてください。

    キャンセル

  • 2015/07/06 14:08

    こういうことですか?  これもエラーがでてint ○○○ のところがerror CS0103: The name `DragonMAXHP' does not exist in the current context になります

    キャンセル

  • 2015/07/06 14:22

    はい。その通りです。

    DragonMAXHP
    DeathMAXHP
    DragonReceivedamage
    DeathReceivedamage
    DragonleftHP
    DeathleftHP

    をStatusと同様にメンバ変数としてください。
    こちらは「変数のスコープ」について調べてみてください。

    キャンセル

  • 2015/07/06 16:05 編集

    追記しました。上記で実行すると error CS0019: Operator `-=' cannot be applied to operands of type `DragonStatus' and `DragonStatus' となります。。。。

    キャンセル

  • 2015/07/06 17:07

    伝え方が悪かったですね。すみません。

    型はintのままで、Statusと同じ要領で
    private 型 変数名;
    と宣言してくださいという意味でした。

    キャンセル

  • 2015/07/06 21:13

    どうもありがとうございます

    キャンセル

0

if文は以下のように使用します。基本的な文法です。
if(条件)
{
   // 条件が真の時実行する処理
}

まずは基礎的な文法(if,else,for,foreach,while,switch等々)を確認したほうがいいかもしれませんね。

if(Input.GetMouseButtonDown(0))
{
    DragonMAXHP -= DragonReceivedamage; 
    Debug.Log (DeathMAXHP);
} 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/05 23:12

    具体的には (DragonMAXHP>=0 && DeathMAXHP>=0) でHPが0になるまで動作を
    続けたいのでwhileにしてるのですが、その中にifをいれる方法はどうすればいいですか?

    キャンセル

  • 2015/07/05 23:44

    回答を編集して追記したつもりが新しく回答を付けてしました。
    そちらを見てください。

    キャンセル

同じタグがついた質問を見る

  • C#

    9035questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    5499questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。