繁体   English   中英

Unity中的磁铁脚本问题

[英]Magnet script issues in Unity

我正在尝试在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.由于某些原因,硬币只能沿直线移动,因此它们中的大多数会经过玩家

有谁知道该如何解决? 任何帮助将不胜感激!

代码上的主要问题。 您必须重新创建有关如何使硬币更接近玩家的过程逻辑。

第一个主要问题是这个。

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

因此,框架将重新计算并创建一个新的指针名称direction然后尝试找到gameObject.GetComponent<Rigidbody>().AddForce (strengthOfAttraction * direction); 您在gameObject中的自己的组件。 然后致电Addforce。 AddForce。 而且您甚至都没有使用time.deltatime。

Addforce将根据您输入的方向推动刚体。 所以它会一直下去。 并且您正在执行每秒每帧固定数量的帧。

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

使用平滑跟踪脚本。 由Unity3D制造,在那里可以找到您的参考。 它还已经安装在编辑器的脚本部分中。 如果找不到问题,请转到此链接并检查脚本。

平滑跟随脚本

[ 更新答案 ]

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

检查所有这些情况。

  1. 您的播放器是新生成的,您的attractedTo变量为空白。
  2. 非新生成的硬币应该已经参考了玩家,否则,您必须告诉所有硬币,如果您生成了玩家,则它们需要被玩家吸引。 - >分配attractedTo当球员催生。

您可以通过实例化实现,然后找到所有带有TAG的GameObject。 然后getcomponent然后分配attractedTo

  1. 您未生成的硬币没有脚本组件。
  2. 您未生成的硬币已被禁用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM