2017-04-24 16:08:05 Silk2018 阅读数 8031
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

预制体Prefab;相对于一个GameObject模板,方便多次使用。



预制体,如何通过脚本动态加载呢:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LoadPrefab : MonoBehaviour {

    public GameObject bullet;
	// Use this for initialization
	void Start () {
        Instantiate(bullet);
		
	}
	// Update is called once per frame
	void Update () {
		
	}
}

1. 挂载到某个GameObject下面:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LoadPrefab : MonoBehaviour {

    public GameObject goBullet;
    private GameObject bullet;
	// Use this for initialization
	void Start () {
        bullet = Instantiate(goBullet);
        bullet.transform.parent = this.transform;
	}
	// Update is called once per frame
	void Update () {
		
	}
}


2. 将资源放到Resources下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LoadPrefab : MonoBehaviour {

    public GameObject goBullet;
    private GameObject bullet;
	// Use this for initialization
	void Start () {
        bullet = Resources.Load("Bullet") as GameObject;
        bullet.transform.parent = this.transform;
	}
	// Update is called once per frame
	void Update () {
		
	}
}


3.给GameObject挂载脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CreateObject : MonoBehaviour {

    GameObject gun;
	// Use this for initialization
	void Start () {
        gun = new GameObject("gun");
        gun.AddComponent<LoadPrefab>();
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}
2018-05-19 12:20:03 u013628121 阅读数 2006
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。


Unity3d特殊文件夹名称:Resources
特性
	1.读取Resources目录下的文件(第一层目录下的物体)不用分割符,
	2.路径参数以“/”表示文件夹分隔符,最后是所加载的资源名称,不要加后缀名
	3.Resources文件夹可以在Assets根目录下,也可以在子目录里,只要名子叫Resources就可以。比如目录:/xxx/xxx/Resources  和 /Resources 是一样的,无论多少个叫Resources的文件夹都可以。
	4.Resources文件夹下的资源不管你用还是不用都会被以压缩的方式打包进.apk或者.ipa 。
    
Resources.Load路径写法:不要加后缀名,和Resources,  
例子0:在第一层目录下
路径:"Resources/Cube.prefab"
写成:"Cube"  
例子1:
路径:"Resources/effect/building/Cube.prefab"
写成:"effect/building/Cube"  


 
//把资源加载到内存中    
 GameObject prefab =Resources.Load<GameObject>("effect/building/Cube");  
 if (prefab)  
 {  
     //用内存中GameObject模板克隆一个出来,用加载得到的资源对象,实例化游戏对象,实现游戏物体的动态加载  
     GameObject obj = GameObject.Instantiate(prefab) as GameObject;  
     if (obj)  
     {  
         obj.name = "xxxxxxxxxxx";  
     }  
 }  
 
        // 加载其他非GameObject类型的资源
        Texture2D image = Resources.Load<Texture2D>("Images/1");
        // 测试是否加载成功
        Debug.Log(image.name);

        /*
        卸载资源
        */
        // 卸载非GameObject类型的资源,会将已加载资源及其克隆体剔除
        Resources.UnloadAsset(image);
        // 卸载GameObject类型的资源的克隆体
        Destroy(obj);

Resource.Load :编辑时和运行时都可以通过Resource.Load来直接读取。
Resources.LoadAssetAtPath() :它可以读取Assets目录下的任意文件夹下的资源,它可以在编辑时或者编辑器运行时用,它但是它不能在真机上用,它的路径是”Assets/xx/xx.xxx” 必须是这种路径,并且要带文件的后缀名。
AssetDatabase.LoadAssetAtPath():它可以读取Assets目录下的任意文件夹下的资源,它只能在编辑时用。它的路径是”Assets/xx/xx.xxx” 必须是这种路径,并且要带文件的后缀名。


如果是创建NGUI ui预制物的话:

 GameObject obj =NGUITools.AddChild(NGUIRoot.Instance.gameObject, prefab);
  /// <summary>
    /// Resouce加载实例化物体
    /// </summary>
    /// <param name="path"></param>
    /// <returns></returns>
    public static GameObject ResouceIniteGameObjcet(string path)
    {
        var prefab = Resources.Load<GameObject>(path);
        if (prefab)
        {
            var obj = GameObject.Instantiate(prefab);
            if (obj)
            {
                return obj;
            }
        }
        Debug.LogError("ResouceLoad GameObject false:" + path);
        return null;
    }

    /// <summary>
    /// Resouce加载实例化ui
    /// </summary>
    /// <param name="path"></param>
    /// <returns></returns>
    public static GameObject ResouceIniteNGUI(Transform NGUIrootObj,string path)
    {
        var prefab = Resources.Load<GameObject>(path);
        if (prefab)
        {
            var obj = NGUITools.AddChild(NGUIrootObj, prefab);
            if (obj)
            {
                return obj;
            }
        }
        Debug.LogError("ResouceLoad GameObject false:" + path);
        return null;
    }


    /// <summary>
    /// 通过Resouce 加载资源
    /// </summary>
    /// <param name="path">如:路径"Resources/effect/building/Altar.prefab",那么写成"effect/building/Altar"</param>
    /// <returns></returns>
    public static T ResourcesLoad<T>(string path) where T:Object
    {
        var obj = (T)Resources.Load(path);
        if (obj)
        {
            return obj;
        }
        Debug.LogError("ResouceLoad 资源( "+typeof(T).Name+") false:" + path);

        return obj;
    }

 

 

2019-07-03 16:47:52 q764424567 阅读数 688
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

一、前言

这篇短文解释了什么是Unity的预制体和它们的用处

二、用途

让我们想象一下,我们想在Unity中做一个塔防游戏。首先,我们创建一个Tower GameObject,它在层次结构中如下所示:
在这里插入图片描述
当玩家开始游戏时,通常场景中还没有塔。我们需要的是一种方法,将我们的塔游戏对象保存到某个地方,然后当玩家想要建造一个塔时,将它们再次加载到层次结构中。

这就是预制体的用途。

三、创建预制体

让我们创建一个预制件。非常简单,我们所要做的就是将GameObject从层次结构中拖到Project区域中,如下所示:

在这里插入图片描述
之后,我们可以在我们的项目区看到预制件:

.在这里插入图片描述
现在我们可以从层次结构中删除GameObject,这样它就不在游戏世界中了。但由于它在项目区域,我们不会完全失去它。

四、加载预制体

如果我们想装载预制件,我们有两个选择。我们可以手动地将它从ProjectArea拖到层次结构区域,或者使用调用实例化.

下面是一个示例脚本,游戏一开始就加载Prefab:

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {
    public GameObject prefab = null;
                
    void Start () {
        // instantiate the prefab
        // -> transform.position means that it will be
        //    instantiated at the position of *this*
        //    gameobject
        // -> quaternion.identity means that it will
        //    have the default rotation, hence its not
        //    rotated in any weird way
        Instantiate(prefab,
                    transform.position,
                    Quaternion.identity);
    }
}

现在我们要做的就是将测试脚本添加到场景中的GameObject中,查看Inspector,然后将public prefab变量设置为来自我们项目区域的任何prefab,如下所示:

在这里插入图片描述
按下Play后,它立即将我们的塔预置体加载到游戏场景。

就这么简单!

2017-08-19 11:30:04 baidu_39172999 阅读数 2521
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

利用resources.load加载预制体实现跳转 pc运行正常,但打包安卓加载不到预制体

解决:buildsetting-->playersetting-->other Settings  取消SplitApplication Binary勾选即可


SplitApplication Binary 勾选之后会导出一个.apk和.obb  只安装apk游戏无法运行


Unity3d 预制体烘焙

阅读数 1160

没有更多推荐了,返回首页