Unity中的磁体脚本问题

时间:2016-05-29 22:47:10

标签: c# unity5

我试图在Unity中制造一个磁铁PowerUp。我使用了这个脚本,我附加到硬币GameObject:

public GameObject attractedTo; 

private float strengthOfAttraction = 3f;

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

我有两个问题: 1.只有新产生的硬币才能吸引玩家 2.出于某种原因,硬币只能以直线移动,因此大多数硬币都会经过玩家

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

1 个答案:

答案 0 :(得分:0)

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

第一个主要问题是这个。

if(isTouch) { canvas.addEventListener('touchmove', scratchMove); document.addEventListener('touchend', scratchEnd); } else { canvas.addEventListener('mousemove', scratchMove); document.addEventListener('mouseup', scratchEnd); } 所以每帧固定的时间量。你正试图 声明变量Vector3:void FixedUpdate()

因此框架将重新计算并创建新的指针名称Vector3 direction = attractedTo.transform.position - transform.position;,然后您尝试查找direction 你自己的游戏对象组件。然后调用Addforce。 AddForce。你甚至没有使用time.deltatime。

Addforce将根据您输入的方向推动刚体。所以它会直截了当。并且你每秒都在做每个固定量的帧数。

首先修复你的程序。我的建议就是这个。

使用Smooth Follow脚本。由Unity3D制作,在那里获得你的参考。它也已安装在编辑器的脚本部分中。如果您在查找时遇到问题,请转到此链接并查看脚本。

Smooth Follow Script

[更新答案]

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

检查所有这些情况。

  1. 您的播放器是新生成的,而您的gameObject.GetComponent<Rigidbody>().AddForce (strengthOfAttraction * direction);变量是空白的。
  2. 非新生成的硬币应该已经引用了玩家,如果不是你必须告诉所有硬币,如果你产生玩家,他们需要被玩家吸引。 - &GT;在玩家生成时分配attractedTo
  3. 您可以在Instantiate上实现该功能,然后使用TAG查找所有GameObjects。然后getcomponent然后分配attractedTo

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