1、通过标签来寻找
复制代码
复制代码
复制代码
很多高级游戏代码不仅仅控制单一物体。Unity脚本接口有很多方法获得和访问其他游戏物体和组件。下面我们假设有一个名为OtherScript.js的脚本附属于场景中的游戏物体。 var foo = 5; function DoSomething ( param : String) { print(param + " with foo: " + foo); } 1.使用检视视图指定参数。 你能通过检视视图为一些游戏类型指定变量: // Translate the object dragged on the target slot var target : Transform; function Update () { target.Translate(0, 1, 0); } 也能显示参数在其他物体检视视图。下面你能在Inspector面板中拖拽包含OtherScript的游戏物体到target上。 // Set foo DoSomething on the target variable assigned in the inspector. var target : OtherScript; function Update () { // Set foo variable of the target object target.foo = 2; // Call do something on the target target.DoSomething("Hello"); } 2.通过继承结构 你能通过Transform组件获得一个子和父物体到现在的物体。 // Find the child "Hand" of the game object // we attached the script to transform.Find("Hand").Translate(0, 1, 0); 你只要在hierarchy面板建立了transform,你就能用GetComponent去获取other scripts。 // Find the child named "Hand". // On the OtherScript attached to it, set foo to 2. transform.Find("Hand").GetComponent(OtherScript).foo = 2; // Find the child named "Hand". // Call DoSomething on the OtherScript attached to it. transform.Find("Hand").GetComponent(OtherScript).DoSomething("Hello"); // Find the child named "Hand". // Then apply a force to the rigidbody attached to the hand. transform.Find("Hand").rigidbody.AddForce(0, 10, 0); 你可以循环到它所有的子物体。 // Moves all transform children 10 units upwards! for (var child : Transform in transform) { child.Translate(0, 1, 0); } 查看文档Transform类 可以获得更多信息。 3.通过名字或标签 你能用确定的标签搜索物体,使用GameObject.FindWithTag 和GameObject.FindGameObjectsWithTag。使用GameObject.Find通过名字获得游戏物体。 function Start () { // By name var go = GameObject.Find("SomeGuy"); go.transform.Translate(0, 1, 0); // By tag var player = GameObject.FindWithTag("Player"); player.transform.Translate(0, 1, 0); } 你能使用GetComponent获得脚本或组件在找到的游戏物体上。 function Start () { // By name var go = GameObject.Find("SomeGuy"); go.GetComponent(OtherScript).DoSomething(); // By tag var player = GameObject.FindWithTag("Player"); player.GetComponent(OtherScript).DoSomething(); } 一些特殊对象如主摄像机有快捷方式,可以使用Camera.main。 4.传递参数 一些事件中包含详细的事件。例如:扳机事件传递(碰撞)Collider组件到碰撞物体的handler函数。 OnTriggerStay给我们一个碰撞参数.从碰撞体我们能给他赋一个刚体。 function OnTriggerStay( other : Collider ) { // If the other collider also has a rigidbody // apply a force to it! if (other.rigidbody) { other.rigidbody.AddForce(0, 2, 0); } } 或者我们可以获取游戏中碰撞者包含的任意组件。 function OnTriggerStay( other : Collider ) { // If the other collider has a OtherScript attached // call DoSomething on it. // Most of the time colliders won't have this script attached, // so we need to check first to avoid null reference exceptions. if (other.GetComponent(OtherScript)) { other.GetComponent(OtherScript).DoSomething(); } } 注意上面的例子,使用其他变量上的后缀,你能获取一些碰撞物体里的组件。 5.某个类型的所有脚本 从一个类找到任意对象或脚本,用Object.FindObjectsOfType或获得某个类型的第一个物体使用Object.FindObjectOfType. function Start () { // Find the OtherScript which is attached to any game object in the scene. var other : OtherScript = FindObjectOfType(OtherScript); other.DoSomething(); } --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 5、自己写的深度优先遍历,找物体的孩子并做些什么事情 复制代码
|
|