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);