rigidbody.AddForce影响所有具有相同脚本组件的游戏对象

本文关键字:组件 脚本 对象 游戏 AddForce 影响 rigidbody | 更新日期: 2023-09-27 18:09:13

在场景中,我有3个球,每个球都附有Ball.cs脚本。当我用鼠标推动球时,所有的球都开始移动,但我只需要我触摸的那个球移动。

这是我的fixeduupdate:

void FixedUpdate() {
    if(!isMoving) {
        if (Input.GetMouseButtonDown (0)) {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 100)) {
                if(hit.collider.tag == "Ball") {
                    startPos = hit.point;
                }
            }
        }
        if (startPos != Vector3.zero && Input.GetMouseButtonUp(0)) {
            endPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector3 direction = endPos - startPos;
            direction.Normalize();
            float distance = Vector3.Distance(endPos, startPos);
            rigidbody.AddForce(direction * distance * force * Time.deltaTime, ForceMode.Impulse);
            isMoving = true;
        }
    } else {
        if(rigidbody.velocity.sqrMagnitude == 0) {
            isMoving = false;
            startPos = endPos = Vector3.zero;
        }
    }
}

rigidbody.AddForce影响所有具有相同脚本组件的游戏对象

就像Nick Udell已经提到的,您对标记的比较是问题的根源。这三个球几乎同时执行同一个脚本。因此,如果您单击其中一个球,所有三个脚本将在您的鼠标位置上投射光线,并检查它们是否击中球。你猜怎么着?他们都击中了一个球,但不是他们所属的球。

你需要检查它们是否击中了附加到GameObject上的碰撞器

if (hit.collider == collider) {
    // do stuff
}