[過去ログ] 【ゲームエンジン】Unityなんでも質問スレpart10 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
901: 名前は開発中のものです。 [] 2023/07/21(金) 10:32:19.22 ID:Z+zOC6cO(1/3) AAS
>>897
897(2): 名前は開発中のものです。 [] 2023/07/20(木) 11:55:26.71 ID:9aWAACKn(1/2) AAS
ちゃす 磁力について質問です
磁石を実現するアセットはあるようですが、デフォルトの機能でなんとか出来ないでしょうか?
やるとしたら、force系にマイナスの力をかけるというものです

雑な磁力でもいいのですがね
ただ引き合うだけで良いのか、極性を考慮した動きが欲しいのかでも話が変わってきますが
とりあえず前者と仮定してお話しますね。
2DならPointEffectorがありますが、3Dならスクリプトが必須だと思います。

引きあうオブジェクトは両方Rigidbody(物理演算コンポーネント)とColliderを持ってる前提として、やることは大きく分けて4つです。

1.近くのオブジェクトのColliderを検出する
外部リンク[html]:docs.unity3d.com

2.検出したCollider(引き寄せる相手)がRigidbodyを持っているかチェックする
外部リンク[html]:docs.unity3d.com

3.引き合う力を計算する

4.AddForceで双方のRigidbodyに3で計算した力を加える
外部リンク[html]:docs.unity3d.com

これらの処理をFixedUpdateの中に記述すればOKです。
902
(1): 名前は開発中のものです。 [] 2023/07/21(金) 10:36:36.04 ID:Z+zOC6cO(2/3) AAS
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);

どうしても無理ってなったらまた聞いてください。
904
(1): 名前は開発中のものです。 [] 2023/07/21(金) 22:55:32.59 ID:Z+zOC6cO(3/3) AAS
>>903
903(1): 名前は開発中のものです。 [] 2023/07/21(金) 21:45:29.27 ID:/7F3Df0u(1) AAS
コライダーについて質問です
2dなのですが、コライダーをプレイ時に表示させるにはどうしたらいいでしょうか
window→analyse→physics debugger内にオンオフの項目がないようです、、、

>>902
ありがとうございます。
pointeffecterってまさにドンピシャの機能ですね
残念ながらPhysicsDebugger自体は3D専用の機能ですが、
ProjectSettings->Physics2D->GernalSettings->Gizmosの項目で
AllCollidersを有効にすればGameViewのGizmoでも常に表示されるようになります。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.036s