我试图在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.出于某种原因,硬币只能以直线移动,因此大多数硬币都会经过玩家
任何人都知道如何解决这个问题? 任何帮助将不胜感激!
答案 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制作,在那里获得你的参考。它也已安装在编辑器的脚本部分中。如果您在查找时遇到问题,请转到此链接并查看脚本。
[更新答案]
对于第二个问题,只有新硬币被吸引。
检查所有这些情况。
gameObject.GetComponent<Rigidbody>().AddForce (strengthOfAttraction * direction);
变量是空白的。attractedTo
。您可以在Instantiate上实现该功能,然后使用TAG查找所有GameObjects。然后getcomponent然后分配attractedTo