[英]rigidbody.AddForce affects all game objects with the same script component
在场景中,我有3个球,每个球都附加有Ball.cs脚本。 当我用鼠标推球时,所有球都开始移动,但是我只需要移动一个即可移动。
这是我的FixedUpdate:
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;
}
}
}
就像尼克·乌德尔(Nick Udell)曾经提到的那样,对标签的比较就是问题的根源。 这三个球几乎都在同时执行相同的脚本。 因此,如果单击这些球,则所有三个脚本将在您的鼠标位置投射光线,并检查它们是否击中了球。 你猜怎么了? 他们所有人都击中一个球,但没有击中属于他们的球。
您需要检查他们是否击中了附加在其GameObject上的对撞机
if (hit.collider == collider) {
// do stuff
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.