バージョン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")); } } }
何が分からないのか分かりません。
「DistanceFromTargetクラスで得た距離(distance)をScoreクラスで利用したい」ということなら「unity 別スクリプト 変数」辺りで検索すれば出て来ると思います。(自分で試した結果も記載してください)
そうではないということなら質問に追記してください。
参考:https://teratail.com/help/question-tips
教えていただいた検索方法をもとに自分で試してみたのですが、エラーが出てしまいます。知識が浅いものでどこが間違っているのかわからないので教えていただけますか?
先に提示した質問のヒントの「3-4. 発生している問題・エラーメッセージを書きましょう」あたりを読んで質問を編集してください。(何となく予想はつきますが)