吸取硬币的磁效应

时间:2018-04-03 13:36:54

标签: c# unity3d game-physics unity3d-2dtools

我的游戏中有太空船和一些硬币。当我将太空船移向硬币时,我想要有一个磁效应,以便太空船吸引所有硬币。下面的代码在我的情况下不起作用。我有一个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;
    }
}

1 个答案:

答案 0 :(得分:1)

您的脚本附在每枚硬币上,您希望将力量应用于每枚硬币。 Start中的这一行:

rb = attractedTo.GetComponent<Rigidbody2D>();

我假设attractedTo是宇宙飞船?以后,在FixedUpdate,你正在向rb施加一支力量。

rb.AddForce(force * magnetField * index, ForceMode2D.Force);

因此,如果我正确理解您的代码,您就会向太空飞船施加一支力量,而不是硬币。

你需要为每枚硬币添加一个RigidBody2D并将力(正确计算)应用到硬币的RigidBody2d。

编辑:关于您因重力而跌落的硬币的评论,您可以随时关闭硬币刚体的重力。

编辑:另外一个注意事项是您使用从磁铁到太空飞船的矢量作为力的方向。但是你没有将它标准化为单位向量,因此你的力量会根据距离而变化(这很好,除非你已经考虑了索引)。