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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

解決済

野球ゲームでミートカーソルを動かしボールをいろいろな方向に飛ばす処理を実装したいです。

Abc_.c
Abc_.c

総合スコア18

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

1回答

-2評価

1クリップ

294閲覧

投稿2022/05/20 08:28

質問は題名の通りです。
打つタイミングによって打撃方向が変わる処理はなんとか実装できそうなのですが、ミートカーソルの当たった場所によってボールを飛ばす方向が変わる処理が実装できません。
ミートカーソルにはcolliderをつけています。ボールにもボールと同じぐらいのcolliderをつけておりミートカーソルのcolliderにふれたらボールを反射するような処理をスクリプトから記述しております。Physic Materialは使っておりません。ミートカーソル自体にミートカーソルと同じぐらいのcolliderをつけており、ミートカーソルの上らへんにボールが当たったら上方向に反射させたり、ミートカーソルのcolliderの下方向にボールが衝突したら下方向にボールが飛んでいくという処理を実装したいのですがうまくいきません。最初、ミートカーソルとボールが衝突したローカル座標を取得してそれをもとに条件分岐して上方向に飛ばしたり下方向に飛ばしたりすれば実装できると思って試したのですがうまくいきませんでした。理由は例えば低めを打つ際、ミートカーソルを下方向に持ってきますが、その際のミートカーソルのY座標のローカル座標が0.6だとするとボールがミートカーソルの上にあたろうが、下にあたろうが、0.6という数字をひろってしまうからです。高めを打つ場合も同じです。なのでミートカーソルの上に当たった場合、上方向に飛ばしたり、下方向に当たった場合、下方向に飛ばすという条件分岐が使えないんです。どのように上記のような処理を実装すればよいでしょうか?

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

bboydaisuke

2022/05/20 12:26

物理エンジンを使って野球ゲームを作るなら野球盤みたいなものしか作れないでしょう。Collider や Physics Material で制御するのではなく、バットとボールのタイミングからどっちにどのように飛ばすのかを全部プログラミングする、というのが一般的な野球ゲームの作り方だと思います。つまりすごく大変。
Abc_.c

2022/05/20 12:52 編集

例えばミートカーソルの上らへんにボールが当たった場合当然上にボールを飛ばしたいですし、下らへんに当たったら、下に飛ばしたいです。具体的にこれらの処理はどのようにすれば可能なのでしょうか?
bboydaisuke

2022/05/20 14:49 編集

すごーく難しいしとてつもなくめんどくさいのである程度できたものがあるならアドバイスしてくれる人もいるかもしれませんけど、ゼロの状態から「具体的に」って質問されてもなぁ、って感じです。
Abc_.c

2022/05/20 14:59

ミートカーソルについてるcolliderの上の方にボールが当たったら上に飛んでいき、下の方に当たったら下に飛んでくようにif文などで制御するみたいな感じではないのですか?
YT0014

2022/05/20 15:42

当たった時のボールの座標は取得できないのですか? ボールの座標がミートカーソルより上なら上方向、下なら下方向とすれば、それなりに自然になるかと。
bboydaisuke

2022/05/20 17:26 編集

> (前略)みたいな感じではないのですか? それで一回作ってみたらいいんじゃないですか?OnCollisionEnter の引数からは衝突相手の GameObject と接触座標がとれますが、球速とスイングスピードの和があまりに速いとすり抜けたり、ちゃんとした値が取れないかもしれません。
Abc_.c

2022/05/20 23:32 編集

>>YT0014さん それ試したんですよ。ただうまくいかなかったんです。例えば、ミートカーソルのy座標が0.6の位置にあるとしますよね。ボールがミートカーソルに当たったとき、ミートカーソルの位置座標を取得してもy座標0.6しか取得できないから意味ないんです。取得できる座標はミートカーソルがボールに当たった際、ミートカーソル自体が現在存在する位置座標を取得するからなんです。ミートカーソルがy座標0.6の位置にありボールが当たったのは良いものの取得できる座標は0.6でしかないので、ボールが、上か下に当たったかの位置情報は取得できていないので条件分岐ができないというのが現状なんです。y座標0.6という数字は例として出しました。ボールが、ミートカーソルをどの位置に移動しようともミートカーソルにアタッチされているcolliderの上か下にボールが当たったという情報はどのように取得すれば良いのでしょうか?
bboydaisuke

2022/05/21 00:38

今どういうコードを書いてるかは貼れないんですか?this.gameObject.position と書いて「カーソルの座標しか取れない」と言っているのか、Collision.gameObject.transform.position はちゃんと使えてるのかによって周りは対応を変えないといけませんよね。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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