[Unity]如何使用GetComponent并注意

你好。
埃托在京都参与工程师@ AS00812145.)它被称为

在游戏开发中,它通常频繁用于从某个脚本访问和操作另一个脚本。
并且它是统一提供的函数的GetComponent在那时非常有用。
您可以减少使用此功能所需的对象数量和脚本,并且游戏逻辑实现的宽度将大大传播。

这次,我们将解释如何使用GetComponent及其笔记。

统一的游戏概念

首先,让我们解释一个统一游戏的想法。
所有单位元素都以组件为单位制作。
所有相机,程序,图像以及Unity中的详细信息都是用“组件”构建的。
但是,组件只添加到因素的属性。所以,
有一个归属的身体。这是一个游戏对象。
让我们实际看看。

↑和脚本的图像将是组件。
正如我们前面的那样,组件是授予游戏对象的属性,
您可以轻松删除它。
让我们实际上在编辑器上运行。

有各种操作,如。
我认为我已经踢了组件的想法。

如何在统一中使用GetComponent

好吧,这是主要的主题。它将是“getComponent”,您想要运行从脚本手动手动完成的组件的工作。

这是一个函数,允许您将特定组件作为名称获取。

您必须先获得游戏对象以迄今为止使用GetComponent从Unity的概念中使用GetComponent。
因为组件仅为“属性”,所以如果它们仅是属性,则无法知道可以获得哪些组件。
所以,游戏对象 - >它并没有在授予的过程中没有得到它。

事实上,当您查看GetComponent文档时,
gameObject.getComponent.

gameObject.getComponent.`作为GameObject类的方法,GetComponent存在作为GameObject类的方法。

嗯,这很难理解,所以我实际上是用组件获取另一个脚本的功能,
我想在制作样品运行时解释。

准备

这次,尝试简单地从编辑器获取对象。
所以你需要两个源代码。

  • 具有您要实际运行功能的脚本
  • 实际执行目标脚本函数的脚本
  • 首先,让我们编写一个实际运行的脚本。
    由于它是以下脚本,因此以下源代码sahello.cs.附加到适当的对象。
    只需实现输出日志的函数,并且此时间将从另一个脚本执行。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    namespace say {
        public class sayHello : MonoBehaviour {
        
            public void Hello()
            {
                Debug.Log("hello");
            }
        }
    }
    

    确保这里的音符可以从外部查看此类。
    从外部获取脚本时,需要获取的类型信息,因此必须从外部读取它。

    实际执行目标脚本函数的后续脚本(下文中testscript.cs.写)。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using say; // 対象のスクリプトの情報を取得
    public class TestScript : MonoBehaviour {
    
        public GameObject targetObject; // エディターから取得できるようにpublicにしておく
    	// Use this for initialization
    	void Start () {
            sayHello say = targetObject.GetComponent<sayHello>(); //コンポーネントを取得
            say.Hello(); // 対象のコンポーネントのスクリプトを実行
    	}
    	
    	// Update is called once per frame
    	void Update () {
    		
    	}
    }
    
    

    此外,请以前附加到另一个对象。
    至于源代码,我将在堵塞时实际上解释一下我的手。

    获取游戏对象

    让我们实际上以团结运作。

    好吧,我认为在附加TestScript.cs后,编辑器已在编辑器上添加了一种形式。
    Unity允许公共中的变量从编辑器运行。和
    它不是组件或游戏对象的异常。
    所以,让我们拖放要实际执行的对象。
    现在我能得到一个游戏对象。

    这是testscript.cs.

    public GameObject targetObject; // エディターから取得できるようにpublicにしておく
    

    它是在部分实施的。

    收购组件

    然后,从现在开始获取组件并实际运行该功能。
    如前面提到的,
    由于GetComponent是FaxeObject的消息,从GameObject中获得,之前获得
    致电GetComponent。
    此函数通过组件类型并返回组件的实际情况,
    testscript.cs是以下部分。

    using say; // 対象のスクリプトの情報を取得
    public class TestScript : MonoBehaviour {
        public GameObject targetObject; // エディターから取得できるようにpublicにしておく
    	// Use this for initialization
    	void Start () {
            sayHello say = targetObject.GetComponent(); //コンポーネントを取得
            say.Hello(); // 対象のコンポーネントのスクリプトを実行
    	}
    

    GetComponent不必通过目标类型,即首先组件信息,
    我使用发电机。为此,我们首先获取来自使用的信息。
    作为GetComponent的结果,作为一个组件,部件的实际情况将回来。
    如果这次,脚本返回脚本类引用。
    而且我正在阅读该参考的功能:

     say.Hello(); // 対象のコンポーネントのスクリプトを実行
    

    这将是部分。

    然后尝试团结。
    我认为它按预期作为日志运行。

    实际用法(通常使用功能和使用等)

    好吧,我实际使用[get组件],但游戏对象
    由于首先设置有麻烦,因此如何从脚本动态获取
    让我们解释一下。
    这使用GameObject.Find和类似的功能来介绍它们。

    gameObject.find.find.find.find.

    gameObject.find.find.find.find.

    这是由场景中存在的游戏对象的名称获取。
    因为名称完全获取,所以它与操作负荷高。

    gameobject.findwithtag.

    gameobject.findwithtag.
    使用Game对象的标记名称。在这种情况下,必须将标记名称设置为该对象。

    gameObject.findobjectWithtag.

    gameObject.findgameObjectWithtag.
    这是一个检索GameObject.findwithtag中多个对象的版本。
    标记性质,它通常会为多个对象保留相同的标记,因此将所有对象带有标签进行搜索。
    因此,返回值是一个数组,如果没有适用,则阵列将返回。

    很重要的一点

    这些是初学者倾向于跌倒的性能问题。
    gameObject.find.find.find.find.非常沉重,因为它以完全匹配的名称扫描场景中的所有对象。
    因此,此功能不断导致游戏屏幕成为KAK。

    如果你说它都是由标签名称管理的,并尝试使用findwithtag进行操作,
    标签是爆炸性的增殖,管理层难以管理,将增加未命中和虫子,导致发展延迟。

    因此,让我们通过你制作的游戏和Sono游戏对象的角色来使用它。

    在我的情况下,
    从检查员:角色不会在单个和中途切换到另一个物体。
    gameObject.find.find.find.find.:未使用IT或初始化时间等时采集。
    gameObject.find.find.find.find.&&findobjectswithtag:您必须经常获取游戏对象。如果要一次更改为多个游戏对象

    我们决定如何使用这样。
    但是,如果这也开发出一个也开发游戏的游戏,如果您在一定程度上有一条线,
    即使游戏是巨人,也可以很容易地死亡。

    GetComponent摘要

    这是基本的东西,但如果它脱颖而出,游戏行为非常沉重。
    在这里,边界和图纸是实际的经验和尝试次数。
    引导所有开发的银色子弹不存在,因此让我们使用它来处理多个场景。

    【UNITY】刚性介绍!我们将轻松解释

    如何在Unity中使用Cortine [使用样品]

    给这篇文章的人

    assa

    我正在京都做工程师。记得阿萨或八个。 主要业务是网络中的爱好。好的