Overview: Accessing Other Game Objects 访问其他游戏物体
Most advanced game code does not only manipulate a single object. The Unity scripting interface has various ways to find and access other game objects and components there-in. In the following we assume there is a script named OtherScript.
Most advanced game code does not only manipulate a single object. The Unity scripting interface has various ways to find and access other game objects and components there-in. In the following we assume there is a script named OtherScript.js attached to game objects in the scene.
多数高级的游戏代码并不仅仅控制单独的游戏对象. Unity脚本有很多方法去查找和访问他们的游戏对象和组件.下面我们假设一个脚本OtherScript.js附于场景中的一个游戏对象上.
- C#
- JavaScript
<code>function Update () { otherScript = GetComponent(OtherScript); otherScript.DoSomething(); }</code>
1. Through inspector assignable references.
通过检视面板指定参数.
You can assign variables to any object type through the inspector:
你能通过检视面板为一些对象类型设置变量值:
- C#
- JavaScript
<code><span>// Translate the object dragged on the target slot // 将要转换的对象拖拽到target位置</span> var target : Transform; function Update () { target.Translate(0, 1, 0); }</code>
You can also expose references to other objects to the inspector. Below you can drag a game object that contains the OtherScript on the target slot in the inspector.
你也可以把参数显示在检视面板.随后你可以拖拽游戏对象OtherScript到检视面板中的target位置.
- C#
- JavaScript
<code>using UnityEngine; using System.Collections; public class example : MonoBehaviour { public OtherScript target; void Update() { target.foo = 2; target.DoSomething("Hello"); } }</code>
2. Located through the object hierarchy.
确定对象的层次关系
You can find child and parent objects to an existing object through the Transform component of a game object:
你能通过游戏对象的 Transform 组件去找到它的子对象或父对象:
- C#
- JavaScript
<code><span>// Find the child "Hand" of the game object //获得子游戏对象"Hand" // we attached the script to // 我们现在的脚本为</span> transform.Find("Hand").Translate(0, 1, 0);</code>
Once you have found the transform in the hierarchy, you can use GetComponent to get to other scripts.
一旦你在层次视图找到transform,你便能用 GetComponent 获取其他脚本.
- C#
- JavaScript
<code><span>// Find the child named "Hand". // On the OtherScript attached to it, set foo to 2. // 找到子对象 "Hand". // 获取OtherScript,设置foo为2</span>. transform.Find("Hand").GetComponent(OtherScript).foo = 2; <span>// Find the child named "Hand". // Call DoSomething on the OtherScript attached to it. // 获得子对象"Hand". // 调用附属于它的 OtherScript的DoSomething.</span> transform.Find("Hand").GetComponent(OtherScript).DoSomething("Hello"); <span>// Find the child named "Hand". // Then apply a force to the rigidbody attached to the hand. //获得子对象"Hand". // 加一个力到刚体上</span> transform.Find("Hand").rigidbody.AddForce(0, 10, 0);</code>
You can loop over all children: 你能循环到所有的子对象:
- C#
- JavaScript
<code><span>// Moves all transform children 10 units upwards! //向上移动所有的子对象1个单位!</span> for (var child : Transform in transform) { child.Translate(0, 10, 0); }</code>
See the documentation for the Transform class for further information.
查看文档 Transform 类可以获得更多信息.
3. Located by name or Tag.
You can search for game objects with certain tags using GameObject.FindWithTag and GameObject.FindGameObjectsWithTag . Use GameObject.Find to find a game object by name.
GameObject.FindWithTag 和 GameObject.FindGameObjectsWithTag .使用 GameObject.Find 通过名字获得游戏对象.
- C#
- JavaScript
<code>function Start () { <span>// By name 通过名字</span> var go = GameObject.Find("SomeGuy"); go.transform.Translate(0, 1, 0); var player = GameObject.FindWithTag("Player"); player.transform.Translate(0, 1, 0); }</code>
You can use GetComponent on the result to get to any script or component on the found game object
你可以用GetComponent获得指定游戏对象上的任意脚本或组件.
- C#
- JavaScript
<code>function Start () { <span>// By name 通过名字</span> var go = GameObject.Find("SomeGuy"); go.GetComponent(OtherScript).DoSomething(); var player = GameObject.FindWithTag("Player"); player.GetComponent(OtherScript).DoSomething(); }</code>
Some special objects like the main camera have shorts cuts using Camera.main .
一些特殊对象,比如主摄像机,用快捷方式 Camera.main .
4. Passed as parameters. 传递参数
Some event messages contain detailed information on the event. For instance, trigger events pass the Collider component of the colliding object to the handler function.
一些事件包含详细的消息信息.例如,触发事件传递碰撞对象的 Collider 组件到处理函数.
OnTriggerStay gives us a reference to a collider. From the collider we can get to its attached rigidbody.
OnTriggerStay给我们一个碰撞体参数.通过这个碰撞体我们能得到它的刚体.
- C#
- JavaScript
<code>function OnTriggerStay( other : Collider ) { <span>// If the other collider also has a rigidbody // apply a force to it! // 如果碰撞体有一个刚体 // 给他一个力!</span> if (other.rigidbody) other.rigidbody.AddForce(0, 2, 0); }</code>
Or we can get to any component attached to the same game object as the collider.
或者我们可以通过collider得到这个物体的任何组件.
- C#
- JavaScript
<code>function OnTriggerStay( other : Collider ) { <span>// 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. // 如果其他的碰撞体附加了OtherScript // 调用他的DoSomething. // 一般碰撞体没有附脚本, // 所以我们需要首先检查是否为null.</span> if (other.GetComponent(OtherScript)) other.GetComponent(OtherScript).DoSomething(); }</code>
Note that by suffixing the other variable in the above example, you can access any component inside the colliding object.
注意, 在上面的例子中使用后缀的方式访问其他变量.同样,你能访问到碰撞对象包含的任意组件。
5. All scripts of one Type 某个类型的脚本
Find any object of one class or script name using Object.FindObjectsOfType or find the first object of one type using Object.FindObjectOfType .
找到某个类型的对象或脚本可以用 Object.FindObjectsOfType 或获得某个类型的第一个对象使用 Object.FindObjectOfType .
- C#
- JavaScript
<code>using UnityEngine; using System.Collections; public class example : MonoBehaviour { void Start() { OtherScript other = FindObjectOfType(typeof(OtherScript)); other.DoSomething(); } }</code>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Win11XboxGameBar を完全にアンインストールするにはどうすればよいですか? Xbox GameBar は、システムに付属するゲーム プラットフォームです。ゲームの録画、スクリーンショット、ソーシャル機能のためのツールを提供します。ただし、大量のメモリを消費するため、アンインストールするのは簡単ではありません。アンインストールしたい友達もいますが、完全にアンインストールする方法を以下に紹介します。方法 1. Windows ターミナルを使用する 1. [Win+X] キーの組み合わせを押すか、タスクバーの [Windows スタート メニュー] を [右クリック] して、表示されるメニュー項目から [ターミナル アドミニストレータ] を選択します。 2. [ユーザー アカウント制御] ウィンドウで、このアプリがデバイスに変更を加えることを許可しますか? [はい]をクリックします。 3. 次のコマンドを実行します: Get-AppxP

Black Myth: Wukong に対する誇大宣伝は、ゲームが発売日に向けてゆっくりと進んでいくにつれて世界中で感じられ、8 月 20 日の発売でも期待を裏切りませんでした。ゲーム コミュニティ全体から非常に温かい歓迎を受けました。オンになってから

Sleeping Dogs: Definitive Edition は現在、GOG でわずか 2.99 ドルという大幅な割引価格で入手できます。これは、元の価格 19.99 ドルから 85% の大幅な割引になります。この取引を利用するには、GOG のゲームのページにアクセスし、追加するだけです。

前作の Sonic Generations (Amazon で 39 ドル) の成功を踏まえ、セガは Sonic X Shadow Generations を 2024 年 10 月 25 日にリリースする予定です。しばらくの間非常に待望されていたタイトルで、セガはオリジナル ゲームの機能を拡張しています。のために

スクウェア・エニックスの Foamstars は当初非常に好評を博し、発売日には大ヒットした Helldivers 2 を上回ったと伝えられています。これはおそらく PS Plus の月額ゲーム プログラムの一部として発売されたためと思われます。しかし、そのプレイヤー数はすぐに減少しました

Microsoft は本日、Win11Build226×1.2271 プレビュー アップデートをベータ チャネルにリリースし、すべての Windows Insider チャネル ユーザーを Microsoft Store の新バージョンを体験するよう招待しました。 Microsoft Store の最新バージョンは 22308.1401.x.x です。 新しい GamePass ページ: Microsoft は、プレーヤーが PC GamePass または GamePass Ultimate を探索および購読できるようにする新しい専用ページを導入したと発表しました。ユーザーは、限定ゲーム、割引、無料特典、EAPlay など、GamePass の多くの特典について知ることができます。 Microsoftはユーザーが飛びつかないことを望んでいる

現在 Microsoft Store で無料で提供されている Lonely Troops のゲームは、Hero of the Kindgom II だけではありません。 9 月 9 日まで、ゲーマーは、通常 5 ドルかかる 2008 年の建設ゲームである Townpolis を無料で入手することもできます。タウンポリスがプレーを置く

Hero of the Kingdom II は RPG 要素を備えたアドベンチャー ゲームで、プレイヤーは静かな村で妹と暮らす単純な農民の役割を果たします。しかし、その田園地帯はすぐに海賊の襲撃によって乱され、海賊たちは王を救うために出発します。
