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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Unity3D

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

Q&A

2回答

1122閲覧

unityでターゲットまでの距離をスコアに反映させたい

ayapon

総合スコア12

Unity3D

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

0グッド

0クリップ

投稿2019/01/22 05:43

編集2022/01/12 10:55

バージョンunity2018.1.0f2
unityでアーチェリーのゲームを作成しています。的となるTargetとカメラの距離をスコアに反映させたいです。Targetの色に応じてスコアが10,30,50点,,,のように決まっていて、同じ色に当たっても、距離が短いほど点数を低く距離が長いほど点数を高くしたいです。
Targetの色に応じたスコア*距離/1000を最終的なスコアにしたいです。
ご回答お願いします。

エラーメッセージ
DistanceFromTargetスクリプトのUpdate関数ないのvar 「distance」にエラーが表示されます。
イメージ説明

イメージ説明
イメージ説明

using System.Collections; using System.Collections.Generic; using UnityEngine; public class White : MonoBehaviour { GameObject ARCamera; DistanceFromTarget script; //private float targetdistance; //private float distancescore; void Start() { ARCamera = GameObject.Find("ARCamera"); //ARCameraをオブジェクトの名前から取得して変数に格納する script = ARCamera.GetComponent<DistanceFromTarget>(); //ARCameraの中にあるDistanceFromTargetを取得して変数に格納する } void Update() { //targetdistance = script.distance; //distancescore = 10 * targetdistance / 1000; } void OnCollisionEnter(Collision collision) { //衝突判定 if (collision.gameObject.tag == "Dart") { int targetdistance = script.distance; //スコア処理を追加 FindObjectOfType<Score>().AddPoint(targetdistance*10/1000); Destroy(transform.parent.gameObject); //相手のタグがBallならば、自分を消す // Destroy(this.gameObject); } } }
using UnityEngine; using UnityEngine.UI; public class Score : MonoBehaviour { // スコアを表示する public Text scoreText; // ハイスコアを表示する public Text highScoreText; // スコア private int score; // ハイスコア private int highScore; // PlayerPrefsで保存するためのキー private string highScoreKey = "highScore"; void Start() { Initialize(); } void Update() { // スコアがハイスコアより大きければ if (highScore < score) { highScore = score; } // スコア・ハイスコアを表示する scoreText.text = score.ToString(); highScoreText.text = highScore.ToString(); } // ゲーム開始前の状態に戻す private void Initialize() { // スコアを0に戻す score = 0; // ハイスコアを取得する。保存されてなければ0を取得する。 highScore = PlayerPrefs.GetInt(highScoreKey, 0); } // ポイントの追加 public void AddPoint(int point) { score = score + point; } // ハイスコアの保存 public void Save() { // ハイスコアを保存する PlayerPrefs.SetInt(highScoreKey, highScore); PlayerPrefs.Save(); // ゲーム開始前の状態に戻す Initialize(); } }
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class DistanceFromTarget : MonoBehaviour { // 自身との距離を計算するターゲットオブジェクト [SerializeField] private Transform targetObj; // 距離を表示するテキストUI [SerializeField] private Text distanceUI; // コライダを考慮したオフセット値 private float colliderOffset; public int distance; void Start() { colliderOffset = GetComponent<CharacterController>().radius + targetObj.GetComponent<CharacterController>().radius; } // Update is called once per frame void Update() { // 距離を計算 var distance = Vector3.Distance(transform.position, targetObj.position) - colliderOffset; if (distanceUI != null) { distanceUI.text = distance.ToString("0.00m"); } else { Debug.Log(distance.ToString("0.00m")); } } }

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

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

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

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

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

sakura_hana

2019/01/22 05:49

何が分からないのか分かりません。 「DistanceFromTargetクラスで得た距離(distance)をScoreクラスで利用したい」ということなら「unity 別スクリプト 変数」辺りで検索すれば出て来ると思います。(自分で試した結果も記載してください) そうではないということなら質問に追記してください。 参考:https://teratail.com/help/question-tips
ayapon

2019/01/22 06:36

教えていただいた検索方法をもとに自分で試してみたのですが、エラーが出てしまいます。知識が浅いものでどこが間違っているのかわからないので教えていただけますか?
sakura_hana

2019/01/22 09:35 編集

先に提示した質問のヒントの「3-4. 発生している問題・エラーメッセージを書きましょう」あたりを読んで質問を編集してください。(何となく予想はつきますが)
guest

回答2

0

DistanceFromTargetのvar distance = 〜部分。
varは変数定義なので、本来他のスクリプトから参照したいpublic int distance;とは別の変数(ローカル変数)を新たに作って代入していることになってしまいます。
distance = Vector3.Distance(transform.position, targetObj.position) - colliderOffset;とすればOKです。

余談ですが、「ローカル変数'distance'は〜」というメッセージは「エラー」ではなく「警告(Warning)」です。
エラーは実行すら出来ない状態、警告は実行は出来るが正常に動かない場合が多い(内容により正常に動く場合もある)状態です。
ちゃんと区別して使えると「分かってる感」が出るので覚えておくといいと思います。

投稿2019/01/22 11:08

sakura_hana

総合スコア11425

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

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

ayapon

2019/01/22 11:37

警告と言うのですね!覚えておきます。 varを消すと以下のエラーが出てしまいます。 Assets/Scripts/DistanceFromTarget.cs(28,28): error CS0266: Cannot implicitly convert type `float' to `int'. An explicit conversion exists (are you missing a cast?)
guest

0

質問頂きありがとうございます
変数名が被ってるのでエラーになっています。
使っていないpublic int distance;を消すか別の名前にすれば解決します

投稿2019/01/22 10:45

bochan2

総合スコア2050

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問