[過去ログ] 【ゲームエンジン】Unity初心者質問スレBuild3 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1(2): 2020/01/11(土)14:28 ID:wPvGtAaQ(1/5) AAS
ゲームエンジンUnityを楽しむ初心者による初心者の為のスレ
その為「アセットを購入しましょう」「チュートリアルやれ」「ググレカス」等禁止
初心者が親身になって初心者に教える。
又ググレの場合、何のキーワードでググるのか書いてね
●リンク
・Unity(日本公式サイト)
外部リンク:unity3d.com
省13
2(1): ダーク王鍬大使 ◆SoVpkB15jY 2020/01/11(土)15:14 ID:HCTv2Y3e(1/2) AAS
質問イイでふか?(^^
変数の配列って宣言するときに要素数も決めなきゃいけないのでひょうか?(^^
あとから一つずつ足していくみたいな形に出来ないと困りまんこ(^^
3: ダーク王鍬大使 ◆SoVpkB15jY 2020/01/11(土)15:16 ID:HCTv2Y3e(2/2) AAS
ああ、List使えばいいんでふね…(^^
4: 2020/01/11(土)15:27 ID:GoAReVTm(1/3) AAS
>>2
List 楽ですよね
Array なら再定義で
配列 再定義で色々でます
5(3): 2020/01/11(土)15:43 ID:wPvGtAaQ(2/5) AAS
前スレ995で質問した者です
アドバイスを元に、parentをnullにしてみると生成されたプレハブがキャンバス外なのか描写されなくなってしまいました
続いて生成後に新しく作成したキャンバスに親を変更すると実行後1回目だけ左端の意図しない位置にプレハブが生成され、その後通常に動作しました
その後も色々試したのですがまだうまく行きません
あとは
・先に位置を取得して新しいキャンバスにプレハブを生成(これだと頂いたアドバイスを活かせませんが・・・)
・デストロイ前に敵のイメージを透明にする
省3
6(1): 2020/01/11(土)15:59 ID:1/8GPuaw(1) AAS
>>5
aのワールドポスとってBの生成時にそれをセットすればいいだけじゃ?parentとかやると話ややこしくなる
7(1): 2020/01/11(土)16:16 ID:wPvGtAaQ(3/5) AAS
>>6
レスありがとうございます
一度ポジションを取得する方法も自分なりにやってみたのですが、instantiateで取得したポジションを指定する方法がわかりませんでした、、
その時VisualStudioではvector3をtransformに変換することは出来ませんといったような警告がでてしまったいたと思います
new vector3を手書きで入力する事は出来るのですが、オブジェクトAの位置をposAに代入、それをInstantiateの引数に記述して反映させる方法がわかりません
Instantiate(プレハブ,posA)の様に書く方法はあるのでしょうか?
8(1): 2020/01/11(土)16:17 ID:ftB0znZP(1) AAS
>>5
カンバスオブジェにテキストを貼ったプレハブじゃなかったのか。すまん。
そのプレハブにカンバス入れて生成しては?
なら、親外しても良いはず。
9(1): 2020/01/11(土)16:19 ID:joHWbw4j(1) AAS
>>5
Destroy前に透明にしておくのがわりと定石っぽいと思う
どうせ破壊時にSEとか演出入れる場合即Destroyはできなくなるし
数が増えてくるとDestroyしてInstantiateしてってやってると思ってるより重くなっちゃうのでしっかりプーリングするのを覚えるといいことづくめよ
10(1): 2020/01/11(土)16:27 ID:wPvGtAaQ(4/5) AAS
>>8
なるほど、キャンバスをMainViewと名付けてその中に全てのオブジェクトを置いていたのでキャンバスごとプレハブにするのは思いつきませんでした、試してみます
ありがとうございます
>>9
たしかに今の動作が実装できたら今度は破壊アニメーションの終了後に〜と言うのを調べようと思っていたので透明化が定石なのであれば一石二鳥かもしれませんね
ゲーム作りもプログラミングも初めてなのでプーリングと言うのはなんの事かわかりませんが調べてみます
ありがとうございます
11(1): 2020/01/11(土)16:35 ID:eNMw2FnY(1) AAS
>>7
敵とダメージをuGUIに置いているとして、やりたいことをベタ書きするならこんな感じ
var enemy = 敵.GetComponent<Transform>();
var canvas = enemy.GetComponentInParent<Canvas>();
var damage = Instantiate(ダメージプレハブ, canvas.transform) as GameObject;
damage.transform.position = enemy.position;
12(1): 2020/01/11(土)17:08 ID:wPvGtAaQ(5/5) AAS
>>11
出来ました!ありがとうございます
この処理でも最初の一回が左端に表示されてしまったのですが、実行を押した瞬間に攻撃していたので処理が間に合わない(バグ?)みたいで、戦闘のスタートとストップボタンをつけて実行後すぐに戦闘開始しない様にしてみたら正常に動作しました
テキストを好きな位置に生成するという単純な事で半日使ってしまいましたが良い勉強になりました、ありがとうございました
13: 2020/01/11(土)17:10 ID:GoAReVTm(2/3) AAS
>>10
あぁもし破壊後→破壊アニメ、
その間にダメージが出て文字が大きくなりながら上に上がる
んで終了とかなら、アニメで終了時に関数呼ぶのがいいかと思います
14: 2020/01/11(土)17:12 ID:GoAReVTm(3/3) AAS
>>12
プレファブをhide状態で作っておいて、生成してからhide解除するという方法でいけるかもですね
15(2): 2020/01/12(日)21:58 ID:6ETev4FX(1/2) AAS
Lerp() と Slerp() で滑らかにオブジェクトを回転させたいんだけど、FixedUpdate() 内で使ったら、
それらの回転の終了を知るにはどうするんだろう?
FixedUpdate() 内であるタイミングで滑らかに回転してから次の処理を走らせたい。
そもそも 連続するフレーム内での Lerp() と Slerp() の使い方がわからない。
初心者サイト見ても、FixedUpdate() 内で動的に開始と終了ベクトルを指定するサンプルとかがない。
実践的にはどう使うの? それとも UniRXとか使うの?
16(1): 2020/01/12(日)22:05 ID:GUfBc0Nv(1) AAS
>>15
【Unity入門】LerpとSlerpの使い方と違い!自在に補間をかけよう
外部リンク:www.sejuku.net
公式
外部リンク[html]:docs.unity3d.com
読んだ上での質問なのかな?
あ所でオブジェクト移動にfixed 使うのは何故?
17: 2020/01/12(日)22:23 ID:6ETev4FX(2/2) AAS
>>16 さっそくありがとう。
fixed は勘違いで、今処理を書いてるのは Update() だった…
教えてもらったリンクを見たけど、どうやら自分の要件に Lerp() とか Slerp() は適してないかな。
今悩んでた実装は、初代PSのトゥームレイダーみたいにプレイヤーがブロックを押したり、または持ち上げたりするところだけど、
プレイヤーがブロックに対して斜めだと、後々の制御が難しいから、一旦ブロックを押したり、持ち上げたりする正しいポジションに
滑らかに移動・回転させてから、ブロックを押したり、持ち上げたりする動作に移ろうとしてた。
というか、この通り実装すればいいだけか。
18(2): 2020/01/13(月)08:38 ID:QiViT9Gr(1/12) AAS
Quaternion が難しすぎて滑らか回転の独自実装は無理だった…
ので Update() の中で Lerp を使うことにしたけど、
Lerp の終了判定はどうするの?
※speedは適当
// Z軸正方向
transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(0, 0, 0), speed * Time.deltaTime);
// Z軸負方向
省15
19(1): 2020/01/13(月)10:48 ID:Rcgjsxsv(1/11) AAS
>>18
終了条件は何なんだ?
x軸だけまず考えてみよう
何度回転したら止まるのかな?
20: 2020/01/13(月)11:04 ID:QiViT9Gr(2/12) AAS
>>19
終了条件は Quaternion Lerp (Quaternion from, Quaternion to, float t);
from が to に達した時が終了条件。
Z軸正・負方向、X軸正・負方向の4方向で頼む。
初心者サイトではたいてい "解説された軸の条件" だけでは動くが、実践ではまるで使えない。
単純な話だよ、"プレイヤーを東西南北の方向に滑らかに正対させる"
そして、正対する動作が完了してから、次の動作を開始させたい。
省1
21(5): 2020/01/13(月)11:46 ID:Rcgjsxsv(2/11) AAS
画像リンク[png]:i.gyazo.com
これ見て理解して
単純にLerpの事理解してないと思うけど、Time.deltaTime という浮動小数点を使っている以上90度にはならない
最後のprint文表示すると分かるけど永遠と89.xxxxxと表示される
インスペクタは省略表示だからそれに惑わされないように
それから同じオブジェクトで複数軸の回転を行うと当然ながら「Quaternion.Euler(0, 90, 0)」では取れないのは分かるよね?
22(1): 2020/01/13(月)11:52 ID:eGNaRuP0(1/2) AAS
Lerpの終了条件って、別にLerpは発動したらずっと動く何かじゃないぞ?
たんに0-1のあいだでfrom,toの間の補完をしてくれるだけだぞ?
お前が次に進めるんだよ!
23: 2020/01/13(月)11:54 ID:Rcgjsxsv(3/11) AAS
あ、あとStartに書いたのは
Mathf.Approximately(transform.rotation.eulerAngles.y , 90f) これやりたかったので
一応こちらでも判定は行けると思う
24: 2020/01/13(月)11:56 ID:Rcgjsxsv(4/11) AAS
>>22
だからその上にも書いたけど、浮動小数点をステップに浸かってるからずっとToまでやる訳ですよ
25: 2020/01/13(月)12:15 ID:QiViT9Gr(3/12) AAS
>>21
素晴らしい! 教えてもらった方法で自分がやりたいことが完全に出来た!
4個処理を書いてたのは、プレイヤーがブロックのどの方向に接触したかで、
処理を分岐させる為で、同時に処理するわけではなかった。申し訳ない。
いや、マジでありがとう。本当に理解している人から教えてもらえて、すごく助かった。
26(3): 2020/01/13(月)13:00 ID:auL79zSW(1/4) AAS
>>21
単純にUnityのこと理解してないと思うんだけど
現在位置からターゲットに向ける用途的にはLerpでなくTowards使うんだぜ
transform.position = Vector3.MoveTowards(transform.position, target.position, moveSpeed * Time.deltaTime);
if(transform.position == target.position) // 移動完了処理
transform.rotation = Quaternion.RotateTowards(transform.rotation, target.rotation, rotSpeed * Time.deltaTime);
if(transform.rotation == target.rotation) // 回転完了処理
27(1): 2020/01/13(月)13:52 ID:Rcgjsxsv(5/11) AAS
>>26
ターゲットあるならLookat の方が全然いいんだぜ
って、なやり方なんか色々あるのやで
初心者スレなのよここ
28: 2020/01/13(月)15:25 ID:6zyx93de(1/4) AAS
(補間を求めているところにLookAt……?)
29: 2020/01/13(月)16:28 ID:yBWGUThF(1/3) AAS
まぁ、本人が満足してるからOKだね。
30: 2020/01/13(月)16:29 ID:Rcgjsxsv(6/11) AAS
(ターゲットに向ける用途的に)
(って、読めないのかなぁ)
31: 2020/01/13(月)16:36 ID:auL79zSW(2/4) AAS
(どう見ても移動と回転の補間としてMoveTowardsまで書いてるのにLookAtって言っちゃう人って…)
って、ごめんマジで教えて
LookAtで座標移動できたっけ?
なんでこの流れでLookAtが出て来るのか分からんぞ
32: 2020/01/13(月)16:37 ID:QiViT9Gr(4/12) AAS
そもそもの質問がターゲットを追うじゃなくて、
"プレイヤーを東西南北の方向に滑らかに正対させる"
だよ。
で、>>21 の方法で求める処理が実装出来た、サンキュー!
33: 2020/01/13(月)17:04 ID:QiViT9Gr(5/12) AAS
>>26
は質問の意味が理解できなかったんだね。スマンスマン。
"プレイヤーを東西南北の方向に滑らかに正対させる"
なので、Lerp が正解だ、RotateTowards では希望の動作にならない。
しかし皆ありがとう。理解するのにとても助けになった。
34: 2020/01/13(月)17:31 ID:6zyx93de(2/4) AAS
(あ、これ一人で質問して一人で回答してる系の痛い奴だ……前も見たことある)
35: 2020/01/13(月)17:40 ID:Rcgjsxsv(7/11) AAS
ほんと、答え書けないのにそう言うこと書くとか、何かの病気なんだろうね
可哀想に
36(1): 2020/01/13(月)18:11 ID:auL79zSW(3/4) AAS
初心者に不正解扱いされて笑った
つまりレベル下げて書くとこういうことだろ?
transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(0, 90, 0), speed * Time.deltaTime);
if(transform.rotation == Quaternion.Euler(0, 90, 0)) // 処理
>>18の Lerp を RotateTowards に置き換えればそのまま動くんだよ
それをターゲットがあるとか無いとか初心者ならともかくドヤ顔でレスしてるID:Rcgjsxsvが言い出すのは素人感出し過ぎだぜ
まあ初心者が答えるスレっぽくて俺は嫌いじゃないが
37: 2020/01/13(月)18:42 ID:QiViT9Gr(6/12) AAS
>>36
ん? それでは動かないぞ。今試した。
>>21 の方法なら動いたけどな、確かに>>21の言う通り浮動小数点を理解出来てないっぽいね。
自分は Unity初心者で、初心者スレで訪ねてるんだから、>>21 のように、
わざわざコードを自分で書いて、動くか試してから教えてくれる人に本当に感謝したい。
まあ、間違って動かないコードもそれなりに参考になるからサンキュー!
38(1): 2020/01/13(月)18:50 ID:Rcgjsxsv(8/11) AAS
ドヤ顔でレスかぁ
前スレからの糖衣構文君思い出したわ
39: 2020/01/13(月)18:59 ID:QiViT9Gr(7/12) AAS
まず >>26 で ID:auL79zSW が
"現在位置からターゲットに向ける用途的にはLerpでなくTowards使うんだぜ" と言ってるのが、>>15 からの質問の文脈を無視してるね。
で、>>27 で ID:Rcgjsxsv が
”ターゲットあるならLookat の方が全然いいんだぜ” と言っているのは >>26 でターゲットと出てきたからだ。人の話を聞いてそれに反応してるんだよね。
でも、ドヤ顔して教えてくれて全然かまわないんだ。Unity初心者でも参考になる情報とそうではない情報の区別はつくから。
というか、自分の質問で争いになって申し訳ない気持ちだ。皆さんどうもありがとう。
40: 2020/01/13(月)19:46 ID:eGNaRuP0(2/2) AAS
>>38
ああお前勘違いLINQ理解君?
41(1): 2020/01/13(月)20:01 ID:6zyx93de(3/4) AAS
Lerp勘違い理解君か
初心者スレが魔境過ぎて中級者の俺には付いてけない
42: 2020/01/13(月)20:15 ID:QiViT9Gr(8/12) AAS
質問スレなんで、質問に対する解決策の提案が出来なければ、誰にも感謝されないよ。
仮に、提案が間違っていても問題ない。一緒に考えてくれることがとてもありがたい。
教えてくれて本当にありがとう。
43(1): 2020/01/13(月)21:07 ID:auL79zSW(4/4) AAS
物知り顔でドヤってる>>21があまりにも愚かだったから突っ込んだだけで感謝とかそういうのは別に求めてない
……というかてめえには一言足りとも語りかけちゃいないのになんでお前がいちいち答えるんだよ、構ってちゃんかよ
44: 2020/01/13(月)21:09 ID:Rcgjsxsv(9/11) AAS
>>41
自称中級者なのになんで初心者スレきたの?
寂しいの?
書かないと死ぬ病気なの?
構ってほしいのかな?
なら雑談スレいけやぼけ
45(1): 2020/01/13(月)21:11 ID:Rcgjsxsv(10/11) AAS
>>43
だから糖衣構文君は雑談スレで勘違いして暴れていいよ
ほんと動かないコード書いて恥ずかしくないのかね
上下前次1-新書関写板覧索設栞歴
あと 957 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.020s