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

レス数が1000を超えています。これ以上書き込みはできません。
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/
2017/12/20(水) 08:42:36.26ID:XTZUI7pU
969です

>>976-979
詳しく解説ありがとうございました!

やっぱり、角度から行こうとすると結構面倒ですね〜
2017/12/20(水) 18:29:13.04ID:XTZUI7pU
汎用性を考えると、Quaternion.FromToRotationは良さそうですね

これは、あるベクトルを別のベクトルにする回転を返すわけだから、
自分の向きを、自分のベクトルから目標とするベクトルへ向ける回転にするわけですか・・・
2017/12/20(水) 22:49:28.74ID:TUVA4DF6
>>980

テラシュールブログ
http://tsubakit1.hateblo.jp/entry/2014/08/02/030919

ここに、Quaternion.FromToRotationの使い方がうまくまとまってました。
>>var diff = (target.position - transform.position ).normalized;
>>transform.rotation = Quaternion.FromToRotation( Vector3.up, diff);

このサイトでは、diffは正規化されているようですが、
基本的に内部で強制的に単位ベクトルになるようなので、
target.position - transform.positioだけで大丈夫そうです。

なお、外積ベクトルを利用する場合は、大きさも影響してきますので、
方向ベクトルは単位ベクトルにしておいたほうが無難です。
2017/12/20(水) 22:56:36.28ID:TUVA4DF6
なお、私の方法では、外積ベクトルとZ軸の内積をとっていますが、
最終的に符号のみを取り出しているので、大きさが影響しません。

Vector3.Reflect,Vector3.Project,Vector3.ProjectOnPlaneなど、
単位ベクトルに内積を乗算するタイプの関数では、
必ず正規化して単位ベクトルにしてから代入しないと、
計算結果が変わってきますので、注意が必要です。
2017/12/21(木) 12:35:15.03ID:rQmWRShb
  /⌒ヽ
 く/・ ⌒ヽ   すうがくのことわからない
  | 3 (∪ ̄]
 く、・ (∩ ̄]
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
2017/12/21(木) 13:03:49.54ID:nBeZymLn
算数だぞ。
2017/12/21(木) 14:22:23.93ID:8qhc65N4
確実に高校数学
中学算数でベクトルは習わない(特定進学校は除く)
2017/12/21(木) 14:52:32.83ID:nBeZymLn
>>986
https://www.google.co.jp/amp/s/laurier.press/a/E1405072653842
2017/12/21(木) 17:37:17.76ID:mWsXZ6ft
年がいくつでも何処からでも学べるんちゃうんか
2017/12/21(木) 17:41:22.45ID:ogJEBcpf
年寄りは観念が固まってるから、4*4=4+4+4+4とか切り口を変えた柔軟な発想が出来ない
2017/12/21(木) 17:49:58.06ID:uW9gzElK
柔…軟…???
2017/12/21(木) 18:12:39.26ID:p4DyS94v
なんだかんだと言ってもITはそれなりの頭がないと出来ない
中学、高校で数学が苦手だった奴にプログラミングはむかない
そんな理由で糞IT専門学校卒の底辺IT奴隷だって素質があって他の業種からみれば高給与
まあ糞IT専門学校に逝っても半分以上は素質がなくて資格も取れずIT関連企業にも就職できないんだけど
2017/12/21(木) 18:43:55.99ID:d8WQwc80
Unityのプログラムを、コピペじゃなくて、
自分で考えて、組み立ててコードを書けるってことは、
それなりに数学的な素養があると思うんだよね〜

何も行列とかクォータニオンとかを数学的にきちんと理解していなくても、
「そのメソッドで何ができるか」を理解していれば、
たとえメソッドの内部はブラックボックスでも、それを組み合わせて、
ちゃんと機能するコードが書けるから・・・

ある意味、クラスによるカプセル化と一緒で、
オブジェクト指向の根幹になるんじゃないかな?
2017/12/21(木) 18:52:38.72ID:d8WQwc80
もちろん、そのクラスや構造体の中で、
「数学的に何が行われているのか?」を理解していれば、
それを応用して、別のクラスを作ったり、
他の処理に応用することができるようになるとは思うけど・・・

3D処理(描画じゃなくて動作)で必要なのは、
ベクトル、行列、複素数の拡張であるクォータニオン、
極座標、関数(特に、三角関数)、初等幾何学、
古典物理学(力学)くらいじゃないかな・・・

Unityでは、行列は基本内部処理だけで表に出ないから、
高校の数学UBくらいまでのレベルじゃなかろうか?
994名前は開発中のものです。
垢版 |
2017/12/21(木) 19:26:27.42ID:J5wOBApL
>>988
>年がいくつでも何処からでも学べるんちゃうんか

それを聞く時点でキミはすでに学べない。
2017/12/21(木) 20:31:14.43ID:MUjb87iC
そんなんいらね。
三角関数を何となく使えるぐらいで十分。
あとはunityがやってくれる。
2017/12/21(木) 20:41:57.83ID:m2pWnfBj
>>988

高校卒業してから20年くらい、今年初めからUnityを始めましたが、
独学でベクトルの外積やクォータニオン演算まで辿り着けたので、
興味さえあれば、何とかなるもんですよ。
2017/12/21(木) 20:52:09.10ID:m2pWnfBj
例えば、物理演算を使用する場合、Unityで設定できるのは、
速度velocityと力AddForce、角速度angularVelocityとトルクTorqueだけです。
(位置positionや角変位rotationは原則いじらないほうが良いです)

すると、直線移動や自転だけなら設定が簡単ですが、
公転のような円運動を行うには、物理法則に準じた命令を与える必要があります。

物理演算では、transform.RotateAroundを使えないので、
そういう場合に自分で工夫して実装できるかどうかに関わってくると思います。
2017/12/22(金) 00:21:49.04ID:ko83+b2p
一番とっつきにくいのは回転運動だと思います。

Rigidbodyでは、ForceMode.Accelerationがあるので、

加速度Vector3 a(m/s/s)を得たい場合は、
AddForce(a, ForceMode.Acceleration)とするだけ、
角加速度Vector3 aa(rad/s/s)を得たい場合は、
AddTorque(aa, ForceMode.Acceleration)とするだけですが、

Rigidbody2Dでは、ForceMode.Accelerationがないので、

加速度Vector2 a(m/s/s)を得たい場合は、
AddForce(a * mass)としたり、
角加速度float aa(度/s/s)を得たい場合は、
AddTorque(aa * inertia * Mathf.Deg2Rad)とする必要があります。

要するに、ニュートンの運動方程式や、
オイラーの回転運動方程式を使う必要が出てきます。

速度は、2DはVector2 v(m/s)、3DはVector3 v(m/s)で分かりやすいですが、
角速度は、2Dはfloat w(度/s)、3DはVector3 w(rad/s)と単位が変わります。
Torqueではrad単位で入れないと、inertiaと乗算できないので面倒です。
2017/12/22(金) 02:24:21.72ID:BHuKTyia
オイラーは、ドラマー♪
2017/12/22(金) 10:39:11.64ID:GTvlornd
10年は 夢のよう
100年は 夢また夢
1000年は 一瞬の光の矢
過ぎてく時間は怖くない
輝きを失う事が嫌なのです
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 53日 5時間 33分 36秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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