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

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

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

Q&A

解決済

1回答

721閲覧

グローバル変数の使い方

0IshiKawa0

総合スコア7

0グッド

0クリップ

投稿2020/02/11 19:53

オブジェクト開始位置を起点として往復移動させたい

今までjavascriptをやっていたものなのですがunityでは仕様の違いで困っております。

オブジェクトを表示した位置を変数に格納し移動上限を設定
オブジェクトを動かして上限に達したら分岐

という仕組みにしたいのですがどうにもエラーが出て困っております。

発生している問題・エラーメッセージ

Assets\scripts\kasi1.cs(23,37): error CS0103: The name 'kasi_origin_x_plus' does not exist in the current context Assets\scripts\kasi1.cs(27,37): error CS0103: The name 'kasi_origin_x_minus' does not exist in the current context

該当のソースコード

using UnityEngine;
using System.Collections;

public class kasi1 : MonoBehaviour {

bool m_xPlus = true;

public void Start () {
Vector3 kasi_xyz = this.gameObject.transform.position;
float kasi_origin_x = kasi_xyz.x;
float kasi_origin_x_plus = kasi_origin_x +0.1f;
float kasi_origin_x_minus = kasi_origin_x -0.1f;
//Debug.Log(kasi_origin_x_plus);
}

void Update () {

//往復移動の表記ここから if( m_xPlus ) { transform.position += new Vector3(0.1f*Time.deltaTime, 0f, 0f); float kasi_origin_x_now = transform.position.x; if( transform.position.x >= kasi_origin_x_plus ) m_xPlus = false; } else { transform.position -= new Vector3(0.1f*Time.deltaTime, 0f, 0f); if( transform.position.x <= kasi_origin_x_minus ) m_xPlus = true; } //往復移動の表記ここまで

}

}

試したこと

読み込もうとしている変数がグローバル変数になっていない為、スコープの対象外となっているのだろうと予測します。

http://home.a00.itscom.net/hatada/csharp/global01.html

上記のページを見てクラス名を頭に付けたりしましたが上手くいきませんでした。

調べるとこのコンテキストエラーは初心者が度々ぶち当たるものの様で色々出てきましたが
多すぎて自分と同じ問題を探し出すことが出来ませんでした。

どの様に編集すれば良いのでしょうか?

補足情報(FW/ツールのバージョンなど)

unity 2018.4.16

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

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

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

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

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

guest

回答1

0

ベストアンサー

kasi_origin_x_plusもkasi_origin_x_minusもstart関数の中だけにあるローカル変数です

なお、グローバル変数は基本的には使うべきではありませんし、
今回は使わないといけないシーンでもありません

まず、kasi_origin_x,kasi_origin_x_plus,kasi_origin_x_minusは全部メンバ変数としてしまうのがいいです
メンバ変数自体はm_xPlus がメンバ変数ですから説明は必要ないでしょう

また、kasi_origin_x_plusがkasi_origin_xに常に0.1fを足したものなら、
関数にしてしまうと変数の節約になります

float kasi_origin_x_plus(){ return kasi_origin_x + 0.1f; } // 使い方 // if (x < kasi_origin_x_plus())...

ただ、括弧が最後につくので、kasi_origin_xと不統一になると思うなら、
プロパティという書式もあります

float kasi_origin_x_plus{ get (){return kasi_origin_x + 0.1f;} } // 使い方 // if (x < kasi_origin_x_plus)...

投稿2020/02/11 22:18

編集2020/02/11 22:20
izmktr

総合スコア2856

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

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

0IshiKawa0

2020/02/12 03:19 編集

早速のご教授頂けまして誠にありがとうございます! メンバ変数がjavascript的にはグローバル変数で使いたかった変数だと判断することが出来ました! 早速試してみようと思います。 合わせて1点お尋ねしたいことがございます。 UNITY関連の本が多すぎて どれを購入すれば良いのかが分からずWEBで資料探しをしております。 現在 クリックしたら得点が加算される簡単な2Dクリックゲームを作っているのですが そういう場合に向いている初心者オススメの本等をご存知だったりしますでしょうか?
izmktr

2020/02/12 03:31

内容が異なる質問は、この質問を一旦終わらせて新しく建ててください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問