1

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

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

这是我的代码:

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;
}

}

到目前为止,它的工作原理.. 我拿起我的对象有些麻烦,它并不总是让我。在它真正抓住对象之前,我必须单击几次。当它发生时,由于一些我不明白的奇怪原因,物体开始向上飞行。我仍然握着它,我仍然可以带着它四处走动,只要我一松手,它就会掉下来。

4

1 回答 1

1

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

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

您在两个地方进行点击检测是否有原因?尝试删除“更新”方法中的行。

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

出于调试目的,尝试在拾取器的刚体上将“isKinematic”设置为 true(来自检查器,永久),这应该会禁用重力和其他力来移动拾取器对象,以便您可以测试其余代码。

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

验证此操作正常后,将功能放回原处并查看是否有任何功能破坏了设置。

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

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

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

于 2016-01-21T08:48:45.767 回答