【3Dゲームエンジン】Unity質問スレッド32

■ このスレッドは過去ログ倉庫に格納されています
1名無し@キムチ
垢版 |
2017/10/30(月) 05:05:35.00ID:xnHTCaF3
フリー版で開発したゲームは個人・法人を問わず追加のロイヤリティーなしで販売できます。
プラットフォームサポートはiPhone/iPod Touch/iPad、Mac、PC、Web、Wii、Xbox360、Android、PlayStation 3、PlayStation 4、PS Vita他

次スレは>>950以降にできるだけ早く(できれば回答者が回答した後にでも余裕を持って)建てて下さい。

■Unity 2ch Wiki(まとめ、過去ログ、リンク集)
http://www24.atwiki.jp/unity2ch/

●リンク
・Unity(日本公式サイト)
http://unity3d.com/jp
・マニュアル
 http://docs.unity3d.com/ja/current/Manual/index.html
・チュートリアル
 http://unity3d.com/jp/learn/tutorials
・スクリプトリファレンス
 http://docs.unity3d.com/ja/current/ScriptReference/index.html
・FAQ
 http://unity3d.com/jp/unity/faq
・MSDN
 http://msdn.microsoft.com/ja-jp/ms348103←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。

前スレ
【3Dゲームエンジン】Unity質問スレッド31
https://mevius.5ch.net/test/read.cgi/gamedev/1504366121/
786名無し@キムチ
垢版 |
2017/12/11(月) 19:11:07.14ID:bqjs8mgU
>>782
エンジニアよりキムヨナと知り合いたいな・・
2017/12/11(月) 19:11:25.30ID:6tubAqHL
>>781
root同士じゃないと出来ない組み合わせなかったっけ?
cとbを
c.transform.parent = null;
b.transform.parent = null;
で親子解除すれば出来る
788名無し@キムチ
垢版 |
2017/12/11(月) 19:16:57.23ID:bqjs8mgU
>>785
初心者とはそんな難しいもののことではない。
単純にビギナーのことだ。
2017/12/11(月) 19:20:05.88ID:rG1bqsx7
そういえばUnity初心者スレってないのな
2017/12/11(月) 19:32:44.82ID:T/JrBtRm
>>788
ビギナーは英語で初心者という意味
>初心者とはそんな難しいもののことではない。
>単純に初心者のことだ。
自分の発言が情けないほど意味不明になると思わない?
基礎を学ばずにいるとこうやって無能を晒し恥をかくだけ
分かりやすい例になってくれてありがとう!
2017/12/11(月) 20:07:01.75ID:qY5Wc6Xa
チュートリアルすらやってないドキュンとか、
補助輪取れないアホは無視でいい
2017/12/11(月) 20:22:52.74ID:g06Ln43v
>>785
完全にクレーマーw
2017/12/11(月) 20:52:55.52ID:u584Mmdp
>>785
では質問、外部サイトの情報をスクレイピングして情報を抽出するゲームを作成しています。
読み出すサイトの文字コードに合わせてSystem.Text.Encodingクラスを用いて変換しているのですが、エディタ上で動かすと正しく動きますが、実機にビルドするとsjisやeucjpなどでエラーとなります。これは何故でしょうか?
2017/12/11(月) 21:01:24.21ID:u584Mmdp
さて>>793の答え合わせだ。
スタンドアロンプレイヤーはデフォルトでI18n.dllとI18n.CJK.dllを内包しないから、これらをアセット内にぶち込めば解決するが正解な
どうせ質問がちょっと知識や経験が必要な領域になると皆スルーして俺しか答えなくなるんだから仲良くしとけ

>>784
それはヒエラルキー構造もスクリプトも変更する必要はなく、パーティクルのSimulation Spaceを変えるだけで実現可能だよ
エミッタ(=ParticleSystem)自体はどちらであっても車本体の子オブジェクトにして問題ない
2017/12/11(月) 21:03:22.24ID:wTfFWu/6
2.5dのコマンドRPG作るのにplaymakerって使えますかね?
ターン制の処理をこれにさせたいのですが買おうか迷ってます。
2017/12/11(月) 21:04:49.25ID:pffoEIhS
使える
2017/12/11(月) 21:08:29.22ID:7N8aCxOe
785は滑稽だな
リテラシに慣れていないと、公式マニュアルを読んでも、キーワードを聞いても全く頭に入ってこない人もいる
一般的に言って誰にも苦手な分野はある。例えば日本の役所手続きが良い例
適性が無いとの非難があるかもしれないが、本来、道具は、適性とは無関係に操れるものであるべき
ところで自由競争戦力スキルへの適応を2chで強要するのは傲慢無恥・視野偏狭で滑稽である(プ
2017/12/11(月) 21:09:37.13ID:lT/DnU8s
ID:u584Mmdpに全部丸投げで解決だなw
2017/12/11(月) 21:15:59.64ID:L0Sd+qXD
趣味なんて出来なくても死ぬわけじゃないし、
乗れもしない一輪車に勝手に跨って勝手に傷だらけになってるだけじゃない
怪我と弁当は自分持ちで頼むよ
2017/12/11(月) 22:02:19.01ID:SkZjimvo
詳しい人が降臨しているようなので質問!

角速度
Rigidbody.angularVelocity = new Vector3(a, b, c)
による回転を1秒間行った場合の、

向き(角変位)
Rigidbody.rotation
を、あらかじめ計算でQuaternionを求めておきたいのですが、

Rigidbody.rotation = Quaternion.AngleAxis(angle, axis)
で入力する場合、
float angle = いくつ?
Vector3 axis = いくつ?
に設定すれば良いのでしょうか??

普段は実際に時間をかけて回転させるのですが、
ショートカット入力によって、瞬間的に向き変更したためです。

普段は速度velocityで移動させていたのを、
瞬間的に位置positionで変位させるのと同じ感じです。
2017/12/11(月) 23:16:52.47ID:T/JrBtRm
初心者は基礎勉強を習得した後に応用問題などで躓く者
無能は怠慢で基礎勉強をせずに全てに躓く者
そして自分は初心者だと勘違いしてる者
無能と初心者は全然違う

初心者には教えるが怠け者なだけの無能には教えたくはないって人が多いと思う
質問する気になれないなんて者は来なくていいと思う
そいつが消えた所でそいつが困るだけでこっちは何も困らない
どうぞ勝手にお帰り下さいなんじゃないかな?
ましてや自分は初心者だから教えてもらって当たり前なんて思ってる勘違いには特に

悔しいなら無能をやめて初心者になり
教えたい人が思わず教えてやりたくなるような質問したら?
2017/12/11(月) 23:21:47.98ID:T/JrBtRm
>>794
質問ではなく相手を試す問題だと見抜かれてスルーされた事にそろそろ気づこうか

>>797
悪いが発言内容が超明後日方向でずれてるから
2017/12/11(月) 23:28:43.27ID:T/JrBtRm
>>794>>797の2人は俺の考えに反対やら滑稽やらなら
ニセ初心者のしょーもない今までの質問全てに全部答えてあげてないと
俺そういう場面見てないんだけど
今も俺にレスするよりそっちが先とおもうけど未処理の物が沢山あるよ
明日からもずっと頼むよお2人さん
俺の考えに反対で反論してくるのはそういうことだから
2017/12/11(月) 23:32:55.29ID:7N8aCxOe
ビッグアップル大丈夫か
2017/12/12(火) 00:07:46.96ID:yWI4yO+J
まさかツッパリが足りずに弱音を吐いて「大目に見てくださいよ〜〜〜><」とか懇願してるわけじゃあるまいな
2017/12/12(火) 00:18:39.38ID:awDx9SbB
試行錯誤が大好きなら一生迷走しててええんやで
遠慮すんなよw
2017/12/12(火) 00:29:29.52ID:K5+QKreg
>>800
偉そうに講釈垂れてる人が大勢いるのにこれにレスがつかないの酷すぎないか…

キッチリ1秒後なら

var r = Mathf.Rad2Deg;
Rigidbody.rotation *= Quaternion.Euler(a * r, b * r, c * r);

でどないでしょ
2017/12/12(火) 00:36:52.31ID:K5+QKreg
>>800
rigidbody.rotation *= Quaternion.Euler(rigidbody.angularVelocity * Mathf.Rad2Deg)

のほうが簡単か
2017/12/12(火) 02:09:47.10ID:s3bcy12n
@angle = Vector3(a, b, c).magnitude * Mathf.Rad2Deg

3Dの場合、angularVelocityは、rad/秒で入力するので、
a,b,cはrad/秒で入れているはずだから、
angleは度での入力になるため、
* Mathf.Rad2Degで、rad→度の変換が必要ですね

Aaxis = Vector3(a, b. c).normalized

これをQuaternion.AngleAxisに入れると、1秒後の回転状態になります
試してみて下さい

Quaternion.Eulerは、
Z軸回転→X軸回転→Y軸回転の連結回転になるので、
計算結果が、角速度での回転状態と合わないですよ

angularVelocityは全軸同時回転ですから
回転ベクトル=回転角 * 回転軸ベクトル
で計算しないとダメなはず
2017/12/12(火) 02:14:08.74ID:K5+QKreg
なるほど
勉強になった
ありがとう
2017/12/12(火) 04:00:52.95ID:kM1br0bK
>>794
"unity shiftjis error"でぐぐって一番上に出てくる内容コピってどやってんじゃねーよw
仰られてる知識や経験は、その問題に関してはとくに必要なさそうです
2017/12/12(火) 06:49:36.70ID:yWI4yO+J
809
そういう「より優れた仕様奴隷状態」をドヤる話だと思ってたわ
2017/12/12(火) 07:26:11.46ID:OlgvJzEy
>>811
うん、そのドヤ顔を期待してたw
全く待たずに回答投下してるのに顔真っ赤でスルーされた事に気づけとか書いてる奴がいたのには驚いたが

だかな、この質問俺が数年前過去スレに質問して回答が得られなかった質問なんだわ、その後自己解決して方法も書いたはず
2017年4月のそのTIPS見て、同じようなことで困ってる奴多かったんだなと懐かしく思った記憶がある

>>800
すまん、昨日は撒き餌撒いて寝てしまったので見てなかった
回答はついてる様なので省略するが、物理エンジンで動かす場合、摩擦やら他のオブジェクトとの衝突やらで結果がズレる可能性があることには注意な
2017/12/12(火) 07:26:33.24ID:yWI4yO+J
仕様奴隷「俺はこんなにも素晴らしい奴隷なんだ!もっと俺をこき使ってくれぇええ!!」(ドヤァアアア!!!)
815名前は開発中のものです。
垢版 |
2017/12/12(火) 07:29:16.97ID:QJDJOOiE
レベルデザインに使えるツール教えてください
アセットでもいいです
2017/12/12(火) 07:34:12.06ID:yWI4yO+J
回転もデフォで減速するみたいだな
いちいち生意気なんだよUnity
2017/12/12(火) 08:13:35.13ID:tVhYuHY1
>>815
どんなのを求めているかわからないけどアセットでもいいなら
ProBuilderなんてどうだい?
818名前は開発中のものです。
垢版 |
2017/12/12(火) 09:37:16.36ID:QJDJOOiE
>>817
アセットのセットみたいなのがほしいです
フリーで
2017/12/12(火) 10:39:07.71ID:qFAu6kJp
アセットじゃないけどスケッチアップなんてどうだい?
CADツールだけどUnityでそのままスケッチアップ形式のファイルを読み込むことができるんだ

そしてウェアハウスっていうUnityでいうアセットストアのようなところで他人の作ったオブジェクトをダウンロードできるんだ

ただし無償版でどこまでできるか把握してないから
気になったら調べてごらんよ
2017/12/12(火) 11:37:29.41ID:V4vKOuq6
VS for Macでコーディングしている人いる?
予測コーディングが効かなかったり、最近のアプデで日本語入力がリアルタイムで表示されなくなったり、子音の入力が反応悪かったり
色々ボロボロで進捗やばいんだけどMacでの開発に向いてるテキストエディタ何か無いかしら?
2017/12/12(火) 13:51:05.12ID:awDx9SbB
>>811
どうせキムチだよw
2017/12/12(火) 15:35:32.47ID:ICWFqCcb
>>820
neovim
2017/12/12(火) 17:04:49.48ID:SinzmT6m
VS codeを使うといい
for macは対応が不完全なゴミだがcodeはmacでも完璧に使える
金払ってもいいならRider
2017/12/12(火) 17:13:54.71ID:md8fOJvX
VS codeの怒涛の更新ペースは何事かと思うw
2017/12/12(火) 18:36:56.62ID:w86KIWp6
>>807 >>808
>>809
ありがとうございます!
両方やってみました

Quaternion Q;
Vector3 axis, Vdeg, Vrad;
float angle, t;
Rigidbody rb;

void Start () {
 rb = GetComponent < Rigidbody > ();
 Vdeg = new Vector3(45, 30, 0);
 Vrad = new Vector3(45, 30, 0) * Mathf.Deg2Rad;
 Q = rb.rotation;
}
2017/12/12(火) 18:37:14.48ID:w86KIWp6
void FixedUpdate () {
 t = Time.time;
 if (t == 0) {
  rb.angularVelocity = Vrad;
 } else if (t == 1.0f) {
  Debug.Log ("t=" + t);
  Debug.Log ("angularVelocity:" + rb.rotation.eulerAngles);
  rb.angularVelocity = Vector3.zero;

  //angle = Vrad.magnitude * Mathf.Rad2Deg;
  //axis = Vrad.normalized

  angle = Vdeg.magnitude;
  axis = Vdeg.normalized;

  rb.rotation = Quaternion.AngleAxis (angle, axis);
  Debug.Log ("AngleAxis:" + rb.rotation.eulerAngles);

  rb.rotation = Quaternion.Euler(Vdeg);
  Debug.Log ("Euler1:" + rb.rotation.eulerAngles);

  rb.rotation = Q * Quaternion.Euler(Vdeg);
  Debug.Log ("Euler2:" + rb.rotation.eulerAngles);

  rb.rotation = Quaternion.Euler(Vdeg) * Q;
  Debug.Log ("Euler3:" + rb.rotation.eulerAngles);
 }
}
2017/12/12(火) 18:41:32.25ID:w86KIWp6
結果です!

angularVelocity = new Vector3(45, 30, 0) * Mathf.Deg2Rad
を入力すると、

@angularVelocity:Vector3(42.4, 37.4, 15.0)
 1秒ピッタリで止めるには、FixedUpdate内でないとダメのようですね

 Invoke("Stop", 1.0f)で呼び出すと、
 angularVelocity:Vector3(43.1, 38.6, 15.7)と
 1フレーム分くらいの遅延が生じる模様・・・

AAngleAxis:Vector3(42.4, 37.4, 15.0)

BEuler1:Vector3(45, 30, 0)

CEuler2:Vector3(45, 30, 0)

DEuler3:Vector3(45, 30, 0)

angularVelocityをEulerでQuaternionに入れちゃうと、
角速度による回転結果のQuaternionと少し違うようです・・・
AngleAxisでQuaternionに入れる方が正しいみたいですね
2017/12/12(火) 18:52:30.96ID:w86KIWp6
>>816

回転が勝手に減速する話は本当ですか?
AngularDrag = 0にしてない・・・とかではなくて??

RigidbodyをangularVelocityやAddTorqueで回転させて、
1秒ごとにangularVelocityを表示させても、
回転速度は落ちてないようなのですが・・・
2017/12/12(火) 20:43:24.56ID:s3bcy12n
>>826

RigidbodyもRigidbody2Dも、
LinearDragは0が初期値だけど、
AngularDragは0.05が初期値なのが、
気に入らないということでは?
2017/12/12(火) 20:43:27.01ID:WuPRAOqq
今までモーションは、簡単だからmmdで作ってたけどx軸とy軸の計算違うような……
blenderに乗り換えた方がいいのだろうか。
2017/12/12(火) 20:56:14.28ID:+nER52Ex
はい
2017/12/12(火) 21:01:44.29ID:WuPRAOqq
やっぱか……
blenderの勉強してくるわ。
mmd使うとか俺ってほんとにバカ……
833名無し@キムチ
垢版 |
2017/12/12(火) 21:17:33.27ID:pZVPZZmh
>>832
Blenderには気を付けたほうがいい
Blender上では問題なくモーションしてても、unityに取り込んで動かすと、手が体に食い込んだりしているから。
何度か行ったり来たりする必要があるw
2017/12/12(火) 22:25:16.08ID:oOD9NLJB
blender でもやっぱり同じようなこと起きると思うよ
表現力に不満がないならMMDにしとき
2017/12/12(火) 22:32:44.76ID:9L2xhVzt
else ifまで読んだ
そんなか入るの?!
2017/12/13(水) 00:01:44.95ID:/jokcbje
>>827

最初の回転状態が、
rotatiin =Quaternion.identityであれば、

1: rotation = Quaternion

2: rotation = rotation * Quaternion

3: rotation = Quaternion * rotation

1-3は全て同じ結果になります。

position = Vector3.zeroの場合、

1: position = Vector3

2: position = position + Vector3

1-2が同じ結果なのと一緒です。
2017/12/13(水) 00:07:16.00ID:/jokcbje
rotationの場合も、positionの場合も、

1は、角変位や位置の絶対指定、
2-3は、角変位や位置の相対指定です。

rotatiin =Quaternion.identityでない場合、
position = Vector3.zeroでない場合、

1と、2-3で、結果が変わってきます。

しかも、rotationの場合、

2: rotation * Quaternionと
3: Quaternion * rotationでも、結果が変わってきます。

追加するQuaternionによる角変位の回転軸を、
transform軸を基準にした回転にする場合は2になり、
キャンバスのVector3軸を基準にした回転にする場合は3になります。
2017/12/13(水) 00:35:37.82ID:/jokcbje
>>825-827
Invokeが呼び出しの際に1フレーム遅れるとわかっているのであれば、
1フレーム前の時間で呼び出させば大丈夫ですよ。

void Start () {
 rb.angularVelocity = new Vector3(45, 30, 0) * Mathf.Deg2Rad;
 Invoke ("Stop", 1 - Time.fixedDeltaTime); ←1フレーム前に呼び出し
}

void Stop () {
 Debug.Log ("1秒後のrotation:" + rb.rotation.eulerAngles);
 rb.angularVelocity = Vector3.zero;
}

「1秒後のrotation:Vector3(42.4, 37.4, 15.0)」が出ましたよ。
>>809の方法で求めた場合と一致する値です。

rb.angularVelocity = new Vector3(45, 30, 0) * Mathf.Deg2Rad
angle = (rb.angularVelocity).magnitude * Mathf.Rad2Deg

V = new Vector3(45, 30, 0)
angle = V.magnitudeでも同じ結果になります。
2017/12/13(水) 06:09:25.65ID:EBksqhAl
>>834
そうなのか……
大きい移動とかはスクリプトで制御するしかないのか。
ありがとう
2017/12/13(水) 18:54:39.99ID:+IrYaRns
趣味でUnity使ってゲーム制作してる人と友達になる方法教えてください
2017/12/13(水) 18:59:16.17ID:w+IYDO+A
お断りします
2017/12/13(水) 19:00:06.72ID:EBksqhAl
ツイッターでよくね?
現実で探そうとしてもなかなか見つからんもんだぞ。
2017/12/13(水) 19:11:19.37ID:6lJsdJ22
transformのposition, rotation, scaleって、
なんでtransform.position,transform.rotation,transform.lossyscale
になっていて、transform.scaleじゃないの??
2017/12/13(水) 19:23:08.89ID:+IrYaRns
>>842
日本の活発な交流サイトとかはなさそうですね…ありがとうございます
2017/12/13(水) 19:54:49.63ID:IotT1rVx
>>844
ツイッター
FacebookのUnity寄り合い所
あとはリアルのイベント
ゲームジャムやエンジニア向け勉強会に参加して交流、名刺交換、SNS垢の相互フォローなどすれば簡単に知り合いは増える
ちゃんと進捗をSNS上で報告すれば質問とかも答えてもらえる
イベントを探すならdoorkeeper、atnd、peatix
2017/12/13(水) 20:48:15.04ID:/jokcbje
>>843

transform.lossyscale = Vector3.Scale(transform.parent.localscale, transform.localscale)
つまり
 transform.lossyscale.x = transform.parent.localscale.x * transform.localscale.x
 transform.lossyscale.y = transform.parent.localscale.y * transform.localscale.y
 transform.lossyscale.z = transform.parent.localscale.z * transform.localscale.z

localscaleは、インスペクター上で設定するスケールで、
lossyScaleは、自分のlocalscaleと親のlocalscaleの各成分の積になってます。

本当のscaleは、回転が入ると、Vector3ではなくて、3×3行列になってしまいます。

lossyScaleの場合は、回転前のスケールで、Vector3で表せるからだと思います。
2017/12/13(水) 20:58:06.39ID:Kxr7McTA
>>846
おお、中の人?w
2017/12/13(水) 22:56:29.30ID:/jokcbje
Unityでは、アフィン変換を行う4×4行列であるMatrix4x4が、
TRS(Vector3 position, Quaternion rotation, Vector3 lossy scale)
によって構成されていて、
スケーリング→回転→移動の順に適用するようにしています。

最初にスケーリングを行うことで、
3×3行列の対角成分しか使わず、Vector3で済みます。

RigidbodyのinertiaTensorも一緒で、
本来は3×3行列が必要な慣性モーメントテンソルを、
慣性主軸系に限定することで、対角成分しか使わず、
Vector3の主慣性モーメントで済むようにしています。
2017/12/13(水) 23:01:57.61ID:/jokcbje
>>847

Unity自体はそれほど詳しくないですが、
物理演算系とか、3D数学が専門なので。
2017/12/13(水) 23:04:15.99ID:bbkFRctl
神になった気分だ。
スキルアップした今、どんなジャンルの仮想世界を作れと言われても
その詳細さえ教えてもらえれば
一瞬でどんなデータ構造/アルゴリズムで作ればいいかや
どんなデザインパターンを使えばいいかが
一瞬で頭にひらめき、スラスラとコードを書きはじめることができ、
予期せぬバグとかがなければ短期間でそのソフトやツールを一人で作る自信がある。

この予期せぬバグとはふだん使ってない昔やったプログラミング言語の細かい文法関連のことだけで
それはすぐ見直してカンを取り戻せばいいから全く問題ない。
2017/12/13(水) 23:09:45.76ID:Kxr7McTA
>>850
いいから、お前は早く作れ!w
2017/12/13(水) 23:11:16.24ID:Kxr7McTA
>>849
専門?3d系プログラマ?
2017/12/13(水) 23:36:39.33ID:fbUZmcUU
transform.lossyscale.x = transform.parent.locssyScale.x * transform.localscale.x
じゃないのか?
2017/12/14(木) 00:23:40.49ID:AuQKwcV0
>>853

そうですね。
parentがrootとは限らないので、parentのlossyscaleじゃないとダメですね。
末枝側へ変換が累積していきますから。

親オブジェクト-子オブジェクトの2者関係だと、
親オブジェクトのlossyscale = localscaleなので、両方localscaleで大丈夫ですけど。

親オブジェクト-子オブジェクト-孫オブジェクトの3者関係だと、
孫オブジェクトの親オブジェクトである子オブジェクトのlossyscaleは、
親オブジェクトのlocalscale * 子オブジェクトのlocalscaleになってますから、

孫オブジェクトのlossyscale
= 子オブジェクトのlossyscale * 孫オブジェクトのlocalscale
= (親オブジェクトのlossyscale * 子オブジェクトのlocalscale) * 孫オブジェクトのlocalscale
= 親オブジェクトのlocalscale * 子オブジェクトのlocalscale * 孫オブジェクトのlocalscale

>>852

仕事じゃなくて学問の方で。

うっかりしてましたが、UnityはCamelCaseだから、localScale,lossyScaleが正しいのでしたね。
2017/12/14(木) 00:33:15.69ID:AuQKwcV0
Scaleの積は、Vector3の各成分とVector3の各成分の積なので、
Vector3 * Vevtor3 は定義されていないから、
Vector3.Scale(Vector3, Vevtor3) という演算ですね。
いわゆる、アダマール積(シューア積,要素積)です。

Unityでは、アダマール積の逆関数が定義されていないので、
自分でVector3.Scaleの逆関数を定義するか、
アダマール積の逆数を自分で定義する必要がありますね。
856名前は開発中のものです。
垢版 |
2017/12/14(木) 02:05:43.30ID:tWpTkhe5
Vuforiaを使ってAR作りたいのですが実行するとマーカーは認識するもののカメラの映像が映らずに画面が黒くなります
誰か分かる方いらっしゃいますか...?
2017/12/14(木) 08:31:00.73ID:fpuqjDVR
専門ってのは専門学校の事だろw
2017/12/14(木) 08:46:47.19ID:xj1b5N68
>>857
専門学校出身だったら行列の回転だとかをQuaternionとかでも適用して使えるんだろなー

という煽りレス
2017/12/14(木) 11:08:53.86ID:X1xy6sbZ
plus一ヶ月契約でもエッセンシャルパック2つってもらえますか?
あるいは契約し続けないと使えなくなる感じかな
2017/12/14(木) 12:22:42.24ID:JR7j67YV
>>858

Unityって、もともと回転行列じゃなくて、クォータニオンで回転しているんじゃないの??
2017/12/14(木) 13:13:10.01ID:6Eg6sRVA
>>860
Matrix4x4というのがあってね... 

でも正直に言おう アレは何だ?!
2017/12/14(木) 15:25:57.18ID:UIHENBZT
数学難しいですね
でも大丈夫!UNITYにはアセットが有りますよ!
アセットを購入しましょう!
2017/12/14(木) 17:52:04.05ID:V0Mq7RkO
>>862
お前ニセモノだな!
2017/12/14(木) 19:01:47.53ID:EAIFpwQr
>>859
契約切れても有効だけどそもそもplus/pro自体12ヶ月継続必須だから前提が無理
2017/12/14(木) 19:21:23.88ID:JR7j67YV
>>861

3次元のベクトルを回転させるのに、なんで4x4行列なの?
回転行列って、3x3行列じゃないの??
2017/12/14(木) 20:39:20.26ID:AuQKwcV0
>>865

移動と回転とスケーリングができるように、
アフィン変換行列になっているからです。

Matrix4x4.TRS(position, rotation, scale)
で4×4行列に入力できますが、

出力する時は、
Vector3 = Matrix4x4.MultiplyVector(Vector3)
によって、Vector3で入力して、
Vector3で出力できるようになっています。
2017/12/14(木) 20:55:53.20ID:N8/aZDnG
>>866
はえ〜すっごい‥
2017/12/14(木) 21:30:51.37ID:AuQKwcV0
>>858

回転行列MでベクトルV0を回転させて、ベクトルVにするには、
Z軸で30度回転する場合は、

Quaternion Q = Quaternion.Euler (0, 0, 30);
Matrix4x4 M = Matrix4x4.TRS (Vector2.zero, Q, Vector2.one);
Vector3 V0 = new Vector3(1, 2, 3);
Vector3 V = M.MultiplyVector (V0);

これを、QuaternionとVector3の演算で行うと、

Quaternion Q = Quaternion.Euler (0, 0, 30);
Vector3 V0 = new Vector3(1, 2, 3);
Vector3 V = Q * V0;
2017/12/14(木) 21:32:41.20ID:AuQKwcV0
Matrix4x4 M = Matrix4x4.TRS (Vector2.zero, Q, Vector2.one);
は間違いで、

Matrix4x4 M = Matrix4x4.TRS (Vector3.zero, Q, Vector3.one);
が正しいです。
2017/12/14(木) 21:45:36.22ID:AuQKwcV0
>>858

Quaternion QでベクトルV0を回転させて、ベクトルVにするには、
Z軸で30度回転する場合は、

Quaternion Q = Quaternion.Euler (0, 0, 30);

Vector3 V0 = new Vector3(1, 2, 3);

Quaternion Qv0 = Quaternion.identity;
Qv0.Set(V0.x, V0.y, V0.z, 0);

Quaternion Qv = Q * Qv0 * Quaternion.Inverse (Q);

Vector3 V = new Vector3(Qv.x, Qv.y, Qv.z);

こちらが、本来のQuaternion積でベクトルを回転させる方法です。

Unityでは、この面倒くさいQuaternion積の演算が、
「Quaternion * Vector3」だけでできるようになっています。
2017/12/14(木) 21:55:15.62ID:AuQKwcV0
Vector3 = Quaternion * Vector3
は、行列積を意識していると思われます。

Vector3 = Matrix3x3 * Vector3
としたいところですが、
UnityにはMatrix3x3は用意されていません。
(3×3行列の乗算では、回転とスケーリングしかできないからです)

Vector4 = new Vector4(Vector3, 1) で4次元ベクトルにしてから、
Vector4 = Matrix4x4 * Vector4 で計算して、
Vector3 = (Vector3)Vector4 で3次元ベクトルへ戻す必要があります。

最初に、Vector4 = (Vector4)Vector3 と手抜きをしてはいけません。
Vector4 = new Vector4(Vector3, 0) で代入されると、
アフィン変換の「移動」が乗算されなくなります。
2017/12/14(木) 23:49:37.69ID:zts/k6NY
行列なんか意識しないでも3dゲーム作れるようになったんだからすごい時代だよね
結構まえからだけど
2017/12/14(木) 23:54:59.29ID:N8/aZDnG
>>870
へー、なるほどなぁ‥
2017/12/15(金) 01:39:47.96ID:TM1zyrgU
>>864
年契約の1ヶ月払いってだけなんですね
ありがとうございます
2017/12/15(金) 04:19:45.41ID:L6b+QAfA
なるほど よくわからん
2017/12/15(金) 11:35:10.31ID:a5awPS/6
>>874
半額だったんでplusを年契約の年払いしたよ
売り上げ1千万以上なのに。
たかだか1万円ぐらいを月払いする奴いるの?
2017/12/15(金) 12:38:14.64ID:c63jfGrC
物理演算系の解説を希望!

C#の経験あっても、そもそも物理演算は別物な気がする・・・

物理演算は、2Dと3Dで若干仕様が違うし、なかなか体系的に物理演算を解説しているサイトも少ない
せいぜい、velocityとAddForce止まりが多い

重力設定や衝突判定をUnityにまかせてしまうには、物理演算を使用するのが手っ取り早いんだけど、
物理演算だと、これまでのグラフィックス操作的な、プログラミングメソッドがあまり使えない
(基本的に、positionやrotationを直接いじらないほうが良いみたい)
2017/12/15(金) 12:46:53.83ID:bN2Y1bPS
アイテムを所持していればお化けを倒せるというシステムにしようと思っています。
それでそのアイテムを十字架の画像にしようと思っているのですが、日本人だったらアイコン見ただけで何となく意味が分かるだろうと思うのですが、海外の人でも抵抗なくスッと理解されるんでしょうか?
2017/12/15(金) 13:05:51.44ID:DzxyY709
>>878
アセットを購入すればいいですよ
2017/12/15(金) 15:58:23.54ID:59uPCR9L
>>878
海外のゲームを参考にすればわかりますよ
2017/12/15(金) 16:32:05.45ID:kzY3QNw/
>>878
ゲームデザインにもよるけど

そのアイテムの効果とお化けとの相互関係が分かるような物なら多分大丈夫かなぁ アイテム説明とかも結構重要だけども。
2017/12/15(金) 16:54:14.50ID:bO73tzHJ
アイテム説明が一番確実だわな
むしろ必須じゃないか?
2017/12/15(金) 20:05:01.07ID:c63jfGrC
transform.LookAtだと、どうしてもオブジェクトのforward軸が対象を向いちゃう
そうじゃなくて、オブジェクトのup軸を対象に向けたいんだけど、一体どうすれば・・・?

transform.LookAtでオブジェクトのforward軸を対象に向けて、
その後にtransform.Rotateでx軸で90度して、up軸をforwardへ向けているんだけど、
2段階になっちゃって、無駄が多いし、その瞬間動作が表示されちゃう

オブジェクトとtransform軸の対応を変更できれば、
オブジェクトのup軸方向を、forward軸に設定したいんだけど・・・
2017/12/15(金) 20:51:06.18ID:PCtIHB7r
おぶじえくを最初から傾けておくか、小オブジェクトで対応するか、いくらでも方法あるだろうね。
ルックアット使わずにやるのも有りだし。
2017/12/15(金) 23:29:48.61ID:nw+wySXa
>>883
目標の座標をVector3 targetとすると、

transform.right = targetでいけませんか?

transform.LookAt(target) は、
transform.forward = target と同じになるはずです。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況