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

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

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

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

Unity

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

Q&A

解決済

3回答

6119閲覧

Unity C#で他のscriptの変数を利用したいがうまくいかない

Romira

総合スコア47

C#

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

Unity

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

0グッド

0クリップ

投稿2018/06/22 15:58

前提・実現したいこと

Player.csの変数int hpをhpbar.csで利用したいのですがうまくいきません

再生を実装中に以下のエラーメッセージが発生しました。

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

エラーメッセージ Assets/scripts/hpbar.cs(15,22): error CS1061: Type `Player' does not contain a definition for `php' and no extension method `php' of type `Player' could be found. Are you missing an assembly reference?

Player.csのソースコード

C#

1public class Player : MonoBehaviour 2{ 3 public int hp; 4 5 void Start() 6 { 7 hp = 20000; 8 } 9 10 void Update() 11 { 12 hp -= 10; 13 }

hpbar.csのソースコード

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class hpbar : MonoBehaviour { Slider slider; Player player; int hpp; // Use this for initialization void Start() { slider = GameObject.Find("Slider").GetComponent<Slider>(); } // Update is called once per frame void Update() { hpp = player.php; slider.value = hpp; } }

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

Unity2018.1.0f2

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

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

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

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

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

guest

回答3

0

ベストアンサー

もし初回からシーンにスライダーとプレイヤーを配置しているのであれば以下の方法でも可能です。
Findはあまり使いたくない派の人間なので...

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class hpbar : MonoBehaviour 7{ 8 9 // インスペクター上からアタッチ 10 [SerializeField]Slider slider; 11 [SerializeField]Player player; 12 // int hpp; 13 14 // Use this for initialization 15 void Start() 16 { 17 // 初期化の処理などが必要であれば追加してください。 18 // slider = GameObject.Find("Slider").GetComponent<Slider>(); 19 } 20 21 // Update is called once per frame 22 void Update() 23 { 24 // hpp = player.php; 25 // slider.value = hpp; 26 slider.value = player.hp; 27 } 28}

実際答えを教えることは簡単ですが、
今後のことを考えると、まず何のエラーかエラーをしっかり読む習慣をつけて、
エラー内容をそのままググったりしてみてください。
大抵のものは同じエラーが出て解決した方法が載っています。

Google翻訳かけるだけでエラーの雰囲気は掴めたりすするかも知れません。

Assets / scripts / hpbar.cs(15,22):エラーCS1061: `Player 'タイプに` php'の定義がなく、 `Player 'タイプの拡張メソッド` php'が見つかりませんでした。アセンブリの参照がありませんか?

あとは、nullチェックなどをするとどこで処理が止まってしまっているかも
分かりやすいので状況に応じて入れてみて下さい。

Unityに関しては表現方法が沢山あるのでHPバーも
imageとfillamountの組合せで表現できたりするのでそちらも試してみると面白いですよ!

初めはなれるまで大変かと思いますが頑張って下さい。

投稿2018/06/22 19:06

wingriver283

総合スコア38

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

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

Romira

2018/06/23 05:44

うまくいきました ありがとうございます! Player player;としただけではだめだったのですね。勉強になりました 他の回答してくださった皆様もありがとうございます
guest

0

Playerクラスで定義されている変数は[hp]ですが、hpbarで呼び出しているのは[php]という変数になっているからだと思います。

ついでにhpbarのplayerに値を代入しないとNull Referenceになるので、sliderと同様にGetComponentする必要があると思います。

投稿2018/06/22 16:34

m_hikari

総合スコア64

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

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

0

either you static variables , you can use public variables

public class Player{

public float health = 1.0;

}

public class Collision {
GameObject Player; // pass from unity editor

void Hit () { player = gameObject.GetComponent<Player>(); if(player.health == 0.0f) // you hit one innocent }

}

投稿2018/06/22 17:06

AliHassan

総合スコア351

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問