如何从另一个脚本中使用gameObject?

时间:2020-08-15 11:13:18

标签: unity3d

我有一个使用射线查找对象的脚本

        if (Physics.Raycast(ray, out hit))
        {
            hit.collider.gameObject.GetComponent<Renderer>().material = mainMaterial;
            GameObject objects = hit.collider.gameObject;
        }

如何将找到的游戏对象传递给另一个脚本使用?

                if (Input.GetMouseButtonUp(0))
                {
                    obj = ?;
                }

2 个答案:

答案 0 :(得分:0)

您应将对象保存在公共GameObject中,该对象可以从另一个脚本中调用。假设场景中有3个对象。对象1是对象2通过射线投射检测到的对象。因此,object2找到object1并将其保存为:

public GameObject rayHitObject;
// blah blah blah
if (Physics.Raycast(ray, out hit))
    {
        hit.collider.gameObject.GetComponent<Renderer>().material = mainMaterial;
        rayHitObject = hit.collider.gameObject;
    }

现在object3可以通过调用object2.GetComponent<otherscript>().rayHitObject

从object2获取该对象。

编辑:确保public GameObject rayHitObject;就在类定义的下面,这是保存公用变量IE public class otherscript : MonoBehaviour的方式。

答案 1 :(得分:-1)

当使用raycast设置游戏对象时,在第一个脚本的顶部创建一个静态变量,然后可以在第二个脚本中使用。这只是几种方式之一。 在第一个脚本中创建:

 public static GameObject object;

   
    if (Physics.Raycast(ray, out hit))
    {
        hit.collider.gameObject.GetComponent<Renderer>().material = mainMaterial;
        object = hit.collider.gameObject;
    }

第二个脚本,您可以这样称呼它:

            if (Input.GetMouseButtonUp(0))
            {
                obj = firstScript.object;
            }