㈠ 如何在unity3d發布好的程序中導入外部文件
我覺得你想要的似乎是一個動態的AB包載入
你網路下 Unity 載入 Assets bundle , 教程和腳本很多,都是可以跑的
先將 fbx 編輯好在做成 ab 包去載入,就能實現
單純載入 fbx 文件沒有意義
㈡ Unity中如何給游戲物體通過代碼添加組件
gameObject.AddComponent<YourComponent>();
或者
gameObject.AddComponent("YourComponent");
㈢ 如何在在unity里做類擴展,創建一個C#文件
Extending the Editor
一)Unity允許你使用自己定製的inspectors和Editor Windows擴展編輯器,並且你可以使用定製的Property Drawers定義屬性集在inspector中如何展示,這一塊講述如何使用這些特性。
Editor Windows
你可以在你的app中創建任意數量的定製窗口。它們的表現就像Inspector,Scene或者其它內置的窗口。這是給你的游戲添加一個子系統用戶介面的絕佳方式。[比如地圖編輯器]
做一個自定義的Editor Window包含以下幾個簡單步驟:
1.創建腳本,繼承EditorWindow類
2.使用代碼去觸發窗口顯示自己
3.為你的工具實現GUI代碼
Derive From EditorWindow
二)為了製作你的Editor Window,你的腳本必須存放在一個叫做"Editor"的文件夾中。在這個腳本中創建一個類,它繼承自EditorWindow.然後在內部的OnGUI方法裡面編寫你的GUI控制。
usingUnityEngine;
usingUnityEditor;
usingSystem.Collections;
publicclassExample:EditorWindow
{
voidonGUI()
{
//Theactualwindowcodegoeshere
}
}
Showingthewindow
三)為了在屏幕上顯示窗口,製作一個menu item來顯示它,這個靠創建一個方法完成,而激活這個方法則是靠MenuItem屬性。
Unity的默認行為是循環利用窗口(即:再次選擇menu item會顯示已經存在的窗口。這是靠使用EditorWindow.GetWindow方法實現),例如:
usingUnityEngine;
usingUnityEditor;
usingSystem.Collections;
classMyWindow:EditorWindow{
[MenuItem("Window/MyWindow")]
publicstaticvoidShowWindow(){
EditorWindow.GetWindow(typeof(MyWindow));
}
voidOnGUI(){
//Theactualwindowcodegoeshere
}
}
四)這會創造一個標準的,可停靠的編輯窗口,它會在指令之間保存它的位置,可以使用自定義的布局,等等。想要獲得更多的操控,你可以使用GetWindowWithRect.
Implementing Your Window's GUI
窗口中實際的內容靠實現OnGUI方法繪制。你在游戲內部GUI中使用的UnityGUI類(GUI和GUILayout)在這里也可以使用。此外我們提供了一些額外的GUI操作,它們在editor-only類裡面:EditorGUI和EditorGUILayout。這些類添加在了普通類已經可用的控制項集合里,所以你可以隨意的混合搭配使用它們。
五)下面的C#代碼展示了你如何添加GUI元素到自定義的EditorWindow中:
usingUnityEditor;
usingUnityEngine;
publicclassMyWindow:EditorWindow
{
stringmyString="HelloWorld";
boolgroupEnabled;
boolmyBool=true;
floatmyFloat=1.23f;
//Addmenuitemnamed"MyWindow"totheWindowmenu
[MenuItem("Window/MyWindow")]
publicstaticvoidShowWindow()
{
//Showexistingwindowinstance.Ifonedoesn'texist,makeone.
EditorWindow.GetWindow(typeof(MyWindow));
}
voidOnGUI()
{
GUILayout.Label("BaseSettings",EditorStyles.boldLabel);
myString=EditorGUILayout.TextField("TextField",myString);
groupEnabled=EditorGUILayout.BeginToggleGroup("OptionalSettings",groupEnabled);
myBool=EditorGUILayout.Toggle("Toggle",myBool);
myFloat=EditorGUILayout.Slider("Slider",myFloat,-3,3);
EditorGUILayout.EndToggleGroup();
}
}
六)樣例代碼的執行結果如下圖:
㈣ unity 怎麼往生成的cs工程裡面添加assets
創建AssetBundle
1.創建一個空的Prefab,命名Cube,然後創建一個Cube,將其拉到剛創建好的Prefab
2.新建一個腳本ExportAssetBundles.cs(代碼來自官方文檔),保存在Asset/Editor目錄下
[csharp] view plainprint?
//在Unity編輯器中添加菜單
[MenuItem("Assets/Build AssetBundle From Selection")]
static void ExportResourceRGB2()
{
// 打開保存面板,獲得用戶選擇的路徑
string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "assetbundle");
if (path.Length != 0)
{
// 選擇的要保存的對象
Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
//打包
BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path, BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets, BuildTarget.StandaloneWindows);
}
}
這時我們將看到Asset下面出現Build AssetBundle From Selection和Build Scene
3.選中預設Cube,運行Build AssetBundle From Selection。這時會彈出一個保存框,將其命名為cube.unity3d(這里為了測試方便,放在c盤。實際項目中,我們是需要將他們放在web伺服器,供所有客戶端下載更新)
4.新建一個場景scene1.unity,上面放置幾個模型,然後保存
5.選中該場景,在之前的ExportAssetBundles.cs腳本中添加打包場景的函數,運行Assets->Build Scene,保存為scene1.unity3d(這里為了測試方便,也放在c盤)
[csharp] view plainprint?
[MenuItem("Assets/Save Scene")]
static void ExportScene()
{
// 打開保存面板,獲得用戶選擇的路徑
string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "unity3d");
if (path.Length != 0)
{
// 選擇的要保存的對象
Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
string[] scenes = {"Assets/scene1.unity"};
//打包
BuildPipeline.BuildPlayer(scenes,path,BuildTarget.StandaloneWindows,BuildOptions.BuildAdditionalStreamedScenes);
}
}
注意事項
a.AssetBundle的保存後綴名可以是assetbundle或者unity3d
b.BuildAssetBundle要根據不同的平台單獨打包,BuildTarget參數指定平台,如果不指定,默認的webplayer
載入AssetBundle
我們通過一個簡單的代碼來演示如何載入assetbundle,包括載入普通asset和場景。
[csharp] view plainprint?
using System;
using UnityEngine;
using System.Collections;
public class Load: MonoBehaviour
{
private string BundleURL = "file:///C:/cube.assetbundle";
private string SceneURL = "file:///C:/scene1.unity3d";
void Start()
{
//BundleURL = "file//"+Application.dataPath+"/cube.assetbundle";
Debug.Log(BundleURL);
StartCoroutine(DownloadAssetAndScene());
}
IEnumerator DownloadAssetAndScene()
{
//下載assetbundle,載入Cube
using (WWW asset = new WWW(BundleURL))
{
yield return asset;
AssetBundle bundle = asset.assetBundle;
Instantiate(bundle.Load("Cube"));
bundle.Unload(false);
yield return new WaitForSeconds(5);
}
//下載場景,載入場景
using (WWW scene = new WWW(SceneURL))
{
yield return scene;
AssetBundle bundle = scene.assetBundle;
Application.LoadLevel("scene1");
}
}
}
注意事項
a.LoadFromCacheOrDownload 可以指定版本,如果本地版本是新的,將不會從伺服器讀取
b.如果是多個資源打包在一起,我們要通過bundle.Load(),載入特定的資源
c.掛載在模型上的腳本也可以一起打包,但是保證腳本在原目錄也要存在,否則載入出來無法運行。關於如何更新腳本,我將放在以後的章節中闡述。
AssetBundle依賴關系
如果一個公共對象被多個對象依賴,我們打包的時候,可以有兩種選取。一種是比較省事的,就是將這個公共對象打包到每個對象中。這樣會有很多弊端:內存被浪費了;加入公共對象改變了,每個依賴對象都得重新打包。AssetBundle提供了依賴關系打包。我們通過一個簡單的例子來學習
[csharp] view plainprint?
//啟用交叉引用,用於所有跟隨的資源包文件,直到我們調用PopAssetDependencies
BuildPipeline.PushAssetDependencies();
var options =
BuildAssetBundleOptions.CollectDependencies |
BuildAssetBundleOptions.CompleteAssets;
//所有後續資源將共享這一資源包中的內容,由你來確保共享的資源包是否在其他資源載入之前載入
BuildPipeline.BuildAssetBundle(
AssetDatabase.LoadMainAssetAtPath("assets/artwork/lerpzuv.tif"),
null, "Shared.unity3d", options);
//這個文件將共享這些資源,但是後續的資源包將無法繼續共享它
BuildPipeline.PushAssetDependencies();
BuildPipeline.BuildAssetBundle(
AssetDatabase.LoadMainAssetAtPath("Assets/Artwork/Lerpz.fbx"),
null, "Lerpz.unity3d", options);
BuildPipeline.PopAssetDependencies();
這個文件將共享這些資源,但是後續的資源包將無法繼續共享它
BuildPipeline.PushAssetDependencies();
BuildPipeline.BuildAssetBundle(
AssetDatabase.LoadMainAssetAtPath("Assets/Artwork/explosive guitex.prefab"),
null, "explosive.unity3d", options);
BuildPipeline.PopAssetDependencies();
BuildPipeline.PopAssetDependencies();
我們在程序載入的時候必須保證先載入公共對象。否則,只能是在各個對象載入成功後,再通過程序手動添加進來,比較繁瑣。在實際項目中,由於是團隊開發,對象間的依賴關系通常會比較凌亂,最好在開發周期就定好相關的規范約束,方便管理。
㈤ unity怎樣向rescourse中添加文件
你導出工程JAVA工程,把缺的復制到文件夾,用ECLIPSE打包成APK就行
㈥ unity如何添加bg素材
方法一。
此方法可以通過腳本控制音樂的播放,按照需要修改代碼即可實現不同的播放需求。
為游戲對象添加AudioSource組件。
選擇音樂並進行相關的設置。
編寫控制音樂播放的腳本。
usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassmusic:MonoBehaviour//腳本名與類名要一直,此代碼腳本名為music{publicAudioSourceaudio;voidStart()。
㈦ 在unity中怎麼導入視頻文件
unity支持的視頻格式包括.mov .mpg .mpeg .mp4 .avi 和.asf
將視頻文件拖拽到project視圖中,系統會自動生成電影紋理資源。
添加腳本如下:
#pragma strict
var movTexture:MovieTexture;
function Start ()
{
movTexture.loop = true;
}
function OnGUI()
{
GUI.DrawTexture(new Rect (0,0,Screen.width,Screen.height),movTexture,ScaleMode.StretchToFill);
if(GUILayout.Button("播放/繼續"))
{
if (!movTexture.isPlaying)
{
movTexture.Play();
}
}
if(GUILayout.Button("暫停播放"))
{
movTexture.Pause();
}
if(GUILayout.Button("停止播放"))
{
movTexture.Stop();
}
}
將這個腳本綁定在照相機上就可以了
㈧ 如何在Unity中通過www方式載入外部文件
Unity 最初出現在Ubuntu Netbook 10.10中。它最初的目的是更有效地利用上網本有限的屏幕尺寸。和 GNOME, KDE 不同,Unity並非一個完整桌面程序安裝包,而採用了現有的方案。
Unity 環境利用了來自 GNOME 3 中的一些關鍵組件,包括 Mutter 混合型窗口管理器和 Zeitgeist活動記錄引擎。其啟動器使用 Clutter 建立,這與構建 GNOME Shell所用的圖形框架相同。雖然底層的技術相似,但 Unity 用戶界面完全是不同的實現,它並沒有使用來自 GNOME Shell 的任何代碼。
Unity 這個新 Shell 主要被設計成可更高效的使用屏幕空間,與傳統的桌面環境相比,消耗的系統資源更少。Unity 將成為 Ubuntu Netbook 版本及新的 Ubuntu Light 即時(instant-on) 計算平台的關鍵組件。Unity 環境打破了傳統的 GNOME 面板配置。它的左邊包括一個類似 Dock 的啟動器和任務管理面板;而頂面板則由應用程序 Indicator、窗口 Indicator、以及活動窗口的菜單欄組成。截至2010年Unity開發人員使用的一個名叫Nux的工具替代了Clutter,實現了Unity變成了Compiz的窗口管理器一個插件,且運行速度要比Mutter快。2011年1月14日又發布了一個技術預覽版規范的基於Qt的Unity 2D版本。
Ubuntu原本使用的是完整的GNOME桌面環境。由於Ubuntu創始人Mark Shuttleworth對用戶體驗的哲學理念與GNOME團隊有不同的理解,從2011年4月的Ubuntu 11.04起,Ubuntu使用Unity作為默認的用戶界面,而不採用全新的GNOME Shell。但Ubuntu可通過PPA來安裝GNOME Shell