【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/17(日) 03:03:25.27ID:KEqZbS2o
>>914
いけにえと雪のセツナ
2017/12/17(日) 03:06:58.30ID:2l6FPzGg
>>915
d
セールになったら買ってみます
2017/12/17(日) 03:30:34.88ID:anx13erV
2Dアクションゲームを作成しようとしている初心者です。

tilemap collider2dをアタッチしたtilemapの平面フィールド上で、
rigidbody2dとbox collider2dをアタッチして重力と当たり判定を付与したGameObject(Player)を歩かせたところ、
タイルに引っかかる形で止まってしまいます。
これを回避するためにcapsule collider2d等で接地面を点にすると止まることはなくなります(僅かに減速する)が、
当たり判定を□で判定したい為、可能であればbox collider2dで実装したいと考えています。

tilemapを使用した際のこういった引っかかり挙動を抑えることは可能でしょうか。
2017/12/17(日) 10:25:06.96ID:kJlZ2G7V
足元はcapsuleかcircleにして、
もう1つboxで足元から数ピクセル上を覆えば良いのでは?
collider2Dは1つという制約はないので、複合したら良いんじゃ
2017/12/17(日) 10:31:21.09ID:kJlZ2G7V
>>899

>>887ですが、基本的にforward軸はオブジェクトの前後方向にとっているのですが、
円状(球状)の軌道で旋回しており、その際にオブジェクトの上下方向を、
軌道の中心(球の中心)へ向けておきたいのです・・・

人工衛星やスペースシャトルみたいな感じです
前方は進行方向を向けておいて、なおかつ上下は鉛直軸に揃えたいんです
前方が中心を向いちゃうと、上下に立った状態で周回してしまうので
2017/12/17(日) 10:36:09.95ID:kJlZ2G7V
レスのアンカに引っ張られて間違えましたが、自分は883でした

>>904
2Dだとtransform.LookAtが機能しないんですね!
それじゃ、やっぱりforward以外の軸を向ける機能は大事ですね

>>885
ビックリです!
transform軸に目標座標を入れると、軸がそっちを向くんですね!
しかも、正規化して単位ベクトルにするひつようもないみたい
そしたら、transform.LookAtいらなくない?!
2017/12/17(日) 16:14:44.68ID:anx13erV
>>918
レスありがとうございます。
当たり判定に違和感がない数ピクセルの差でbox collider2dをアタッチすると引っかかりは生じます。
引っかからない程度に足元を円形にすると角で滑り落ちるようになってしまいます。

DirectionをHorizontalにした角の丸い棒状のcapsulecollider2dでプレイヤーの上下左右を被った場合(角のない箱のような形)は、
引っかかることはなくなりますが、やはりタイルに当たりはするので、極僅かに減速してPlayerが数pixcel浮くことがあります。
またその際、OnCollision〜2Dイベントを監視すると、タイルに当たって浮いた瞬間にタイルとの接触判定が一瞬途切れている為、
ジャンプ判定等にも影響が出てしまう(空中にいる判定が誤作動する)のでタイルとの判定自体を正しく動作させたいと考えています。
2017/12/17(日) 17:18:37.08ID:CBpPFu99
回転するステージを作ってます
ステージにspawn位置を子オブジェクトとして設定して、そこから敵を出現させようと思ってるんですが
spawn位置がステージに追従して回転せず、固定されたままになってしまいます

オブジェクトをそのままステージの子にすると回転に追従できるんですが、
Spawnにスクリプトを設定してそこからオブジェクトを選んでくっつけるとどうもうまく行かず…

なにか解決方法はありませんか?
2017/12/17(日) 17:19:26.92ID:CBpPFu99
>>909
遅レスすいません、詳しくありがとうございます。試してみます。
2017/12/17(日) 17:21:12.36ID:anx13erV
>>921
すみません自己解決しました。

edge collider2dを使用するか、box collider2dのedge radiusを0.001に設定することで、
タイルとの衝突(及びOnCollider系イベントの誤発生)はなくなりました。
参考:ttps://forum.unity.com/threads/rigidbody-getting-stuck-on-tiled-wall.220861/

ありがとうございました。
2017/12/17(日) 17:28:31.76ID:0i7oG1oj
>>885
どういう原理なんだこれ????
2017/12/17(日) 20:19:28.23ID:Vn9M2BoC
position とかと同じように代入できるんだね。リードオンリーだとばかり思ってた
2017/12/17(日) 20:36:30.69ID:MPKxHq38
Unityの人達がどれほど「技術の民主化(デモクラタイズ)」とい
うものに心を払っているかは、多分外部の人達には想像できな
いと思います。この一点においいて、Unityは、世界中に沢山の
ファンを生み出し、そしてエバンジェリズムを行うチームのメンバ
ーも国境や政治制度を越えてひとつになれるのです。
2017/12/17(日) 20:43:06.69ID:ttDBRzWh
その思想は非常に危険
それは即ち低賃金労働者の搾取がゲーム業界においても世界的に起こるようになるということと同義だからだ
2017/12/17(日) 21:44:56.77ID:FNxE37S9
キケンかどうかは立ち位置によるし、資本主義では当たり前の話。
2017/12/17(日) 22:07:45.00ID:K2bL8mhm
>>925
transform軸の座標は、自分のpositionをVector3.zeroとした時の相対座標で設定されている

自分のpositionが原点の場合は、transform軸の座標に目標のpositionを入れれば、
それが勝手に単位ベクトル化されて、方向ベクトルになるみたい

でも、自分のpositionが原点でない場合は、
transform軸の座標に「target - trans.position」で自分の座標を引いておく必要がある

だから、「target」だけを入れれば良いLookAtの方が簡単にできる(forward軸限定だけど)
あと、LookAtは第2引数で、up軸の方向も指定できる
(forward軸をtagetに向けた状態で、可能な限りup軸を指定方向に合わせてくれる)
2017/12/17(日) 22:12:13.99ID:K2bL8mhm
>>922

Instantiateで生成する時に、ちゃんと親を指定してる??
動的に生成したオブジェクトは、ステージとの親子関係が切れてない?

Instantiate(Object, Position, Parent)
2017/12/17(日) 22:14:47.35ID:K2bL8mhm
>>921
>>924

edge radiusなんて便利な機能が付いて、
矩形の判定枠の角を丸められるようになったんだね

いつも、足の前後に円形判定をおいたり、
カプセルを横にして置いて、地形判定専用にしてたわ
2017/12/17(日) 22:57:38.86ID:SNj3ir+c
ダメージを受ける毎に敵オブジェクトとかモデルが足元から徐々に(段階的に)赤くなって行くっていうのって、どういう原理で出来るんですか?
色々考えたんですけど思い付かなくて
2017/12/17(日) 23:29:09.88ID:tMMchmwv
けーすばいけーす
935名前は開発中のものです。
垢版 |
2017/12/18(月) 04:52:21.33ID:B3OUJM41
歩くアニメーションがあってそれは実行すると前進するのですが
これをその場で足踏みだけさせるように簡単に変更はできますか?
2017/12/18(月) 08:05:53.43ID:vc4Z0s4x
アニメーション再生するだけで前に動くことは無い
別のスクリプトでオブジェクトを進行方向に動かしているはず
2017/12/18(月) 08:48:59.47ID:WoyHjqZj
>>877
position等を直接いじったらそれはワープしてるのと同じだからね

移動や回転は事象に応じて物理エンジンがするものと考えれば、いろいろ扱いやすくなると思うよ
2017/12/18(月) 09:27:02.70ID:mba+3hiD
>>935
apply root motion
2017/12/18(月) 10:23:29.76ID:B3OUJM41
>>938
apply root motionを指定しても動いてるんですよね。
>>936
歩く以外にもジャンプのアニメーションも上に飛び上がらないようにしたいとかです。
2017/12/18(月) 10:32:53.07ID:vc4Z0s4x
>>939
モーション自体の中で位置が動いてるなら簡単に動かないようにするのは無理
アニメーション編集してルートのトランスフォーム移動のキーを全部削除するしかない
2017/12/18(月) 10:40:39.28ID:B3OUJM41
>>940
やっぱりそれしかないんですね。
自分で削除することにします。ありがとうございました。
2017/12/18(月) 12:00:11.97ID:jBsoCflG
LateUpdateでモーション適用後のトランスフォームを変更できる
ルートのボーンにLateUpdateで位置をlocalPosition=0,0,0にするコンポを付ければいい。
2017/12/18(月) 12:43:15.93ID:B3OUJM41
>>942
ありがとうございます。やってみます!
2017/12/18(月) 13:36:58.58ID:B3OUJM41
>>942
完璧に動作しました!ありがとうございました!!
2017/12/18(月) 14:32:15.73ID:B4iwR6Ld
https://twitter.com/SpaceBackyard/status/898870157979811840
リンクすみません。
こういうカーソル位置?というか左右にしたら画面が切り替わるのってどうやれば出来るんでしょう?
マスクみたいな感じですか?
946名無し@キムチ
垢版 |
2017/12/18(月) 19:51:23.56ID:iM2CjGiv
>>885>>942は優良回答者ですね。
しったかのヘタレ回答者が多い中で、すごいです!!!
2017/12/18(月) 20:19:13.70ID:AjgZuUm6
>>946
貴方も回答者に成るんだよこれから。
948名無し@キムチ
垢版 |
2017/12/18(月) 22:22:26.73ID:iM2CjGiv
>>947
ホントですね。頑張ります!
2017/12/18(月) 22:24:40.54ID:zA/nszQ4
好きなオッパイは何カップですか?
2017/12/18(月) 22:39:17.53ID:9Bga0q6S
越後製菓!
2017/12/18(月) 23:04:07.96ID:x75jC3YN
最近、質問-回答がちゃんとなされて、質問スレとして機能していて、ビックリ!

ちょっと前なら、アセットで解決!で終了だったのに・・・

スレで出た有用なQ&Aは、誰かどこかにまとめてくれないかね〜
2017/12/18(月) 23:11:37.88ID:x75jC3YN
2DはLookAtが使えなくて今まで諦めてたけど、
まさかtransform.rightやtransform.upに直接代入して、
LookAtもどきができるとは、凄く役になったな〜

タイルチップで2D背景を作ってたけど、
左右移動時にタイルのつなぎ目で引っかかるから、
高さが同じタイルは、colliderを統合して、
高さが変わるところだけ、別colliderにしてたけど、
これからは、タイルチップ敷布でいけそうだな〜
2017/12/19(火) 00:07:08.24ID:4Od9SmbT
ネトウヨ老害死ねばいいのに
ゲ製コミュの印象悪くして皆の足引っ張りやがって
死ねよ不細工メタボ引き篭もりネトウヨ
2017/12/19(火) 00:27:04.18ID:MvhMRTwq
まーた、ネトウヨキムチがコミュとか言っちゃって
2017/12/19(火) 03:06:23.03ID:Ih0Nk694
一応言っておきますが>>946は自分じゃないですよ…
回答頂いた方には皆感謝してます。
956955=944
垢版 |
2017/12/19(火) 03:07:20.95ID:Ih0Nk694
名前欄ということです。すみません。
2017/12/19(火) 07:37:16.79ID:4Od9SmbT
>>954
は?なんで俺が「キムチキムヨナ」連呼のネトウヨの最底辺メタボのゴミおっさんなんだよ?糖質が絡んでくるなや
「キムチキムヨナ」連呼のネトウヨの最底辺のゴミおっさんがどこで「コミュニティ」とか言ってやがるんだ?
ゲ製コミュをネトウヨコミュニティと一緒にするなやカス共が

>>955
「!」の使い方といい、文体といい、同じに見えるんだが?
ネトウヨの最底辺のゴミおっさんが、わざわざ文体を真似てるってことか?
2017/12/19(火) 09:35:09.05ID:VZwsAqll
なんか面倒な人に絡まれてるなぁ955

新スレ作るか。
2017/12/19(火) 09:36:44.16ID:VZwsAqll
新スレビルド完了です...
【3Dゲームエンジン】Unity質問スレッド33
http://mevius.5ch.net/test/read.cgi/gamedev/1513643755/
2017/12/19(火) 10:04:53.30ID:4Od9SmbT
なぜ <準コテ「キムチ」で「キムヨナ」連呼> みたいなゴミを、素朴に「ゴミ」と言うことや
ぱっと見で文体が同じに見えることを、素朴に「同じに見える」「一方が真似てる」と言うことが
面倒がられなければならないのか?
素朴な書き込みを面倒がり、ゴミ廃棄を面倒がる奴の方が、よっぽど面倒だぜ?
2017/12/19(火) 10:13:49.21ID:hldyKkrz
unityにマップを作るtile機能ってあるけど一つのチップセットに対してBoxColliderとかの情報を付けるのってどうすればええんやろ
2017/12/19(火) 12:04:43.40ID:m7Eb2COO
>>961
アセットをかうしか無いですよ!
2017/12/19(火) 14:27:52.29ID:SpU5jUlI
>>950
正解
2017/12/19(火) 15:16:13.61ID:ZiJMGaxN
キチガイがいると迷惑だから分類しないとね
2017/12/19(火) 15:56:19.98ID:O0snqTpx
>>951
お前が幼稚園や保育園をお望みならそれでいいんじゃない?
まともな小学生以上は自分でググって調べて解決してる
そんな内容ばかりだ
2017/12/19(火) 16:33:46.69ID:4R8uUpaI
アセットガイジはなんか売ってるんかなぁ…
2017/12/19(火) 18:11:13.26ID:OC9tHkfS
>>952
むしろ2DでLookAtさせたいだけならオブジェクトAとBの角度を取って画像をRotateさせるだけでいいんじゃないん?w
2017/12/19(火) 19:22:46.77ID:Jz5wVrA6
>>967
そんな難しいことしたくないじゃん
2017/12/19(火) 19:29:46.21ID:oc7hao2D
>>967

自分をオブジェクトA
 Aのposition = transform.position
目標をオブジェクトB
 Bのposition = target
とした場合に、

transform.right = target.position - transform.position
と同じ作用になるようにするには、

>>957の方法ではどうなる??
970名前は開発中のものです。
垢版 |
2017/12/19(火) 19:59:39.02ID:IygWzju3
>>969
オブジェクト間の角度とる関数あるからしらべて
2017/12/19(火) 20:25:38.60ID:v4JsSdmj
ベクトル間の角度を出す関数じゃなくて?
ベクトル間の角度だと、原点を中心にした角度になるけど

しかも、それで角度を出すと回転の向きがわからないから、
ベクトルの外積を求める必要もあるよね
2017/12/19(火) 22:09:39.44ID:v4JsSdmj
>>967

自分でコードを出してみなよ〜

命題:オブジェクトAの向きを、オブジェクトBの方向へ向ける

 オブジェクトAの座標は任意(原点とは限らない)

 オブジェクトAの向きは任意(0度とは限らない)

 オブジェクトBの座標は任意(原点とは限らない)

 オブジェクトBの位置はVector3で「target」とする

2Dだから、forward軸をtargetへ向かせるLookAtは使用できない

さて、969のコードを超える簡略化ができるのか?!どうか
2017/12/19(火) 22:16:40.59ID:m7Eb2COO
アセットを購入すれば簡単簡単
2017/12/19(火) 22:17:29.27ID:v4JsSdmj
そもそも角度って言っても、
それぞれのベクトルの偏角なのか、2つのベクトルのなす角なのか・・・

Rotate(0, 0, θ)で入れるには、
オブジェクトAからオブジェクトBへ向かうベクトルの偏角じゃないとダメだから、

オブジェクトAのベクトルとオブジェクトBのベクトルのなす角を求める
Vector3.Angleを使っても、それじゃA→Bへの原点中心の公転角になっちゃうよ!

rotationに入れるにはQuaternionである必要があるし、
オブジェクトAの最初の向きが0度じゃない場合も考慮しないといけないし・・・

どう考えても面倒じゃない??
2017/12/19(火) 22:59:56.79ID:v4JsSdmj
アセットおじさんは、
なんていうアセットで、いくらで、どの機能を使うとできるのかも明記して欲しいね〜
「探せばあるかもよ」じゃね・・・
2017/12/20(水) 00:34:43.35ID:TUVA4DF6
>>969

考えてみました。
Aに下記のスクリプトをセットします。

public class A : MonoBehaviour {
 GameObject obj;
 Vector3 target, position, direction;

 void Start () {
  obj = GameObject.Find ("B");
  target = obj.transform.position;
  position = transform.position;
  direction = target - position;
  Invoke ("Rotate", 1.0f);
 }

 void Rotate(){
  transform.right = direction; ←ここを置き換えるコードです。
 }
}
2017/12/20(水) 00:39:41.23ID:TUVA4DF6
@Quaternion.FromToRotationを使用する方法1
 transform.rotation = Quaternion.FromToRotation (Vector3.right, direction);

AQuaternion.FromToRotationを使用する方法2
 transform.rotation = transform.rotation * Quaternion.FromToRotation (transform.right, direction);

BVector3.Angleを使用する方法1
 transform.rotation = Quaternion.Euler(0, 0, Mathf.Sign(Vector3.Dot(Vector3.forward, Vector3.Cross(Vector3.right, direction))) *Vector3.Angle(Vector3.right, direction));

CVector3.Angleを使用する方法2
 transform.rotation = transform.rotation * Quaternion.Euler(0, 0, Mathf.Sign(Vector3.Dot(transform.forward, Vector3.Cross(transform.right, direction))) *Vector3.Angle(transform.right, direction));
2017/12/20(水) 00:44:36.57ID:TUVA4DF6
DVector3.Angleを使用する方法3(Rotateを使用)
 transform.Rotate (0, 0, Mathf.Sign(Vector3.Dot(Vector3.forward, Vector3.Cross(transform.right, direction))) *Vector3.Angle(transform.right, direction));

EMathf.Atan2を使用する方法1(Rotateを使用)
 transform.Rotate (0, 0, Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - transform.rotation.eulerAngles.z);

FMathf.Atan2を使用する方法2
 transform.rotation = Quaternion.AngleAxis(Mathf.Atan2((direction.y, direction.x) * Mathf.Rad2Deg, Vector3.forward);

うーん、どうやっても元よりも長いコードになってしまいます。

オブジェクトAの位置が原点だとか、オブジェクトAの向きが無回転だとか、
条件を付ければ、もう少し簡略化できますが・・・
2017/12/20(水) 01:00:49.24ID:TUVA4DF6
Quaternion.FromToRotation(A, B)では、
回転方向を含めた回転状態を得られますが、

Vector3.Angle(A, B)では、
ベクトル間の角度しかわからず、向きがわかりません。
また、取得される角度は180度以下に限定されるため、
左向きに270度は、右向きに90度かもしれないということです。

回転方向は、Vector3.Cross(A, B)のZ成分が正か負かで判定します。
2Dでは、Mathf.Sign((Vector3.Cross(A, B)).z)でも良いのですが、
3Dでは、回転面がXY平面上とは限らないため、外積ベクトルと
正の向きにしたい軸との内積をとってから符号判定した方が確実です。

Atan2関数は、戻り値がradのため、度に直す必要があります。
また、相対回転であるRotateを使用する場合は、
求めた偏角から、現在の向きの回転角を引いておく必要があります。

rotationはQuaternionのため、eulerAnglesでオイラー角に戻しておき、
Z軸回転成分だけを取り出して減算します。
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ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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