当我从地上捡起一个物体时,我的脚本做了一些意想不到的事情

When i pick an object from the ground, my script does something unexpected

我目前正在编写一个脚本,该脚本可以拿起一个项目,然后通过单击鼠标左键将其放下。我还计划添加一个项目的旋转和一些图标,以便在我执行其中一个操作时显示。

我目前对此还很陌生,所以我可能会陷入困境。但我想试试。

这是我的代码:

public class PickUp : MonoBehaviour {

public Transform onHand;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
    if(Input.GetMouseButton(1)){
        this.transform.position = onHand.position;
    }
}

void OnMouseDown () {



    GetComponent<Rigidbody>().useGravity = false;
    this.transform.position = onHand.position;
    this.transform.parent = GameObject.Find("Player").transform;
}

void OnMouseUp () {
    this.transform.parent = null;
    GetComponent<Rigidbody>().useGravity = true;
}

}

到目前为止它有点用.. 我在拿起我的对象时遇到了一些麻烦,它并不总是让我。在它真正抓住对象之前,我必须点击几次。当它发生时,由于一些我不明白的奇怪原因,物体开始向上飞行。我还拿着它,我还能带着它走来走去,一松手它就掉下来了。

根据您显示的有限数据,我可以建议一些常见的事情来检查/尝试。如果您更新更多详细信息,我会尽力帮助您。

为您的 public Transform onHand 变量分配了什么值?

你在两个地方做点击检测是有原因的吗?尝试删除 "Update" 方法中的行。

OnMouseDown 方法应该足够了。但是,要使 OnMouseDown 起作用,您的对象需要设置物理碰撞器。检查你是否有对撞机,它的尺寸是否符合你的预期。

出于调试目的,请尝试将拾取器刚体的 "isKinematic" 设置为 true(从检查器中永久设置)这应该会禁用重力和其他力来移动拾取对象,因此您可以测试其余部分你的代码。

另外,当你拿起它时,将它的变换位置设置为 0,0,0 这应该使对象在玩家对象的确切中心位置跟随玩家。

一旦您确认其工作正常,请重新安装功能并查看是否有任何功能破坏了设置。

首先将位置从 0,0,0 设置回 onHand,然后检查拾取器是否实际出现在玩家的手上。 如果不是,请检查 onHand 变量的值。

然后你可以关闭isKinematic,看看是否一切都还好。

作为旁注: 您可能希望继续使用 isKinematic 而不是禁用重力。您可以在拾取它时将其设置为运动学以阻止任何力影响拾取器的位置,而拾取器本身仍会对其他刚体产生影响。 然后当你把它放在鼠标上时,再次关闭 isKinematic