unity3d预设体是什么_unity3d中什么是预设体 - CSDN
  • Unity3D学习之预设体

    2014-11-18 13:46:51
    Unity3D学习  新建一个场景在对象栏中右击Assets(资源文件夹)单击Create创建一个Floder(新文件夹)改名为Prefad(预设体)。 或直接单击Create创建一个Floder(新文件夹)改名为Prefad(预设体)。 单击Create...
          Unity3D学习    
    
          新建一个场景在对象栏中右击Assets(资源文件夹)单击Create创建一个Floder(新文件夹)改名为Prefad(预设体)。
    或直接单击Create创建一个Floder(新文件夹)改名为Prefad(预设体)。


    单击Create创建一个文件夹改名为Meterial放材质。
    同样单击Create创建new  material(材质球)


    给材质球添加颜色,单击材质球,属性栏中出现他的属性,然后给他一个颜色

    还有一是个材质球的法线上色,这种方法与默认方法相比,就是节省内存。

    我们选择默认方法,把材质球变为红色。我们可以点中材质球把他拖到层次栏中的Cube中去,这样Cube就变为红色。
    或者点中材质球把它直接拖给场景栏中的Cube,两种方法都可以给Cube上色。


    我们再把设计好的层次栏中Cube拖放到Prefad(预设体)中,这样就完成了。



    当我们在用Cube时就可以在Prefad(预设体)中直接把它拖到场景里。
    注意此时层次栏中的Cube变为蓝色。
    相关学习请到http://www.gopedu.com/祝你学习愉快



    展开全文
  • 之前一直在想如果要在Unity3d上创建很多个具有相同结构的对象,是如何做的,后来查了相关资料发现预设体可以解决这个问题! 预设体的概念: 组件的集合体 , 预制物体可以实例化成游戏对象. 创建预设体的作用: ...

    之前一直在想如果要在Unity3d上创建很多个具有相同结构的对象,是如何做的,后来查了相关资料发现预设体可以解决这个问题!

    预设体的概念: 组件的集合体 , 预制物体可以实例化成游戏对象.

    创建预设体的作用: 可以重复的创建具有相同结构的游戏对象。

    .1下面来讲解一下如何制作一个简单的预设体(上下为流程和结果图):

      

      

    .2 创建多个prefabs_new(代码,结果图):

    复制代码
     1 using UnityEngine;
     2 using System.Collections;
     3  
     4 //[ExecuteInEditMode]表示在编辑模式下运行(注意改变prefab的属性其他属性也会变)
     5 public class CreateInstance : MonoBehaviour {
     6     public GameObject prefabs = null;
     7     private Vector3 pos;
     8     void Start () {
     9         if (prefabs != null)
    10         {
    11             pos = new Vector3(0, 2.7f, -10.5114f);
    12             for (int i = 0; i < 5; ++i)
    13             {
    14                 Object tmpObj = Instantiate(prefabs, pos , Quaternion.identity);
    15                 pos.x = pos.x - 3;
    16             }
    17         }
    18         else
    19         {
    20             Debug.Log("prefabs is null");
    21         }
    22     }
    23 }
    复制代码

     

      

     如果(预设物C = 预设物B 和 预设物 A的组合) 则会形成 修改预设物A的数据不会影响预设物C中的内嵌数据,下面方法可以帮助解决!

     .4关于perfab之间的嵌套(主要是一个perfab数据修改了嵌套这个perfab的数据要做对应的更新):

         

    关于预设体嵌套预设体的代码(在实例化时会拿到最新的perfab数据):

    复制代码
    using UnityEngine;
    #if UNITY_EDITOR
    using UnityEditor;
    using UnityEditor.Callbacks;
    #endif
    using System.Collections.Generic;
     
    [ExecuteInEditMode]
    public class PrefabInstance : MonoBehaviour
    {
        public GameObject prefab;
     
    #if UNITY_EDITOR    
        // Struct of all components. Used for edit-time visualization and gizmo drawing
        public struct Thingy {
            public Mesh mesh;
            public Matrix4x4 matrix;
            public List<Material> materials;
        }
     
        [System.NonSerializedAttribute] public List<Thingy> things = new List<Thingy> ();
     
        void OnValidate () {
            things.Clear();
            if (enabled)
                Rebuild (prefab, Matrix4x4.identity);
        }
     
        void OnEnable () {
            things.Clear();
            if (enabled)
                Rebuild (prefab, Matrix4x4.identity);
        }
     
        void Rebuild (GameObject source, Matrix4x4 inMatrix) {
            if (!source)
                return;
     
            Matrix4x4 baseMat = inMatrix * Matrix4x4.TRS (-source.transform.position, Quaternion.identity, Vector3.one);
            
            foreach (MeshRenderer mr in source.GetComponentsInChildren(typeof (Renderer), true))
            {
                things.Add(new Thingy () {
                    mesh = mr.GetComponent<MeshFilter>().sharedMesh,
                    matrix = baseMat * mr.transform.localToWorldMatrix,
                    materials = new List<Material> (mr.sharedMaterials)
                });
            }
     
            foreach (PrefabInstance pi in source.GetComponentsInChildren(typeof (PrefabInstance), true))
            {
                if (pi.enabled && pi.gameObject.activeSelf)
                    Rebuild (pi.prefab, baseMat * pi.transform.localToWorldMatrix);
            }        
        }
     
        // Editor-time-only update: Draw the meshes so we can see the objects in the scene view
        void Update () {
            if (EditorApplication.isPlaying)
                return;
            Matrix4x4 mat = transform.localToWorldMatrix;
            foreach (Thingy t in things)
                for (int i = 0; i < t.materials.Count; i++)
                    Graphics.DrawMesh (t.mesh, mat * t.matrix, t.materials[i], gameObject.layer, null, i);
        }
     
        // Picking logic: Since we don't have gizmos.drawmesh, draw a bounding cube around each thingy
        void OnDrawGizmos () { DrawGizmos (new Color (0,0,0,0)); }
        void OnDrawGizmosSelected () { DrawGizmos (new Color (0,0,1,.2f)); }
        void DrawGizmos (Color col) {
            if (EditorApplication.isPlaying)
                return;
            Gizmos.color = col;
            Matrix4x4 mat = transform.localToWorldMatrix;
            foreach (Thingy t in things)
            {
                Gizmos.matrix = mat * t.matrix;
                Gizmos.DrawCube(t.mesh.bounds.center, t.mesh.bounds.size);
            }        
        }
     
        // Baking stuff: Copy in all the referenced objects into the scene on play or build
        [PostProcessScene(-2)]
        public static void OnPostprocessScene() { 
            foreach (PrefabInstance pi in UnityEngine.Object.FindObjectsOfType (typeof (PrefabInstance)))
                BakeInstance (pi);
        }
     
        public static void BakeInstance (PrefabInstance pi) {
            if(!pi.prefab || !pi.enabled)
                return;
            pi.enabled = false;
            GameObject go = PrefabUtility.InstantiatePrefab(pi.prefab) as GameObject;
            Quaternion rot = go.transform.localRotation;
            Vector3 scale = go.transform.localScale;
            go.transform.parent = pi.transform;
            go.transform.localPosition = Vector3.zero;
            go.transform.localScale = scale;
            go.transform.localRotation = rot;
            pi.prefab = null;
            foreach (PrefabInstance childPi in go.GetComponentsInChildren<PrefabInstance>())
                BakeInstance (childPi);
        }
     
    展开全文
  • unity3d学习之预设体

    2014-11-17 10:19:54
    为了方便以后的文件管理和节约学习时间,我们来学习一下预设体,并且不至于使文件夹杂乱无章。 先创建一个游戏对象,比如说创建一个立方体,然后对立方体做基本操作,添加材质球,如果还要在添加一个立方体,就要...

    为了方便以后的文件管理和节约学习时间,我们来学习一下预设体,并且不至于使文件夹杂乱无章。

    先创建一个游戏对象,比如说创建一个立方体,然后对立方体做基本操作,添加材质球,如果还要在添加一个立方体,就要复制,然后再添加材质球,这样会浪费很多时间

    而创建预设体则省去了复制这一步,在assets文件夹下创建prefab文件夹,然后将你所创建好的第一个对象放进prefab文件中,等在次要添加相同对象时,可以直接在prefab中拖放。

    感想:在学习的过程中,我们要认真的跟随老师的脚步脚踏实地的学习,这样可以少走很多弯路,在此基础上,我们可以拓展学习,可以实践自己的想法。

    更多内容请关注:http://www.gopedu.com/

    展开全文
  • 使用预设在Unity中自动创建物体制作预设预设实例化         Prefabs(预设)是一种可以被重复使用的游戏对象。当需要创建一些需要重复使用的对象时,就可以使用预设体。此篇博客...

    使用预设在Unity中自动创建物体


            Prefabs(预设)是一种可以被重复使用的游戏对象。当需要创建一些需要重复使用的对象时,就可以使用预设体。此篇博客将指导如何制作一个预设体,并且通过代码来实例化多个此预设体的对象。

    制作预设

           只要在场景中制作了游戏对象,然后将它层次面板拖拽到项目面板中,预设即被创建了,同时该对象在层次面板中也就变成了蓝色。此时场景中的游戏对象就成为了预设的一个实例化对象。
           此处以在层次面板(Hierarchy)中创建立方体(Cube)为例,在场景中创建好立方体之后,将立方体拖拽到项目面板(Project)中 ,可以发现该立方体变成蓝色。

    预设实例化

    方法一:

           将刚才蓝色的预设体直接拖拽到场景面板中(或者直接拖拽到层次面板中),便可以实例化预设。实例化的对象(即拖拽出来的物体,包括之前创建的)依赖于预设,修改完预设后,实例化对象也随之被修改,删除预设后,这些实例化对象也会消失。

    方法二:

            通过代码来创建预设体的实例化对象。下面以一个代码生成立方体的例子还说明预设的用途。
            创建一个名为PrefabCreate.cs脚本,在该脚本中定义一个GameObject类型的变量Prefab,用它来指向刚刚创建的立方体。然后在Update方法中调用Instantiate方法创建一个实例,代码如下:

    using UnityEngine;
    using System.Collections;
    public class PrefabCreate : MonoBehaviour
    {
    	public GameObject prefab;
    	void Update()
    	{
    		//位置
    		float x = Random.Range(-10,10);
    		float y = Random.Range(-10,10);
    		float z = Random.Range(-10,10);
    		Vector3 pos = new Vector3(x, y, z);
    		//实例化
    		Instantiate(prefab,pos,Quaternion.identity);
    	}
    }
    

           

    1. Instantiate方法有3个参数,第一个是需要实例化的预设,后两个是实例化后游戏对象的位置和旋转角度。
    2. Random.Range将产生=一定范围内的随机数,这里用3个-10到你0的随机数作为立方体的位置。
    3. Quaternion.identity就是指Quaternion(0,0,0),即各个轴向的旋转角度都是0 。

           最后将脚本附加到场景面板中的任意物体上(我挂在了相机上面,且创建预设体后,我把层次面板中的Cube删除了)(见下图),然后将立方体预设拖拽到脚本prefab属性上即可。运行游戏后,立方体被逐一创建。

    在这里插入图片描述

    展开全文
  • 我们在使用编辑器时会有需求使用代码创建预设。在Unity3d的编辑器接口中,有`PrefabUtility`类可以使用它来创建预设。这篇文章简介了如何使用,并封装了一个更智能的函数
  • 预设体:  预设体能够使游戏对象和资源重复使用,相同的游戏对象可以使用同一个预设体来创建,对预设体进行修改后,所有游戏对象都会相应改变。   游戏对象预设体的建立:  在SampleScene中创建一个3D模型,...
  • 蓝鸥Unity开发教程之课时12 预设体
  • 文章作者:松阳 本文出自 阿修罗道,禁止用于商业用途,转载请注明出处。  ...创建预设 ...我们在使用编辑器时会有需求...在Unity3d的编辑器接口中,有PrefabUtility类可以使用它来创建预设。 封装实现 函数使用
  • Unity 预设体 克隆方式

    2017-05-06 21:22:50
    prefabs(预设体)可以被克隆重复使用的游戏对象 预设体可以在多个场景重复利用,也可以在一个场景多次使用。 每一个预设体,都是实例化一个Prefabs. 实例化的克隆体,都有标记一个(Clone)。 原型的Prefabs发生改变,...
  • 有事需要将SceneA中的一个对象在SceneB中使用,切换场景时候会将A场景对象全部卸载,此时就需要在切场景时候创建一个预设体,然后在SceneB中使用,动态的使用代码创建预设体,需要用到Unity的一个类PrefabUtility ...
  • Unity3D直接就提供接口能够轻松完成这一些,我开始还以为生成器是用Unity3D的粒子系统Particle System做的,其实不是,本身就有预设和实例化Instantiate帮你轻松完成一起。当然,生成也要遵守Unity3D的基本法则啊...
  • 预设体一般保存在Prefabs文件夹内。 比如我们做一个模型,扔到Prefabs文件夹内自动就会成为预设体。 用代码实现预设体的创建,按下fire(设置为空格或者你喜欢的按键),instantia函数用来创建预设体。 第一个...
  • Unity3D预设

    2013-08-12 10:45:15
    使用3D软件包自身格式进行输出的优缺点: 优点:快带的输出过程,直接从3D文件到Unity,简单的初始化过程。 不足:文件中可能会包括不需要的数据。若输出文件过大,可能会妨碍Unity的更新过程。比较少的数据检验...
  • 预制读取光照图 using UnityEngine; using System.Collections; using System.Collections.Generic; public class PrefabLightmapData : MonoBehaviour { [System.Serializable] public struct ...
  • 这使用Unity3D很容易完成,脚本也很简单,就是透明度Alpha变大、字体变大与延迟函数构成的。 同时,这里的字体换成微软雅黑了,借此说明Unity3D如何导入字体的。 首先,我们从C:\Windows\Fonts文件夹拷贝出自己的...
  • 我们做项目的时候经常会遇到要换个字体的工作情况,比如美工同学觉着字体不好看或者要做其它语言版本什么的。遇到这种情况我们总不能一个标签一个标签的去找到它们把字体换了,累不累就不说了,万一漏了也是麻烦事。...
  • 学习使用Prefabs和instantiate使用方法!
  • Unity3D坦克大战项目实例:第五集-武器系统(第二节):http://v.youku.com/v_show/id_XMTM3Njg5MjUwOA==.html?f=26177310&from=y1.2-3.4.4
  • 首先给预设体追加Component -> Physics ->BoxCollider 然后再追加 Component -> Physics -> Rigidbody 就可以了。
  • 如图,物体拖为预设体之后,属性面板会有三个对Prefab的操作: Select : 定位到资源面板对应的Prefab Revert : 复原,取消对当前GameObject的修改,还原到Prefab Apply : 将当前GameObject的修改,应用到...
1 2 3 4 5 ... 20
收藏数 1,966
精华内容 786
关键字:

unity3d预设体是什么