Unity - выполнение радиопередачи от C# влияет на все экземпляры сборных - PullRequest
0 голосов
/ 22 марта 2020

У меня есть следующее C#, прикрепленное к префабу в Unity3d:

void Update()
    {
        if(Input.GetMouseButton(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                if (hit.collider.gameObject.CompareTag("Tile") && hit.collider.gameObject.name == gameObject.name)
                {
                    Debug.Log("You clicked a tile");
                    Debug.Log("The game object you hit is:" + hit.collider.gameObject.name);

                    Rigidbody rigidBody = gameObject.GetComponent<Rigidbody>();
                    rigidBody.constraints = RigidbodyConstraints.FreezePositionX | RigidbodyConstraints.FreezePositionY | RigidbodyConstraints.FreezePositionZ;
                    //hit.rigidbody.AddExplosionForce(5000, hit.collider.ClosestPoint(hit.point), 5.0f, 0.0f);
                    rigidBody.AddForceAtPosition(ray.direction *200, hit.collider.ClosestPoint(hit.point));

                }
            }
        }

    }    
}

Если вы заметили, мне пришлось сравнить оба тега объекта попадания, но также убедиться, что имя объекта также соответствует имя объекта, к которому прикреплен скрипт, в противном случае все Экземпляры этого префаба на сцене были затронуты одновременно. Почему это происходит? Выходные данные Debug.Log () показывают, что каждый щелчок поражает только один коллайдер, так почему же затрагиваются другие экземпляры этого префаба?

...