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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

2542閲覧

画面上の照準を動かして撃てるようにしたい

Shiranatsu

総合スコア2

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2021/10/20 15:03

編集2021/10/21 08:11

unityでスマホ向けのシューティングゲームを作っているのですが照準(image)の子に"rayを真っ直ぐ飛ばすもの"を付けただけなので、真っ直ぐにしかrayが飛ばず、照準はあっているのにrayはあたらないので、あたるようにする方法が知りたいです。
イメージ説明
![イメージ説明

試したこと

照準(image)の位置(canvas上)に応じて角度をつけるようにしたが、精度が良くなかった。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class Kaiten : MonoBehaviour 7{ 8 [SerializeField] GameObject obj; 9 [SerializeField] GameObject objK; 10 11 // Start is called before the first frame update 12 void Start() 13 { 14 15 } 16 17 // Update is called once per frame 18 void Update() 19 { 20 Vector3 pos = obj.GetComponent<RectTransform>().anchoredPosition; 21 obj.GetComponent<RectTransform>().anchoredPosition = pos; 22 float Y = pos.x * 0.095833f + 64f * 0.095833f; 23 float X = pos.y * -0.111111f + 74f * -0.111111f; 24 objK.GetComponent<RectTransform>().localRotation = Quaternion.Euler(X, Y, 0); 25 26 27 } 28} 29

64,74はタップ場所と照準とのずれを治すためのもので、少数のは位置を角度にするためのです。
自分でも上手く書けている自信がないので、分からなかったら質問してください!

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

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

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

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

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

YOshim

2021/10/21 00:37

仕様がよくわかっていないのですが タップした場所に照準が発生し、shotボタンを押すとその照準に向けてrayを飛ばすということですか。 >照準(image)の子にrayを飛ばす とはどういうことでしょうか。
Shiranatsu

2021/10/21 08:09

分かりづらくてすみません、shotボタンを押すと真っ直ぐrayを飛ばすobjectを照準の子にしているということです。 仕様は照準が最初からあり、タップする部分と書いた部分をタップしながら動かすことで動かせるようになっています。(タップする部分と照準は一緒に動くようになっています)
YOshim

2021/10/21 12:48

>真っ直ぐrayを飛ばすobjectを照準の子にしている Rayは画面中心部分にある銃から出るのでしょうか。 >タップする部分と書いた部分をタップしながら動かすことで動かせるようになっています。 照準を示すオブジェクトは常に画面上にあり、画面上をタップするとそこに照準が移動するということでしょうか。その照準の先にオブジェクトがいれば、銃からそのオブジェクトめがけてRayを飛ばすという認識であっていますでしょうか。
Shiranatsu

2021/10/21 13:17

銃は飾りで、rayは照準の真後ろの空のobject(真っ直ぐrayを飛ばすobject)からでるようになっています。 >その照準の先にオブジェクトがいれば、銃からそのオブジェクトめがけてRayを飛ばすという認識であっていますでしょうか。 shotを押すとrayを正面に飛ばし、当たったobjectの情報を得て、敵ならダメージを与える。というふうになっています。 ほかのことはあっています。
guest

回答1

0

ベストアンサー

shotを押すとrayを正面に飛ばし、当たったobjectの情報を得て、

照準の先にあるオブジェクトを取得するというイメージで正しいですかね。タップで照準の位置を動かすということなので、タップした先のオブジェクトにRayを飛ばせればよいと思いました。
そうであれば一般的な方法として下記のようなコードで実現できます。

Vector2 scopePosition = xxx;//照準の位置 Ray ray = new Ray(); RaycastHit hit = new RaycastHit(); ray = Camera.main.ScreenPointToRay(scopePosition); if (Physics.Raycast(ray.origin, ray.direction, out hit, Mathf.Infinity)) { //例えばヒットしたオブジェクトのタグがPlayerの場合に処理を行いたい場合は if(hit.collider.gameObject.CompareTag("Player")) { //処理を記述 } }

投稿2021/10/21 13:34

YOshim

総合スコア1085

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

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

Shiranatsu

2021/10/23 12:43

ありがとうございます!できました! 私はrecttransformとscreen座標の変換にとまどったので他の人のために参考になったものをのせておきます。https://teratail.com/questions/52605
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問