吸引硬币的磁力效应
Posted
技术标签:
【中文标题】吸引硬币的磁力效应【英文标题】:Magnetic effect to draw coins 【发布时间】:2018-09-12 20:49:14 【问题描述】:我的游戏中有一艘宇宙飞船和一些硬币。当我将我的宇宙飞船移向硬币时,我想要产生磁效应,以便宇宙飞船将所有硬币吸入。下面的代码在我的情况下不起作用。我有一个 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;
【问题讨论】:
当你说它不工作时,你的意思是 什么都没有发生 或者有什么正在发生但不是你想要的。 磁效应未出现。由于 Rigidbody2D 组件(重力),它们会掉下来。 您能否确认,即使用断点,inside
设置正确?
是的。里面的作品。我有两个对撞机附在硬币上。一个 boxCollider2D 和一个 CircleCollider2D。当他们试图触发宇宙飞船的 BoxCollider2D 时,两者都搞砸了。
我不明白你说的对撞机是什么意思。他们出了什么问题?
【参考方案1】:
您的脚本附在每枚硬币上,您希望将您的力量应用于每枚硬币。这行在Start
:
rb = attractedTo.GetComponent<Rigidbody2D>();
我假设attractedTo
是宇宙飞船?稍后,在FixedUpdate
中,您正在对 rb 施加一个力。
rb.AddForce(force * magnetField * index, ForceMode2D.Force);
因此,如果我正确理解了您的代码,那么您正在向宇宙飞船施加力,而不是硬币。
您需要为每个硬币添加一个 RigidBody2D 并将力(正确计算)施加到硬币的 RigidBody2d。
编辑:关于您关于硬币因重力而下落的评论,您可以随时关闭硬币刚体的重力。
编辑:另外一个注意事项是,您使用从磁铁到宇宙飞船的矢量作为力的方向。但是您并没有将其归一化为单位向量,因此您的力会根据距离而变化(这很好,除非您已经使用索引来考虑这一点)。
【讨论】:
谢谢。我会尽快试试这个。:) 好的。我改变了它。但是当我靠近硬币时,它们在屏幕上飞得很奇怪。 我添加了一个与你的磁力场方向有关的编辑。否则,如果您发现硬币移动得太快或其他原因,请尝试从非常低的力值开始,然后逐渐调整,直到获得正确的响应。以上是关于吸引硬币的磁力效应的主要内容,如果未能解决你的问题,请参考以下文章