ひきつけたいオブジェクトにタグをつけて、GameObject.FindGameObjectsWithTagで全部取得してしまってから、Rigidbody2D.AddForceでひきつけるオブジェクトの方向へ距離の2乗に反比例した力を掛けるコードを書けばいいと思います。具体的にはこんな感じでしょうか。
public class Attractor: MonoBehaviour {
public float forceFactor = 1f;
List<Rigidbody2D> objectBodies = new List<Rigidbody2D>();
void Start() {
foreach(var obj in GameObject.FindGameObjectsWithTag("attracted")) {
var rb = obj.GetComponent<Rigidbody>();
if (rb == null) {
continue;
}
objectBodies.Add(rb);
}
}
void Update() {
foreach(var rb in objectBodies) {
rb.AddForce(GetForce(rb.transform.position));
}
}
Vector2 GetForce(Vector2 pos) {
float dist = Vector2.Distance(transform.position, pos);
Vector2 dir = (transform.position - pos).normalized;
return dir / (dist * dist) * forceFactor;
}
}
ボールなのでこういう簡易的なコードでも大丈夫なのですが、これが長方形だったりすると少し変な挙動になるので、GetForce関数を書き換える必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/05 02:07
2020/01/05 07:35
2020/01/05 08:14 編集
2020/01/05 09:19
2020/01/05 09:27
2020/01/06 00:01
2020/01/07 03:51
2020/01/07 04:10
2020/01/08 02:16
2020/01/08 02:25
2020/01/08 02:35
2020/01/08 06:09
2020/01/08 06:17
2020/01/09 02:44
2020/01/09 02:52
2020/01/09 03:02