问题描述
if (Physics.Raycast(ray,out hit))
{
hit.collider.gameObject.GetComponent<Renderer>().material = mainMaterial;
GameObject objects = hit.collider.gameObject;
}
如何将找到的游戏对象传递给另一个脚本使用?
if (Input.GetMouseButtonUp(0))
{
obj = ?;
}
解决方法
您应将对象保存在公共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
编辑:确保public GameObject rayHitObject;
就在类定义的下面,这是保存公用变量IE public class otherscript : MonoBehaviour
的方式。
当使用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;
}