Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 吸引硬币的磁效应_C#_Unity3d_Game Physics_Unity3d 2dtools - Fatal编程技术网

C# 吸引硬币的磁效应

C# 吸引硬币的磁效应,c#,unity3d,game-physics,unity3d-2dtools,C#,Unity3d,Game Physics,Unity3d 2dtools,我的游戏里有一艘宇宙飞船和一些硬币。当我把我的宇宙飞船移向硬币时,我想产生一种磁性效果,这样宇宙飞船就能把所有的硬币都吸进去。下面的代码在我的情况下不起作用。我所有硬币的一个孩子身上都有一个圆形硬币。这个想法是当任何硬币越来越靠近我的宇宙飞船时,宇宙飞船就会把所有的硬币都吸进去。但它不工作(没有磁效应) 这个密码附在硬币上 public GameObject attractedTo; public float radius; public float force; private bool i

我的游戏里有一艘宇宙飞船和一些硬币。当我把我的宇宙飞船移向硬币时,我想产生一种磁性效果,这样宇宙飞船就能把所有的硬币都吸进去。下面的代码在我的情况下不起作用。我所有硬币的一个孩子身上都有一个圆形硬币。这个想法是当任何硬币越来越靠近我的宇宙飞船时,宇宙飞船就会把所有的硬币都吸进去。但它不工作(没有磁效应)

这个密码附在硬币上

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;
    }
}
公共游戏对象被吸引到;
公众浮标半径;
公众浮力;
私人住宅;
专用变换磁铁;
私有刚体2d rb;
void Start(){
rb=attractedTo.GetComponent();
magnet=GameObject.Find(“magnet”).GetComponent();
内=假;
}
无效固定更新(){
如果(内部){
Vector3 magnetField=吸引到.transform.position-magnet.position;
magnetField.z=0;
浮动指数=(半径-磁场大小)/半径;
rb.AddForce(力*磁场*索引,力模式2D.force);
}
}
无效OnTiggerEnter2D(碰撞的R2D其他){
if(other.gameObject.tag==“PlayerShipTag”){
内=真;
}
}
无效OnTriggerExit2D(碰撞的R2D其他){
if(other.gameObject.tag==“PlayerShipTag”){
内=假;
}
}

您的脚本附加到每个硬币上,您希望您的力应用到每个硬币上。
Start
中的此行:

rb = attractedTo.GetComponent<Rigidbody2D>();
因此,如果我正确理解了你的代码,你是在对宇宙飞船施加力,而不是对硬币施加力

您需要为每个硬币添加一个刚体,并将力(正确计算)应用于硬币的刚体

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


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

当你说它不起作用时,你的意思是什么都没有发生,或者发生了什么事,但不是你想要的。磁效应没有出现。它们会因为刚体ody2d组件(重力)而下降。你能确认(即使用断点)内部的
设置是否正确吗?是的。内部工程。我有两个对撞机连在一枚硬币上。一个盒子碰撞了R2D和一个圆环碰撞了R2D。当他们试图触发宇宙飞船的BoxCollized2D时,他们都被搞砸了。我不知道你说的对撞机被搞砸了是什么意思。他们怎么了?谢谢。我会尽快试一试。:)好的。我改了。但当我走近硬币时,它们会在屏幕上奇怪地飞过。我添加了一个编辑,上面有一个关于you magnetField方向的问题。否则,如果您发现硬币移动过快或其他情况,请尝试从非常低的力值开始,然后逐渐调整,直到得到正确的响应。
rb.AddForce(force * magnetField * index, ForceMode2D.Force);