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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
17
(1): 名前は開発中のものです。 [] 2024/11/03(日) 09:25:44.67 ID:PT+Z5R0i(1/10) AAS
>>2
2(1): 名前は開発中のものです。 [] 2024/11/01(金) 19:35:09.12 ID:nUFflvhn(1) AAS
go.transform.position.x ++1;
はなぜこうしちゃダメなのですか?

わざわざ
Vector3 pos=new Vector3(1,0,0);
go.transform.position += pos;
とやらなきゃいけないみたい。
正確な答えじゃないかもしれないけど、positionはTransformのプロパティでVector3という値型だから
値型はインスタンスが複製されるんで複製したものに対してxを書き換えても意味ないからエラーになった気がする
複製したインスタンスに対して代入する必要があるからわざわざ変数作って書き換えて再びpositionに代入する感じだった気がする
18
(1): 名前は開発中のものです。 [] 2024/11/03(日) 09:45:13.06 ID:PT+Z5R0i(2/10) AAS
ところで質問なんですが、Unityでゲームの一時停止をする時って皆さんはどう実装してますか?
ググるとTime.timeScale = 0にする記事がヒットするんですが、そういうのは色んな処理に悪影響出るので辞めたいです
やっぱり一つ一つスクリプトでちまちま止める処理を追加するしかないんでしょうか?
20: 名前は開発中のものです。 [] 2024/11/03(日) 11:38:01.31 ID:PT+Z5R0i(3/10) AAS
>>19
19(5): 名前は開発中のものです。 [] 2024/11/03(日) 11:22:26.30 ID:etQ2u8I9(1/4) AAS
>>17
でも
Vector3 pos=new Vector3(1,0,0);
pos.x++;
go.transform.position += pos;
というのが正しく

go.transform.position.x++;
は正しくないらしい。

その考えではこれは説明できなくない?
xはpublicなフィールド
+=はオーバーロードされてるメソッド
++は純粋にpublicなxをインクリメントするだけ

つまり一時的にコピーされたインスタンスに対して操作(代入とかインクリメント)とかして放置がダメっていう意味だけど分かりますかね?
+=は内部的にメソッド読んでるけど、++はオーバーロードされてないんでpublic xを操作するだけ

>go.transform.position.x++;

これはつまり、
Vector3 pos = go.transform.position;
pos.x++;
で終わってgo.transform.position=posをしてないのと一緒だからエラーになる
22: 名前は開発中のものです。 [sage] 2024/11/03(日) 11:49:18.48 ID:PT+Z5R0i(4/10) AAS
>>21
21(1): 名前は開発中のものです。 [sage] 2024/11/03(日) 11:39:09.74 ID:69yBOCa6(1/2) AAS
プラスイコールは正しくないやろ
やるなら
go.transform.position += new Vector3(1,0,0);
だね
24: 名前は開発中のものです。 [sage] 2024/11/03(日) 12:01:50.42 ID:PT+Z5R0i(5/10) AAS
一応俺は公式リファレンス読みながら答えてますけどね
外部リンク[html]:docs.unity3d.com
外部リンク:learn.microsoft.com
この辺とか
それが出来る人ならわざわざこのスレで質問しないんじゃないかな?
25
(1): 名前は開発中のものです。 [sage] 2024/11/03(日) 12:08:05.75 ID:PT+Z5R0i(6/10) AAS
>>19
とか言いつつ俺もここで質問してたw
こっちは自己解決したのでもういいです
26: 名前は開発中のものです。 [sage] 2024/11/03(日) 12:08:43.97 ID:PT+Z5R0i(7/10) AAS
>>25
まちがった
>>18です
30
(1): 名前は開発中のものです。 [sage] 2024/11/03(日) 20:01:02.04 ID:PT+Z5R0i(8/10) AAS
>>29
29(1): 19 [] 2024/11/03(日) 19:05:36.58 ID:etQ2u8I9(2/4) AAS
いえ、わたしがメインで疑問に思ってることは

pos.x++;

これでちゃんと変数posが更新されるの?ということなのですが。
更新されますよ
さっき試したらちゃんとx座標が1加算されてた
不安なら自分で実行して確かめてみてもらえれば
33: 名前は開発中のものです。 [sage] 2024/11/03(日) 20:25:13.60 ID:PT+Z5R0i(9/10) AAS
>>31
31(1): 19 [] 2024/11/03(日) 20:18:54.07 ID:etQ2u8I9(3/4) AAS
>>30
いえ、タワシが疑問に思ってるのは
更新されないはずなのに更新されるのはなぜか、ということなのですが
それはインクリメント演算子の仕様としか言いようがないんじゃないですかね
「更新されないはず」とはどういうことでしょう?
そもそも「何が」更新されないはずなの?
posという変数?
C#の文法的には更新されるので、「更新されないはず」という前提がおかしい気がするけど
34: 名前は開発中のものです。 [sage] 2024/11/03(日) 20:48:57.23 ID:PT+Z5R0i(10/10) AAS
一応補足しておくとtransform.positionはプロパティ、つまり内部的にはgetpos(),setpos()みたいなgetter/setterメソッド実行してるんでフィールドではないですよ
だからtransform.position.x++ができない
だってgetposの戻り値で確保された一時変数に加算して放置という無意味な操作をしてるんだもん
transform.setpos(pos)やって初めてゲームオブジェクトの座標という情報が更新される

この辺がソースなので俺の説明が不安なら読んでみるといいですよ
外部リンク:learn.microsoft.com
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.041s