unity3d 实例化 调用_unity3d如何调用实例化物体的方法 - CSDN
  • unity3d引用和实例化对象的方法

    千次阅读 2017-07-13 12:12:14
    利用脚本组件的public变量把prefabs拖入到对象相应脚本组件的public变量中,如下图然后在脚本中写如下代码:public class explosionScript : MonoBehaviour { // our ParticleExamples class being turned into an ...

    利用脚本组件的public变量

    把prefabs拖入到对象相应脚本组件的public变量中,如下图

    这里写图片描述

    然后在脚本中写如下代码:

    public class explosionScript : MonoBehaviour {
    
      // our ParticleExamples class being turned into an array of things that can be referenced
        public ParticleExamples[] particleSystems;
    
        // the gun GameObject
        public GameObject gunGameObject;
    
        // a private integer to store the current position in the array
        private int currentIndex;
    
        // the currently shown prefab game object
        private GameObject currentGO;
    
        // where to spawn prefabs 
        public Transform spawnLocation;
        // Use this for initialization  
        void Start () {
          obj = currentGO = Instantiate (particleSystems[currentIndex].particleSystemGO, spawnLocation.position + particleSystems[currentIndex].particlePosition, Quaternion.Euler(particleSystems[currentIndex].particleRotation)) as GameObject;
        }  
    
        // Update is called once per frame  
        void Update () {  
    
        }  
    
    
    }

    直接加载资源文件中的prefabs

    加载Resource文件夹下的预制体

    GameObject duck02_1 = Instantiate(Resources.Load("duck02")) as GameObject;

    当然也可以直接用:

    GameObject Target = new GameObject(targetName);
                Target.transform.localPosition = Vector3.zero;
                targetBehaviour = Target.AddComponent<EasyImageTargetBehaviour>();

    然后用代码手动添加组件。
    这个方式 就比较麻烦一些了。


    引用一个已有的对象

    1.直接把场景中新建的gameObject拖入到脚本的公共变量中,然后在脚本中直接使用。
    这里写图片描述

    1. 给gameObject设置一个tag,然后通过
      GameObject obj = GameObject.FindGameObjectWithTag(“BugPlayer”);
      方法获取。
    展开全文
  • 关于在Unity实例化脚本的问题

    千次阅读 2017-10-23 18:38:57
    我们在学c#基础的时候,大家都知道想要获取一个实例类里面的公有成员,就必须在调用的时候实例化这个类。 比如有一个A类 class A {  public int age; } class Progress {  void Main()  { A a = ...

    我们在学c#基础的时候,大家都知道想要获取一个实例类里面的公有成员,就必须在调用的时候实例化这个类。

    比如有一个A类

    class  A

    {

      public int  age;

    }


    class Progress

    {

        void Main()

         {

    A a = new A();//实例化A类  也称实例化对象

                    a.name;

    Console.WriteLine(name);


         } 

    }


    那么如果在Unity中你想实例化一个继承了MonoBehaviour的一个B类呢? 这样还可以吗?

    比如有一个B类:

    class  B  : MonoBehaviour

    {

      public int  age;

    }


    class C : MonoBehaviour

    {

         B b; 声明

        void Start()

         {

                    b = new A();//实例化B类  也称实例化对象

                     b.name;

    print(b.name);

         } 

    }

    如果像上面那样写的话,打印出来的b.name是空的,null。愿意很简单。

    因为在Unity中除了对象之外都是组件,就是说继承了MonoBehaviour的类想要运行,那么必须要挂在游戏物体上(GameObject)。也就是说此时 B类 已经是一个组件了。

    所以我们就要以GetConponent<B>(); 的形式去访问了。不能new。

    当然你做一个单例 public static C _instance;//单例访问也可以,GameObject.FindObjectOfType<GameObject>();查找类型也可以。

    方式有很多,我们这里说的是为什么不能new,大家明白这个意思就好了,个人理解,有错误的,遗漏的地方还请多多留言。







    展开全文
  • Unity实例化游戏物体和销毁游戏物体

    万次阅读 多人点赞 2018-07-11 11:45:10
    Unity实例化物体是很常见的,例如坦克大战中你用子弹打中一个坦克之后,分数加1然后场景中又会生成新的坦克。这个过程中就存在一次游戏物体销毁(子弹打中坦克后,坦克销毁)和一次游戏物体实例化(场景中又生成新...

    Unity中实例化物体是很常见的,例如坦克大战中你用子弹打中一个坦克之后,分数加1然后场景中又会生成新的坦克。这个过程中就存在一次游戏物体销毁(子弹打中坦克后,坦克销毁)和一次游戏物体实例化(场景中又生成新的坦克),这算Unity中实例化游戏物体和销毁游戏物体的一个实际应用场景吧。

    首先附上实例化游戏物体的思维导图


    下面来看具体的操作吧。

    1. 在Unity中新建一个场景,创建一个Prefab物体,这里建了名为Box的预制体

    2. 创建一个空的游戏物体用来实例化生成Box

    操作如下:Hierarchy--->Creat Empty--->重命名为CreatBox--->新建一个脚本名称为CreatBox拖拽到CreatBox游戏物体上

    这一步比较简单就不截图了。

    3. 打开CreatBox脚本,写控制游戏物体生成的逻辑代码

    关键代码如下:

    GameObject.Instantiate(Object,Vector3,Quaternion)

    Intantiate方法是静态方法,要用类名GameObject . 调用。

    方法中有三个参数,也很好理解。大家想一想我们要在场景中生成一个游戏物体

    第一个参数 Object 是要生成的游戏物体

    生成的游戏物体在场景中要有一个位置吧,第二个参数Vector3就是游戏物体的生成位置

    第三个参数Quaternion是表示生成的游戏物体是否旋转,一般是不旋转我们用Quaternion.identity表示无旋转

    代码截图如下:

    代码中比较关键的一句:

    public GameOject  m_prefab;

    因为我们定义的是public类型变量,所以在Inspector面板中我们可以看到一个GameObject类型的变量,点击右侧的小圆点就可以找到我们的Box预制体,然后选中它。

    既然要在场景中生成游戏物体,这句话的意思就是要获得要生成游戏物体Box的引用

    void Start ( )函数中语句解释:

     GameObject.Instantiate(m_prefab, Vector3.up,Quaternion.identity);

    m_prefab:代表要传递的游戏物体

    Vector3.up:代表场景中原点上一米的位置

    Quaternion.identity:表示生成的物体无旋转

    4. 生成游戏物体的效果截图

    场景中出现了一个Box,而且在Hierarchy面板中也有一个Box游戏物体括号里有(Clone),意思是这个Box是从Box预制体上克隆过来的。


    -------我是美丽的分割线---------------------------------------------------------------------------------------------------------

    下面来引申一下,Vector3.up表示在场景中原点上方一米的位置生成一个Box, 假如我们要在任意指定的一个位置生成一个Box呢,再或者在任何一个随机位置生成一个Box呢,下面就看操作吧。

    • 指定位置生成一个Box

    这种情况我们只需要给Vector3类型参数指定一个新的位置参数就可以了

    GameObject.Instantiate(m_prefab, new Vector3(1,2,3),Quaternion.identity);

    new Vector3(x,y,z)随意指定参数

    • 随机位置生成一个Box

    随机位置用Random.Rang(min,max)函数成成随机的x,y,z值就可以了

    首先获得min和max的值:在场景中新建一个cube,拖拽cube测量场景长宽的min和max

    可以看到x轴左边,x值为4.5

    x轴右边,x值为-4.5

    所以min为-4.5,max为4.5

    同理可以得到z轴的最大值和最小值

    y轴是上下方向就没有最小最大值的概念了可以任意指定

    代码如下:

    在两米高的地方,x轴z轴上随机生成游戏物体


    -------我是美丽的分割线---------------------------------------------------------------------------------------------------------

    第二部分销毁游戏物体

    创建一个脚本DestoryBox--->添加到预制体Box上

    脚本添加到Box上方法:点中预制体Box--->Inspector面板中,下方Add Component,搜索找到CreatBox脚本组件


    脚本中代码:


    代码解释:

    GameObject.Destroy(gameObject,2.0f);

    Destory是静态方法,用类名加点的形式调用

    方法中有两个参数

    gameObject表示要销毁的游戏对象自身

    2.0f表示2秒后销毁,可以任意指定时间

    也可以用随机数函数生成随机的销毁时间,例如:Random.Range(1.0f,5.0f),表示1到5秒之间的秒数销毁游戏对象。


    -------我是美丽的分割线---------------------------------------------------------------------------------------------------------

    到这里本次分享就结束了,纯小白操作,一点点的码字确实很辛苦,如果这次分享对看到这一贴的你有帮助,那就点个赞吧,这样也能激励我继续学习下去,分享下去!










    展开全文
  • unity脚本中运行时实例化一个prefab

    千次阅读 2017-05-16 15:27:54
    unity实例化prefab

    在unity中实例化一个prefab 比实例化一个物体省代码,而且更方便灵活

    • 实例化一个object并创建:
    void Start() {
            for (int y = 0; y < 5; y++) {
                for (int x = 0; x < 5; x++) {
                    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    cube.AddComponent<Rigidbody>();
                    cube.transform.position = new Vector3(x, y, 0);
                }
            }
        }
    • 实例化一个prefab,需提前创建好一个cube,加组件Rigidbody,创建prefab,并把该cube拖到prefab上,代码只需要两句:
    void Start() {
        for (int y = 0; y < 5; y++) {
            for (int x = 0; x < 5; x++) {
                Instantiate(brick, new Vector3(x, y, 0), Quaternion.identity);
            }
        }
    }
    • 而且修改prefab时,不需要修改代码,灵活性好。

    增加大量固定格式的物体,用实例化prefab的方法也更方便

    public GameObject prefab;
    public int numberOfObjects = 20;
    public float radius = 5f;
    
    void Start() {
        for (int i = 0; i < numberOfObjects; i++) {
            float angle = i * Mathf.PI * 2 / numberOfObjects;
            Vector3 pos = new Vector3(Mathf.Cos(angle), 0, Mathf.Sin(angle)) * radius;
            Instantiate(prefab, pos, Quaternion.identity);
        }
    }
    展开全文
  • 关于Unity3D对象和脚本实例调用的顺序探究 我们先来看一些有趣Unity实例顺序的小实验。有图有真相!!   注:以上打印的代码语句如下: void Start () { print("-----" + this.transform.name); }  从...
  • Unity3d中默认函数调用顺序(MonoBehaviour)   Awake:当一个脚本实例被载入时Awake被调用,要先于Start。建议少用,此刻物体可能还没有实例化出来,会影响程序执行顺序。需要注意的是,...
  • 今天遇到一个问题,我再脚本实例化prefab时,不能添加监听事件。 如下代码 buttonObj.GetComponent().onClick.AddListener( delegate () { M(); } ); Instantiate(buttonObj, A); 解决办法其实很简单。先实例化,接收...
  • Unity3d 与 Android之间的互相调用

    千次阅读 2016-11-03 16:30:57
    一、前言 论学习心态: 每当进入一个新的工作环境,处于一种新的领域时,人总是会变得急功近利,特别是当任务紧急时,人总是会想着不断的从网上...关于Unity和Android的互相调用,网上的教程太多了,大同小异
  • 关于Unity3D对象和脚本实例调用的顺序探究 我们先来看一些有趣Unity实例顺序的小实验。有图有真相!! 注:以上打印的代码语句如下: [csharp]view plaincopy <spanstyle="font-...
  • Unity3D调用Android提供的接口

    千次阅读 2017-05-12 14:27:32
    需求:Android提供相关的接口,android只提供接口,没有相关的界面,android接口打包以jar包的形式供Unity3D调用1.编写相关的android接口 在studio中新建工程,并设置为library,编写相关的接口 ex:在Android中...
  • Unity实例化对象的公共方法

    千次阅读 2015-07-07 15:32:02
    我是小唐,最近写了一个实例化对象的公共方法,方便以后用的时候直接调用此方法,可以多处使用,自己根据自己的需求写的,不好还望多包含,一起学习一下吧。 using UnityEngine; using System.Collections; using ...
  • 使用预设在Unity中自动创建物体制作预设预设实例化         Prefabs(预设)是一种可以被重复使用的游戏对象。当需要创建一些需要重复使用的对象时,就可以使用预设体。此篇博客...
  • Thinking in Unity3D:材质系统概览

    千次阅读 2019-04-23 02:44:38
    Thinking in Unity3D:材质系统概览 关于《Thinking in Unity3D》 笔者在研究和使用Unity3D的过程中,获得了一些Unity3D方面的信息,同时也感叹Unity3D设计之精妙。不得不说,笔者最近几年的引擎...
  • 1.这是利用Instantiate实例化生成一堵墙 2.生成墙这个地方需要注意是预制体的使用,不要直接添加脚本到预制体,而是重新创建空物体,添加脚本,并在public那一栏添加预制体,否则会一直生成Cube直至卡死 using ...
  • Unity3D开发之加载text文本

    千次阅读 2017-10-23 15:49:58
    unity3D项目中很多需要配置文件,对于一些简单的配置,我们可以用text文件来保存我们的配置数据。下面是我的解析代码: using System; using System.Collections.Generic; using UnityEngine; using System.IO; ...
  • 转自:Unity教程之-Unity3d中Material与ShareMaterial引用的区别 我们在使用Unity引擎的时候,有时候需要去修改某个物体上的Material,在Unity的Renderer类里,提供了两个方法借口供我们使用。 Renderer.material和...
  • 一、前言 论学习心态: 每当进入一个新的工作环境,处于一种新的领域时,人总是会变得急功近利,特别是当任务紧急时,人总是会...关于Unity和Android的互相调用,网上的教程太多了,大同小异,抄来抄去。这次我就...
  • Editor : Reset Initization: Awake,OnEnable,Start Physics: FixedUpdate,yield WaitForSixedUpdate,Internal physics update,OnTriggerxxx,OnColisionxx Input events: OnMousexxx ...Update,yi...
  • 预制件的实例化,有两种方法: 1. 直接拖动到 “Hierarchy”视图中。 2. 代码生成。 出于项目需要,我需要代码中主动实例化一个预制件。犯了一个很简单的错误,记录一下。 出错描述: 我的控件叫...
1 2 3 4 5 ... 20
收藏数 6,326
精华内容 2,530
关键字:

unity3d 实例化 调用