[過去ログ] 【3Dゲームエンジン】Unity質問スレッド32 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
858(3): 2017/12/14(木)08:46 ID:xj1b5N68(1) AAS
 >>857 
 専門学校出身だったら行列の回転だとかをQuaternionとかでも適用して使えるんだろなー 
  
 という煽りレス 
859(1): 2017/12/14(木)11:08 ID:X1xy6sbZ(1) AAS
 plus一ヶ月契約でもエッセンシャルパック2つってもらえますか? 
 あるいは契約し続けないと使えなくなる感じかな 
860(1): 2017/12/14(木)12:22 ID:JR7j67YV(1/2) AAS
 >>858 
  
 Unityって、もともと回転行列じゃなくて、クォータニオンで回転しているんじゃないの?? 
861(1): 2017/12/14(木)13:13 ID:6Eg6sRVA(1) AAS
 >>860 
 Matrix4x4というのがあってね...  
  
 でも正直に言おう アレは何だ?! 
862(1): 2017/12/14(木)15:25 ID:UIHENBZT(1) AAS
 数学難しいですね 
 でも大丈夫!UNITYにはアセットが有りますよ! 
 アセットを購入しましょう! 
863: 2017/12/14(木)17:52 ID:V0Mq7RkO(1) AAS
 >>862 
 お前ニセモノだな! 
864(1): 2017/12/14(木)19:01 ID:EAIFpwQr(1) AAS
 >>859 
 契約切れても有効だけどそもそもplus/pro自体12ヶ月継続必須だから前提が無理 
865(1): 2017/12/14(木)19:21 ID:JR7j67YV(2/2) AAS
 >>861 
  
 3次元のベクトルを回転させるのに、なんで4x4行列なの? 
 回転行列って、3x3行列じゃないの?? 
866(1): 2017/12/14(木)20:39 ID:AuQKwcV0(3/7) AAS
 >>865 
  
 移動と回転とスケーリングができるように、 
 アフィン変換行列になっているからです。 
  
 Matrix4x4.TRS(position, rotation, scale) 
 で4×4行列に入力できますが、 
  
 出力する時は、 
 Vector3 = Matrix4x4.MultiplyVector(Vector3) 
 によって、Vector3で入力して、 
 Vector3で出力できるようになっています。 
867: 2017/12/14(木)20:55 ID:N8/aZDnG(1/2) AAS
 >>866 
 はえ〜すっごい‥ 
868: 2017/12/14(木)21:30 ID:AuQKwcV0(4/7) AAS
 >>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; 
869: 2017/12/14(木)21:32 ID:AuQKwcV0(5/7) AAS
 Matrix4x4 M = Matrix4x4.TRS (Vector2.zero, Q, Vector2.one); 
 は間違いで、 
  
 Matrix4x4 M = Matrix4x4.TRS (Vector3.zero, Q, Vector3.one); 
 が正しいです。 
870(1): 2017/12/14(木)21:45 ID:AuQKwcV0(6/7) AAS
 >>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」だけでできるようになっています。 
871: 2017/12/14(木)21:55 ID:AuQKwcV0(7/7) AAS
 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) で代入されると、 
 アフィン変換の「移動」が乗算されなくなります。 
872: 2017/12/14(木)23:49 ID:zts/k6NY(1) AAS
 行列なんか意識しないでも3dゲーム作れるようになったんだからすごい時代だよね 
 結構まえからだけど 
873: 2017/12/14(木)23:54 ID:N8/aZDnG(2/2) AAS
 >>870 
 へー、なるほどなぁ‥ 
874(1): 2017/12/15(金)01:39 ID:TM1zyrgU(1) AAS
 >>864 
 年契約の1ヶ月払いってだけなんですね 
 ありがとうございます 
875: 2017/12/15(金)04:19 ID:L6b+QAfA(1) AAS
 なるほど よくわからん 
876: 2017/12/15(金)11:35 ID:a5awPS/6(1) AAS
 >>874 
 半額だったんでplusを年契約の年払いしたよ 
 売り上げ1千万以上なのに。 
 たかだか1万円ぐらいを月払いする奴いるの? 
877(1): 2017/12/15(金)12:38 ID:c63jfGrC(1/2) AAS
 物理演算系の解説を希望! 
  
 C#の経験あっても、そもそも物理演算は別物な気がする・・・ 
  
 物理演算は、2Dと3Dで若干仕様が違うし、なかなか体系的に物理演算を解説しているサイトも少ない 
 せいぜい、velocityとAddForce止まりが多い 
  
 重力設定や衝突判定をUnityにまかせてしまうには、物理演算を使用するのが手っ取り早いんだけど、 
 物理演算だと、これまでのグラフィックス操作的な、プログラミングメソッドがあまり使えない 
 (基本的に、positionやrotationを直接いじらないほうが良いみたい) 
878(3): 2017/12/15(金)12:46 ID:bN2Y1bPS(1) AAS
 アイテムを所持していればお化けを倒せるというシステムにしようと思っています。 
 それでそのアイテムを十字架の画像にしようと思っているのですが、日本人だったらアイコン見ただけで何となく意味が分かるだろうと思うのですが、海外の人でも抵抗なくスッと理解されるんでしょうか? 
879: 2017/12/15(金)13:05 ID:DzxyY709(1) AAS
 >>878 
 アセットを購入すればいいですよ 
880: 2017/12/15(金)15:58 ID:59uPCR9L(1) AAS
 >>878 
 海外のゲームを参考にすればわかりますよ 
881: 2017/12/15(金)16:32 ID:kzY3QNw/(1) AAS
 >>878 
 ゲームデザインにもよるけど 
  
 そのアイテムの効果とお化けとの相互関係が分かるような物なら多分大丈夫かなぁ アイテム説明とかも結構重要だけども。 
882(1): 2017/12/15(金)16:54 ID:bO73tzHJ(1) AAS
 アイテム説明が一番確実だわな 
 むしろ必須じゃないか? 
883(2): 2017/12/15(金)20:05 ID:c63jfGrC(2/2) AAS
 transform.LookAtだと、どうしてもオブジェクトのforward軸が対象を向いちゃう 
 そうじゃなくて、オブジェクトのup軸を対象に向けたいんだけど、一体どうすれば・・・? 
  
 transform.LookAtでオブジェクトのforward軸を対象に向けて、 
 その後にtransform.Rotateでx軸で90度して、up軸をforwardへ向けているんだけど、 
 2段階になっちゃって、無駄が多いし、その瞬間動作が表示されちゃう 
  
 オブジェクトとtransform軸の対応を変更できれば、 
 オブジェクトのup軸方向を、forward軸に設定したいんだけど・・・ 
884: 2017/12/15(金)20:51 ID:PCtIHB7r(1) AAS
 おぶじえくを最初から傾けておくか、小オブジェクトで対応するか、いくらでも方法あるだろうね。 
 ルックアット使わずにやるのも有りだし。 
885(3): 2017/12/15(金)23:29 ID:nw+wySXa(1/3) AAS
 >>883 
 目標の座標をVector3 targetとすると、 
  
 transform.right = targetでいけませんか? 
  
 transform.LookAt(target) は、 
 transform.forward = target と同じになるはずです。 
886: 2017/12/15(金)23:37 ID:nw+wySXa(2/3) AAS
 もっとも汎用性のある方法は、 
 向き(transform.rotation)を、 
 向けたい軸(Vector3.right)を向かせたい相手(target)へ向ける回転 
 Quaternion.FromToRotation にしてしまう方法かと思います。 
  
 transform.rotation = Quaternion.FromToRotation(Vector3.right, target) 
 になります。 
  
 例えば、左側をtargetに向けたい場合、 
 Vector3.right を、- Vector3.right に変更します。 
 (Vector3.right = - target でも勿論できます) 
  
 ただ、Vector3.oneをtargetに向ける回転は、 
 transform軸への代入ではできず、 
 上記の汎用法を使うのが良いと思います。 
887(2): 2017/12/15(金)23:38 ID:nw+wySXa(3/3) AAS
 >>883 
  
 読み間違えました。 
 up軸を向けるのでしたね。 
  
 ?transform.up = target 
  
 ?transform.rotation = Quaternion.FromToRotation(Vector3.up, target) 
上下前次1-新書関写板覧索設栞歴
あと 115 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.012s