我的游戏中有太空船和一些硬币。当我将太空船移向硬币时,我想要有一个磁效应,以便太空船吸引所有硬币。下面的代码在我的情况下不起作用。我有一个circlecollider2d附在我所有硬币的孩子身上。这个想法是当任何硬币越来越靠近我的宇宙飞船时,宇宙飞船将所有硬币都吸进来。但它不起作用(没有磁效应)。
此代码附在硬币上。
public GameObject attractedTo;
public float radius;
public float force;
private bool inside;
private Transform magnet;
private Rigidbody2D rb;
void Start() {
rb = attractedTo.GetComponent<Rigidbody2D>();
magnet = GameObject.Find("Magnet").GetComponent<Transform>();
inside = false;
}
void FixedUpdate () {
if(inside) {
Vector3 magnetField = attractedTo.transform.position - magnet.position;
magnetField.z = 0;
float index = (radius - magnetField.magnitude) / radius;
rb.AddForce(force * magnetField * index, ForceMode2D.Force);
}
}
void OnTriggerEnter2D (Collider2D other) {
if (other.gameObject.tag == "PlayerShipTag") {
inside = true;
}
}
void OnTriggerExit2D (Collider2D other) {
if (other.gameObject.tag == "PlayerShipTag") {
inside = false;
}
}
答案 0 :(得分:1)
您的脚本附在每枚硬币上,您希望将力量应用于每枚硬币。 Start
中的这一行:
rb = attractedTo.GetComponent<Rigidbody2D>();
我假设attractedTo
是宇宙飞船?以后,在FixedUpdate
,你正在向rb施加一支力量。
rb.AddForce(force * magnetField * index, ForceMode2D.Force);
因此,如果我正确理解您的代码,您就会向太空飞船施加一支力量,而不是硬币。
你需要为每枚硬币添加一个RigidBody2D并将力(正确计算)应用到硬币的RigidBody2d。
编辑:关于您因重力而跌落的硬币的评论,您可以随时关闭硬币刚体的重力。
编辑:另外一个注意事项是您使用从磁铁到太空飞船的矢量作为力的方向。但是你没有将它标准化为单位向量,因此你的力量会根据距离而变化(这很好,除非你已经考虑了索引)。