[過去ログ] 【3Dゲームエンジン】Unity質問スレッド36 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
438
(1): 名前は開発中のものです。 [sage] 2018/06/25(月) 15:45:11.51 ID:IeloQePz(1/8) AAS
それ変数のスコープはちゃんと確認されてます?
というか二つ同じ名前で定義できないと思うが?
443
(1): 名前は開発中のものです。 [sage] 2018/06/25(月) 16:17:32.37 ID:IeloQePz(2/8) AAS
>>441
441(1): 名前は開発中のものです。 [sage] 2018/06/25(月) 15:59:39.66 ID:hF+d1Szw(2/13) AAS
>>438
同じ名前で定義してるのじゃなくて値を書き換えて実行してるだけ
>>439
基礎の基礎というがそんな解説してるとこ見たことないぞ

みんなこの仕様しってるのか?
書き換えをインスペクタで行ってるならそちらが優先される
コード上で初期値与えても、インスペクタで上書き
どの時点で上書きされるかは、各関数で確認してみて
453: 名前は開発中のものです。 [sage] 2018/06/25(月) 18:13:46.73 ID:IeloQePz(3/8) AAS
>>437
437(3): 名前は開発中のものです。 [sage] 2018/06/25(月) 15:40:55.77 ID:hF+d1Szw(1/13) AAS
public のことといえば最近気づいたけど
一度変数宣言すると値を書き換えても反映されない
たとえば
public int a=10→実行
public int a=20→実行 a=10のまま
こういう仕様なのか?
困るのが配列のとき
public int[] a=new int[2];
public int[] a=new int[3];→反映されない
変数名を一度書き換えるか宣言と同時にnewしないようにしないといけない
これの意味がわかったわ、てか日本語下手だなぁ
まず最初に
public int a = 10;
void Start () {
print("a:"+a);
}
を実行すると、「a:10」が表示されるで
「public int a = 10;」を 「 public int a = 20;」にして実行する

すると、「a:10」と表示されるわ、これバグじゃね?
って書いてくれればすんなりみんなわかるのに

で、なぜこうなるかというと、public定数なので当然アタッチされているオブジェクトが保存しているから
インスペクタ見ればわかると思うけど、自動でインスペクタに最初の値が保存されていて
それを書き換えてないから、そのまま最初の値が表示されるだけ

それくらい見ればわかるだろ
456
(1): 名前は開発中のものです。 [sage] 2018/06/25(月) 18:19:26.40 ID:IeloQePz(4/8) AAS
でだ、じゃこれバグじゃね?
っていうと、そうじゃなくて、コードの初期値を直した場合には
インスペクタのアタッチしているコードの右に歯車のアイコンあるだろ
そこから「Reset」選ぶんだよ
そうすると、最新の値を持ってきてくれるのだ
463
(1): 名前は開発中のものです。 [sage] 2018/06/25(月) 20:55:35.04 ID:IeloQePz(5/8) AAS
結局>>437はpublicの意味もインスペクタの意義もわかってないまま偉そうに変なやり方講義して消えたか

まぁ恥ずかしくて出てこれないよな普通の日本人ならな
465
(1): 名前は開発中のものです。 [sage] 2018/06/25(月) 21:15:42.94 ID:IeloQePz(6/8) AAS
笑た、実用的www
君はpublicとインスペクタの意義について考えてから使いなね
じゃないならprivateにしてstartで初期処理すればいいよ
467: 名前は開発中のものです。 [sage] 2018/06/25(月) 21:37:28.10 ID:IeloQePz(7/8) AAS
だから、君はpublic使わない方がいいよ
あぁなんならunity使わない方がいいよ
君には無理
481: 名前は開発中のものです。 [sage] 2018/06/25(月) 23:47:07.73 ID:IeloQePz(8/8) AAS
>>469
469(2): 名前は開発中のものです。 [sage] 2018/06/25(月) 22:03:26.58 ID:hF+d1Szw(10/13) AAS
public int hp=10
インスペクタが優先される仕様上あまりこういう書き方はしないほうがいいですよ
最初からインスペクタで入力するかstart内などで初期値を設定しましょう

これが間違ってるなら反論どうぞ
>>472
472(2): 名前は開発中のものです。 [sage] 2018/06/25(月) 23:09:55.87 ID:SLBBsVcr(1) AAS
>>469
おーまだやってんのか。
publicはインスタンス変数でしょ?
スクリプトをオブジェクトにくっつけるんだけど、その時すでにインスタンス化された後の状態で保存されるのよ。
インスペクターはシリアライズされた値をいじるから、優先とかじゃなく、インスタンスの値を設定してんの。
public int hp=10
は新しいオブジェクトにくっつけた時の初期値としてただしいよ。
startで初期値入れるとか、まさかオブジェクト毎にスクリプトファイルをつくるの?
enemy1.cs enemy2.cs.........ememy100.cs
敵キャラが100体いたファイルも100?
さんが書いてるじゃん、理解できない頭なんだから止めたら?
まず、初期値を変数定義で行うのはなんら問題ない
次に、それがpublicであるならオブジェクトにァタッチするとインスタンス化されてインスペクタに表示される、ここで保存される
だから通常はインスペクタの値を変更する事になる
このスクリプトを例えば敵、弱敵等にァタッチした場合、インスペクタの値を変える事でHPの制御ができるが、start関数で初期値を設定したら全て同じになってしまうよ。
はいダメなゲームの完成
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.032s