[過去ログ] 【3Dゲームエンジン】Unity質問スレッド30 [無断転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
526
(1): 2017/08/11(金)07:35 ID:fbd1ELRy(3/4) AAS
>>525
精神障害者を理解しようとするな
527
(3): 2017/08/11(金)07:36 ID:/wXKl2Ja(1/8) AAS
C#で書いてます。
Update内でフラグのOnOffを確認して都度一度だけ処理させたいのですが、どのように書けばいいでしょうか?
ひとつの変数を0にする、程度でもいいので例を教えてもらえるとうれしいです。

やってみたこと
SetTriggerでフラグを立ててif文で処理
結果
SetTriggerで立てたフラグの取得方法が判らなかった

よろしくお願いします
528
(1): 2017/08/11(金)07:56 ID:zcZ67cQE(2/7) AAS
>>527

そこまでわかってるなら、そのフラグでifでやればいんじゃね?
何か他に問題が有りそう?
529
(1): 2017/08/11(金)08:01 ID:zcZ67cQE(3/7) AAS
>>527
あぁそういう事か。ならもう一つフラグかな。
そのフラグを処理先で切り替えて、二つの条件が揃ったらonoffの処理をする。
530
(1): 2017/08/11(金)08:30 ID:/wXKl2Ja(2/8) AAS
>>528-529
こんな時間にありがとうございます。
お恥ずかしながらまったくのど素人で、SetTriggerでOnにしたフラグを、何をどう書けば確認できるのかさっぱり判らない段階です。
int xで例えるなら、
int x = 1 はできても、if(int x == 1) が書けないという感じです。
531: 2017/08/11(金)08:37 ID:/wXKl2Ja(3/8) AAS
混乱してきて何を書いてるのか自分でも判らなくなったので実際に書いているスクリプトで質問させてください。

アタッチしているスクリプトは二つ
ctrl.cs
common.cs

ctrl.cs
public class ctrl : MonoBehaviour
{
public int sys00 = 1;}
532
(2): 2017/08/11(金)08:49 ID:/wXKl2Ja(4/8) AAS
ヒエッ書き込みミス・・・
//ctrl.cs
public class ctrl : MonoBehaviour{
public int sys00 = 1;
}

//common.cs
public class common : MonoBehaviour{
int x = 100;
}

void Update (){
Debug.Log(x);
if (this.GetComponent<ctrl>().sys00 == 1){
x = 99;
}
}

このうち、commonのif文がうまく実行できません。
・確認できていること
commonのUpdateで実行しているDebug.Logは確かにint xを返している
ctrlのint sys00の値を変更してもint xは99を返さない(実行されてない)
・できていないこと
同じゲームオブジェクト内の他のスクリプトの変数を参照できていない
・おかしいと思うところ
if (this.GetComponent<ctrl>().sys00 == 1)
こんな単純なことをと思いますが、どうぞよろしくお願いします。
533: 2017/08/11(金)08:50 ID:zcZ67cQE(4/7) AAS
>>530
if( x == 1){
} 
534: 2017/08/11(金)09:02 ID:zcZ67cQE(5/7) AAS
thisじゃなくて一旦変数に入れないとダメじゃないかな?

簡単にするなら、xをstaticにするのがいい。その場合はもっと複雑な名前にしないといかんけどね。
535
(2): 2017/08/11(金)09:07 ID:zcZ67cQE(6/7) AAS
ctrl abc = this.GetComponent<ctrl>();
if (abc.sys00 == 1){
x = 99;
}

これでthisがだめなら、thisのgameobjectも取得して、それに交換。
536
(2): 2017/08/11(金)09:36 ID:seM6V/nM(1/5) AAS
>>527
よくあるやり方だと前回確認時の状態を保持する変数作って確認時に前回と今回の状態が違っていれば処理するとかかね
537
(1): 2017/08/11(金)09:43 ID:seM6V/nM(2/5) AAS
>>536
ごめん、これ無視して

上手く実行できない、ってのは実行時にエラー出てるの?
debug.logでgetcomponentした値とそいつから見たsys00を出力したらちゃんと意図した値が出る?
538
(3): 2017/08/11(金)09:57 ID:fbd1ELRy(4/4) AAS
this.GetComponent<ctrl>()のthisはcommonクラスがアタッチされているゲームオブジェクトを指すんじゃなくて、commonクラス自体のインスタンスを指すんだから、そもそもthis.GetComponent<ctrl>()では何も取れてないんじゃないの?
エラー出てるならエラーを貼れ
539
(1): 2017/08/11(金)10:10 ID:4hQFH2dY(1/2) AAS
>>532
スクリプトは難しいですね。アセットをかっちゃえばそんな苦労もないですよ
540
(1): 2017/08/11(金)10:41 ID:AX6e9G6c(1) AAS
アセットを買えばこんなスレを見なくても済みますよ
541
(2): 2017/08/11(金)10:43 ID:/wXKl2Ja(5/8) AAS
>>535-536 すみません、ctrl abc がもうすでにわからず・・・
>>537-538 >>532で、エラーは何も出ず、commonに書いたif文が実行されず、ctrlで宣言した際の1を返し続ける状態です。

そこで、外部リンク:qiita.com こちらを参考に、一番はじめの「publicで取得」をなぞり
ctrlのsys00をcommonのxsys00に代入し、Update関数のDebug.Logでxsys00を表示するだけの処理をしようと思いましたが、同じくエラーは出ず、xsys00を宣言した際に入れた値が表示されるだけでした。

//ctrl.cs
public class ctrl : MonoBehaviour{
public int sys00 = 1;
}

//common.cs
public class common : MonoBehaviour {
public ctrl ctrl2; //ここでctrl.csを代入?
int xsys00 = 10; //代入されてない場合は10のまま
}

void Start () {
xsys00 = ctrl2.sys00; //ここでctrl.csのsys00をxsys00に代入
}

void Update () {
Debug.Log(xsys00); //sys00を代入したxsys00を表示
}

結果:10を返し続ける(xsysに代入されていない)

知りたいこと
ほかのスクリプトの変数を取得、操作する方法
542
(1): 2017/08/11(金)10:48 ID:zcZ67cQE(7/7) AAS
>>541
>538の方が言ってる通りだと思う。
getComponentのところがまずい。
そして、541最後の知りたい事がそれに当たる。

外部リンク:hiroyukitsuda.com
543: 2017/08/11(金)11:13 ID:L26ZWthx(1/2) AAS
>>541
Debug.Log("お前は何を言っているんだ:"+this.GetComponent<ctrl>().sys00);
544
(1): 2017/08/11(金)11:32 ID:/wXKl2Ja(6/8) AAS
>>535>>538等で詳しく触れられたthisの扱い、ようやく理解でき、
>>542のURLの先を参考に入力してみたところ無事取得することができるようになりました。
ですが、そこで2点疑問ができました。

・sys00=2としているはずなのに、しつこく0を返すのでctrlのUpdate関数にDebug.Log(sys00)を放り込んだところ、同じく0を返していました。
Logを表示する前に改めてsys00=2;と記述したところ無事に2を帰すようになったのですが、
MonoBehaviourで宣言した
public int sys00 = 2;
は、sys00が作られるだけで、宣言時に中身は指定できないのでしょうか?

・スクリプトをいじっていると時折プレビュー開始時に自動で一時停止されるのですが、これはどのような場合なのでしょうか?
545
(1): 2017/08/11(金)11:50 ID:seM6V/nM(3/5) AAS
これ、null refのエラー出るよね?
エラー無いってのは質問者が気付いてないだけ?
俺の勘違い?
546
(1): 2017/08/11(金)11:51 ID:seM6V/nM(4/5) AAS
>>544
一時停止はエラー時に停止するオプションが音になってるからでは?
547
(1): 2017/08/11(金)11:56 ID:L26ZWthx(2/2) AAS
出来てない気しかしない
明らかにおかしい
548
(2): 2017/08/11(金)12:27 ID:/wXKl2Ja(7/8) AAS
>>546
ありがとうございます。そういう設定をどこかでやっているのですね

>>545,547
どこで確認したらよいでしょうか。
ctrlのStart関数にsys00 = 2;を追記、

commonのUpdate関数を
void Update () {
ctrl d1 = GetComponent<ctrl>();
Debug.Log(d1.sys00);
}
と記述したところ、無事一時停止もなくなり、ログは2を返すようになりましたが、誤りでしょうか?
正しく動作していればctrlのMonoBehaviorに記述したpublic int sys00 = 2;で2を返すようになるのでしょうか?
549
(1): 2017/08/11(金)13:16 ID:4hQFH2dY(2/2) AAS
>>548
有料アセットを使えばなりますよ
550
(1): 2017/08/11(金)13:31 ID:seM6V/nM(5/5) AAS
>>548
ログの中に赤い!マークが出てるときあるでしょ?
それがエラー
ログが出てるウィンドウがconsole windowでそこにあるerror pauseが有効になってるとエラー時にエディターが一時停止する

一時停止した状態からそのまま再度すすめるとそのエラーを無視して無理やりすすめるからおかしな動作につながる
なれないうちはエラーが出たらすぐにそのエラーを解決したほうが良い
エラーを無視して進めると、先に出たエラーを起因に後続もエラーになることがある
だからエラーは基本的に一番最初に出るものに注目する

黄色いマークは警告だから直ちに影響は無い場合もあるけど、基本的にこちらも解決した方がいい
警告されている内容を理解し、その警告は現状無視して問題ないって確信してるならおk
551
(1): 2017/08/11(金)14:28 ID:sWP9eS8j(1/2) AAS
アセットを買えばエラーは出ませんよ
552
(1): 名無し@キムチ 2017/08/11(金)14:31 ID:t/bAY03d(1/2) AAS
外車を買えばエラーは出ませんよ
553
(1): 2017/08/11(金)14:43 ID:/wXKl2Ja(8/8) AAS
>>550
ありがとうございます。このレベルが判らないので確信は持てませんが、今のところ特に問題ないようなので、これで大丈夫だと納得しておきます。
554
(1): 2017/08/11(金)15:42 ID:sWP9eS8j(2/2) AAS
>>553
エンジニアを辞めれば質問も出ませんよ
555
(1): 2017/08/11(金)15:56 ID:TjGjs7SA(1) AAS
※エンジニアとは、アセットはミドルウェア(ドヤァ)とか
恥かしい勘違いを自信タップリに強弁する頭の可笑しい人の事
1-
あと 447 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.025s