[過去ログ]
【ゲームエンジン】Unityなんでも質問スレpart10 (1002レス)
【ゲームエンジン】Unityなんでも質問スレpart10 http://mevius.5ch.net/test/read.cgi/gamedev/1680959709/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
901: 名前は開発中のものです。 [] 2023/07/21(金) 10:32:19.22 ID:Z+zOC6cO >>897 ただ引き合うだけで良いのか、極性を考慮した動きが欲しいのかでも話が変わってきますが とりあえず前者と仮定してお話しますね。 2DならPointEffectorがありますが、3Dならスクリプトが必須だと思います。 引きあうオブジェクトは両方Rigidbody(物理演算コンポーネント)とColliderを持ってる前提として、やることは大きく分けて4つです。 1.近くのオブジェクトのColliderを検出する https://docs.unity3d.com/ja/2021.1/ScriptReference/Physics.OverlapSphere.html 2.検出したCollider(引き寄せる相手)がRigidbodyを持っているかチェックする https://docs.unity3d.com/ja/2019.4/ScriptReference/Component.TryGetComponent.html 3.引き合う力を計算する 4.AddForceで双方のRigidbodyに3で計算した力を加える https://docs.unity3d.com/ja/2021.2/ScriptReference/Rigidbody.AddForce.html これらの処理をFixedUpdateの中に記述すればOKです。 http://mevius.5ch.net/test/read.cgi/gamedev/1680959709/901
902: 名前は開発中のものです。 [] 2023/07/21(金) 10:36:36.04 ID:Z+zOC6cO 3の手順だけちょっと複雑になるのでコード置いておきます。(動作確認はしてないのでミスってたらごめんなさい) ------------------------------------------------ 以下はメンバ変数定義に書いてください。 //引き寄せる力 public float intensity = 10; //引き寄せる最大距離 public float maxDistance = 10; //自分のRigidbody public Rigidbody myRigidbody; ------------------------------------------------ 以下はFixedUpdateの中の3の処理(otherRigidbodyは2で取得した相手のRigidbodyが代入されてるものとする) //座標の差分を計算 Vector3 diff = (otherRigidbody.position - myRigidbody.position); //距離を計算 float distance = diff.magnitude; //距離を0~1の範囲で正規化する(ついでに0~1の範囲外を捨てる) float normalizedDistance = Mathf.Clamp01(distance / maxDistance); //近くの時力が強くなるようにしたいので反転する normalizedDistance = 1.0f - normalizedDistance; //磁力は距離の二乗に反比例して減衰する normalizedDistance = normalizedDistance * normalizedDistance; //力の向きを計算 Vector3 direction = diff.normalized; //力を計算する(向き*大きさ) Vector3 force = direction * (normalizedDistance * intensity); どうしても無理ってなったらまた聞いてください。 http://mevius.5ch.net/test/read.cgi/gamedev/1680959709/902
904: 名前は開発中のものです。 [] 2023/07/21(金) 22:55:32.59 ID:Z+zOC6cO >>903 残念ながらPhysicsDebugger自体は3D専用の機能ですが、 ProjectSettings->Physics2D->GernalSettings->Gizmosの項目で AllCollidersを有効にすればGameViewのGizmoでも常に表示されるようになります。 http://mevius.5ch.net/test/read.cgi/gamedev/1680959709/904
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.031s