objectUnity3dGameObject.Instantiate函数理解

发布时间 : 2020/11/30 09:34

instantiate函数

public static Object

Instantiate

(

Object original

);

public static Object

Instantiate

(

Object original

,

Transform parent

, bool

instantiateInWorldSpace

);

参数

original 要复制的现有对象。
position 新对象的位置。
rotation 新对象的方向。
parent 将指定给新对象的父对象。
instantiateInWorldSpace 要以指定父对象的方法保持该对象的全球位置(而不是相对于新父对象设置其位置),请通报 true。要相对于该对象的新父对象设置其位置,请通报 false。

该函数以与 Editor 中的“Duplicate”下令类似的方法创建对象的副本。假如要克隆的是 GameObject ,也可以选择指定其位置和旋转(不然,默以为原始 GameObject 的位置和旋转)。假如克隆的是 Component ,也将克隆其附加到的 GameObject,此时也可指定可选的位置和旋转。

克隆 GameObject 或 Component 时,也将克隆全部子对象和组件,它们的属性设置与原始对象相同。

默认环境下,新对象的 父对象 将为 null,因此它与原始对象不“同级”。但是,您可以使用重载方法设置父对象。假如指定了父对象但未指定位置和旋转,则使用原始对象的位置和旋转作为克隆对象的当地位置和旋转;假如 instantiateInWorldSpace 参数为 true,则使用原始对象的全球位置和旋转。假如指定了位置和旋转,则使用它们作为该对象活着界空间中的位置和旋转。

克隆时将通报 GameObject 的激活状态,因此,假如原始对象处于非激活状态,则克隆对象也将创建为非激活状态。

另请参阅: 关于预制件实例化的深入讨论 。

 // Instantiates 10 copies of Prefab each 2 units apart from each other

using UnityEngine; using System.Collections;

public class ExampleClass : MonoBehaviour { public Transform prefab; void Start() { for (int i = 0; i < 10; i++) { Instantiate(prefab, new Vector3(i * 2.0F, 0, 0), Quaternion.identity); } } }

Instantiate 最常用于实例化飞弹、AI 仇人、粒子爆炸或破坏对象更换。

 using UnityEngine;

public class Example : MonoBehaviour { // Instantiate a rigidbody then set the velocity

Rigidbody projectile;

void Update() { // Ctrl was pressed, launch a projectile if (Input.GetButtonDown("Fire1")) { // Instantiate the projectile at the position and rotation of this transform Rigidbody clone; clone = Instantiate(projectile, transform.position, transform.rotation);

// Give the cloned object an initial velocity along the current // object's Z axis clone.velocity = transform.TransformDirection(Vector3.forward * 10); } } }

Instantiate 也可以直接克隆脚本实例。 将克隆整个游戏对象层级视图,并返回克隆的脚本实例。

 using UnityEngine; using System.Collections;

public class Missile : MonoBehaviour { public int timeoutDestructor;

// ...other code... }

public class ExampleClass : MonoBehaviour { // Instantiate a Prefab with an attached Missile script public Missile projectile;

void Update() { // Ctrl was pressed, launch a projectile if (Input.GetButtonDown("Fire1")) { // Instantiate the projectile at the position and rotation o!f this transform Missile clone = (Missile)Instantiate(projectile, transform.position, transform.rotation);

// Set the missiles timeout destructor to 5 clone.timeoutDestructor = 5; } } }

克隆对象后,您还可以使用 GetComponent 设置附加到克隆对象的特定组件的属性。


public static T Instantiate (T original );

public static T

Instantiate

(T

original

,

Transform parent

);

public static T

Instantiate

(T

original

,

Transform parent

, bool

worldPositionStays

);

描述

您还可以使用泛型来实例化对象。有关更多具体信息,请参阅 泛型函数 页面。

在该示例中,我们将再次实例化导弹对象,但由于使用了泛型,我们不需要转换结果:

 using UnityEngine;

public class Missile : MonoBehaviour { // ...other code... }

public class InstantiateGenericsExample : MonoBehaviour { public Missile missile;

void Start() { Missile missileCopy = Instantiate<Missile>(missile); } }

Instantiate函数是unity3d中进行实例化的函数,也就是对一个对象进行复制操作的函数,这个函数共有五个重载(overloaded)函数,对这五个函数的明白不清晰的话产生的效果也不相同,如今对这五个函数做肯定的明白。

先附上unity3d API 中对这个函数的描述:
Instantiate函数
Instantiate函数实例化是将original对象的!全部子物体和子组件完全复制,成为一个新的对象。这个新的对象拥有与源对象完全一样的工具,包括坐标值等。
original:用来做复制操作的对像物体,源对象
position:实例化的对象的位置坐标
rotation:实例化的对象的旋转坐标(旋转四元数)
parent:实例化对象的父对象,就是给这个实例化对象找的爹,在完成实例化函数处置后,实例化对象将在父对象下,是父对象的子对象
instantiateWorldSpace(老的叫WorldSpaceStays):这个值为TRUE,表现实例化对象相对于全球坐标系的位置(是位置,不是坐标值,好比实例化前在Canvas左上角,实例化后还在左上角)稳定,相对于父对象的坐标值变了。为false,表现实例化对象相对于父对象的坐标值稳定,但活着界坐标系中的位置变了。

这里写图片描述
这两个函数的区别是instantiateWorldSpace即是true/false的区别。
第一个函数相当于instantiateWorldSpace即是false。效果:实例化对象将放在父对象下,完全保存了源对象的属性,其位置坐标值是相对于父对象的,值稳定,活着界坐标系下位置发生变革。
第二个函数相当于instantiateWorldSpace即是TRUE。效果:实例化对象将放在父对象下,完全保存了源对象的属性,其位置坐标值是相对于父对象的,值改变,活着界坐标系下位置不发生变革。

第一个函数:
这里写图片描述

这里写图片描述

这里写图片描述
0是源对象,text1~text9是实例化对象(text1的值为20;text2=40;text3=60;…text9=180;这边让他们表现都叠在一起了),左边的坐标值没有变革,效果图上的位置变了。
第二个函数:
这里写图片描述
这里写图片描述
左边的坐标值有变革,效果图上的位置稳定。可以看到,实例化出来的位置不一样。

这里写图片描述
这两个函数的position和rotation是指定实例化对象出现的位置。

ps:全部物体的transform都是相对于父对象来说的。至于为什么可以或许直接操作该物体相对!于全球坐标系的状态是由于:transform通过遍历自己的父对象盘算之后得到的结果。

野子电竞数据官网改版 https://www.xxe.io/ 全新登场
1.Instantiate

原型:public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);

作用:天生对象实例。可用于新天生子弹/炮弹/物体,也可用于刷新仇人

注:

1)该函数返回值在monodevelop中察看返回值为GameObject,官方api手册中为Object

2)该函数共有4个差别的版本对应差别的传参,以上为最常用版本

3)获取新天生的物体的属性/组件时,需要定义变量储存以便访问,如:

Game Object p = Instantiate ();

Rigidbody m = p.GetComponent ();

2.位移函数

(1)transform.Translate

原型:public void Translate(Vector3 translation, Space relativeTo = Space.Self);

作用:使某物在三维全球中“瞬移”

例:transform.Translate (new Vector3 (0, 0, 1) moveSpeed Time.deltaTime);

注:参数为矢量,必须带方向,可加速率变量乘在参数内

(2)velocity(对于刚体)

原型:public Vector3 velocity;

例:r.velocity = shootPoint.forward * shootPower;

注:赋值刚体速率,同样也为矢量,实用物理定律

3.transform.RotateAround

原型:public void RotateAround(Vector3 point, Vector3 axis, float angle);

作用:使某物绕另一物体的哪一跟轴旋转

例:transform.RotateAround (center.GetComponent().position,Vector3.up,-70 * Time.deltaTime);

使transform绕着center的y轴旋转,速率为70

4.Physics.OverlapSphere

原型:

public static Collider[] OverlapSphere(Vector3 position, float radius, int la!yerMask = AllLayers, QueryTriggerInteractionqueryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
作用:用于捕获以position为圆心的一个圆内的全部碰撞器,返回值会碰撞器数组,一样平常用于OnCollisionEnter()触发碰撞检测时获取碰撞物(如手雷爆炸等)
例:Collider[] cols = Physics.OverlapSphere (transform.position,explosionRadius);
5.Rigidbody.AddExplosionForce
原型:public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);
作用:增长力场在某点上,可用于爆炸等场景模仿
例:rb.AddExplosionForce (explosionPower,transform.position,explosionRadius);
在rb上增长一个气力为explosionPower,位置为自己,爆炸半径为explosionRadius的力
6.Destory
原型:public static void Destroy(Object obj, float t = 0.0F);
作用:在场景中删除某物
例:Destroy (gameObject); //删除gameObject
Destroy (se,delayClearExplosion); //在delayClearExplosion秒后删除se

待更新
·事件函数:

事件函数总览:

void Reset():当脚本被附加在GameObject上要么在面板中点击脚本的reset键时实行

void FixedUpdate():以固定帧率调用,有大概会出现一帧被调用多次,用于与运动相关的代码控制

·Time类

captureFramerate:将游戏速率减缓至(1/数值)时间,便于进行游戏截图

本文网址: http://www.directapkdownloader.com/d/20201030102531_952_2010416149/home