【发布时间】:2024-11-27 11:40:01
【问题描述】:
我的游戏中有一艘宇宙飞船和一些硬币。当我将我的宇宙飞船移向硬币时,我想要产生磁效应,以便宇宙飞船将所有硬币吸入。下面的代码在我的情况下不起作用。我有一个 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 时,两者都搞砸了。
-
我不明白你说的对撞机是什么意思。他们出了什么问题?
标签: c# unity3d game-physics unity3d-2dtools