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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3040閲覧

unity ブロック崩しでマウス追尾弾を作成したらの衝突判定が追尾中だけ反応しなくなりました

yzccdefine

総合スコア65

C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2015/11/01 19:43

初めましてゲーム作りを始めたばかり、
プログラムも大学の授業程度のyzccdefineです
今ブロック崩しを作成していて、
キーを押したらマウスに半径Rの距離で円運動するプログラムを作成しています。

ですが、円運動の際ブロックや壁にぶつかっても今までは衝突判定が働いてくれていたのですが
全く追尾中は反応しません。
強制的に円運動するプログラムにしているのが影響しているのだとは思いますが
今のところ改善の検討がついていない状態です。
どういった改善を図れば良いのかご教授願いたく質問させていただきました。

c言語

1 private Vector3 mousepos;//ロ―カル 2 private Vector3 W_mousepos;//ワールド 3 4 public float r = 4;//描く円の大きさ 5 public float shit=0;//角度 6void UpDate(){ 7 float rad = Mathf.PI / 180.0f*shita;//ラジアンに 8 mousepos = Input.mousePosition;//取得 9 W_mousepos = Camera.main.ScreenToWorldPoint(mousepos);//カメラ座標をワールドに変換 10 W_mousepos.z = 0f;//Z軸だけ他のものと同じにするために固定 11 gameObject.transform.position = W_mousepos;//オブジェクトの座標の変更 12 if (shita == 360f) {//360度越したら戻しておく 13 shita = 0f; 14 } 15 shita += 5f; 16 rb.transform.position = new Vector3(W_mousepos.x+r*Mathf.Cos(rad) ,W_mousepos.y+r*Mathf.Sin(rad), 0);//円運動 17}

このオブジェクトはSphere Colliderを持っています。
この追尾円運動を追加する前のオブジェクトの動作は
rb.AddForce((transform.up + transform.right).normalized * speed, ForceMode.VelocityChange);
<rbはリジッドボディのインスタンスです。>
で押し上げるだけの動作です。

可能な限りのアドバイスをお願いします!

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

コード private Vector3 mousepos;//ロ―カル private Vector3 W_mousepos;//ワールド public float r = 4;//描く円の大きさ public float shit=0;//角度 private float kaiten_flag=true; void UpDate(){ float rad = Mathf.PI / 180.0f*shita;//ラジアンに mousepos = Input.mousePosition;//取得 W_mousepos = Camera.main.ScreenToWorldPoint(mousepos);//カメラ座標をワールドに変換 W_mousepos.z = 0f;//Z軸だけ他のものと同じにするために固定 gameObject.transform.position = W_mousepos;//オブジェクトの座標の変更 if (shita == 360f) {//360度越したら戻しておく shita = 0f; } if(kaiten_flag==true){ shita += 5f; } else{ shita -=5f; } rb.transform.position = new Vector3(W_mousepos.x+r*Mathf.Cos(rad) ,W_mousepos.y+r*Mathf.Sin(rad), 0);//円運動 } void OnCollisionEnter(Collision c) { kaiten_flag = !kaiten_flag; }

このように変更してぶつかったら逆回転をするようにして反発しているようにしてみてなんとか質問内容を自己解決できました
見てくださった方々ありがとうございます!

投稿2015/11/01 20:48

編集2015/11/01 20:49
yzccdefine

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問