Unity 中的 Magnet 脚本问题

Magnet script issues in Unity

我正在尝试在 Unity 中制作磁铁 PowerUp。我使用了这个脚本,我把它附在了硬币游戏对象上:

public GameObject attractedTo; 

private float strengthOfAttraction = 3f;

void FixedUpdate ()
    {
    Vector3 direction = attractedTo.transform.position - transform.position;
    gameObject.GetComponent<Rigidbody>().AddForce (strengthOfAttraction * direction);
    }

我有两个问题: 1.只有新刷出的金币才会被玩家吸引 2. 由于某些原因,金币只能直线移动,所以大部分都经过了玩家

有人知道如何解决这个问题吗? 任何帮助将不胜感激!

您的代码存在重大问题。您必须重新创建有关如何使硬币更接近玩家的程序逻辑。

第一个主要问题是这个。

void FixedUpdate() 所以每帧固定的时间量。你正在尝试 声明一个变量 Vector3 :Vector3 direction = attractedTo.transform.position - transform.position;

因此框架将重新计算并创建一个新的指针名称 direction 然后您尝试查找 gameObject.GetComponent<Rigidbody>().AddForce (strengthOfAttraction * direction); 你自己的组件在你的游戏对象中。然后调用 Addforce。添加力。而且你甚至没有使用 time.deltatime.

Addforce 会根据你输入的方向推动刚体。所以它会直走。并且您正在执行每秒固定帧数的操作。

首先修复你的程序。我的推荐是这样的。

使用平滑跟随脚本。由 Unity3D 制作,在那里获取您的参考。它也已经安装在您的编辑器的脚本部分中。如果您找不到它,请转到此 link 并检查他的脚本。

Smooth Follow Script

[更新答案]

对于第二个问题,只有新币被吸引。

检查所有这些情况。

  1. 你的玩家是新生成的,你的 attractedTo 变量是空白的。
  2. 非新生成的硬币应该已经引用了玩家,否则你必须告诉所有硬币如果你生成玩家,他们需要被玩家吸引。 -> 在玩家生成时分配 attractedTo

您可以在实例化时实现该目标,然后使用 TAG 找到所有游戏对象。然后getcomponent然后赋值attractedTo

  1. 您的非 Spawned 硬币没有脚本组件。
  2. 您的非 Spawned 硬币被禁用。