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 并检查他的脚本。
[更新答案]
对于第二个问题,只有新币被吸引。
检查所有这些情况。
- 你的玩家是新生成的,你的
attractedTo
变量是空白的。
- 非新生成的硬币应该已经引用了玩家,否则你必须告诉所有硬币如果你生成玩家,他们需要被玩家吸引。 -> 在玩家生成时分配
attractedTo
。
您可以在实例化时实现该目标,然后使用 TAG 找到所有游戏对象。然后getcomponent然后赋值attractedTo
- 您的非 Spawned 硬币没有脚本组件。
- 您的非 Spawned 硬币被禁用。
我正在尝试在 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 并检查他的脚本。
[更新答案]
对于第二个问题,只有新币被吸引。
检查所有这些情况。
- 你的玩家是新生成的,你的
attractedTo
变量是空白的。 - 非新生成的硬币应该已经引用了玩家,否则你必须告诉所有硬币如果你生成玩家,他们需要被玩家吸引。 -> 在玩家生成时分配
attractedTo
。
您可以在实例化时实现该目标,然后使用 TAG 找到所有游戏对象。然后getcomponent然后赋值attractedTo
- 您的非 Spawned 硬币没有脚本组件。
- 您的非 Spawned 硬币被禁用。