Unity教程:Unity常用类(五)

Unity教程:Unity常用类(五),第1张

中国AR网(>

常用核心类:  MonoBehaviour  ,  Application、Transform  ,GameObject

MonoBehaviour  类

       本类是所有脚本和类(内置类与自定义类)的基础类。 这个类主要提供了各种事件函数的静态方法。例如前面提到的  Awake  、Start,Update  等函数(方法),可重写函数都是由本类提供。

本类还包含重要的回调函数例如Invoke()、InvokeRepeating()函数(功能: 以某个自定义的函数名为参数并在特定的时机调用该自定义函数)。本类还提供关于触发器的函数:例如:  

OnTriggerEnter()  函数

OnTriggerExit()   函数

OnTriggerStay()

函数应用程序是一项非常重要的属性,所有应用程序相关的方法都写在Application类中。访问应用程序的运行时数据,

以获取或设置当前应用程序的一些属性,比如加载游戏关卡,获取资源文件路径,退出当前游戏程序,获取当前游戏平台等。

Transform——场景中的每一个物体都有一个Transform。用于储存并 *** 控物体的位置、旋转和缩放。每一个Transform可以有一个父级,允许

你分层次应用位置、旋转和缩放。可以在Hierarchy面板查看层次关系。 定义了对象的位置、旋转、缩放属性的类。由于该类继承了

Component 类,所以也是一种组件。也就是说任何一个游戏对象都由于Transform 组件。

例如:

//设置游戏对象的位置

transformposition=new Vector3(0,0,0);

//绕X轴旋转30度

transformeulerAngles=new Vector3(30,0,0);

//

设置游戏对象缩放到3倍

transformlocalScale  =new  Vector3(3,3,3);

前面我们已经学习了关于transform的一些属性,下面来学习一些关于transform的方法。通过代码来控制transform的变换。

void Update ()

{

transformTranslate(new Vector3(0,0,1),SpaceWorld);

}

以上两句话分别尝试让transform毎帧都进行移动。

游戏对象是所有其他组件的容器。它还拥有Tag(标签),Layer(层)和Name(名称)属性。 场景中所有的游戏对象都是通过实例化该类来

生成的。  当把一个资源放入场景中后,Unity3D 就会(自动)通过GameObject  类来生成对应的游戏对象。

MonoBehaviour  :  Behaviour  :  Component  :Object

GameObejct:  Objecto

教程由中国AR网资源教程(>

代码部分如下:

#if UNITY_EDITOR

using SystemCollectionsGeneric;

using SystemIO;

using UnityEditor;

using UnityEngine;

public static class FileCapacity

{

private const string REMOVE_STR = "Assets";

private const string FILESIZE = "FileSize";

private static readonly int mRemoveCount = REMOVE_STRLength;

private static readonly Color mColor = new Color(0635f, 0635f, 0635f, 1);

private static Dictionary<string, string> DirSizeDictionary = new Dictionary<string, string>();

private static List<string> DirList = new List<string>();

private static bool isShowSize = true;

[MenuItem("Tools/FileSize/OpenPlaySize")]

private static void OpenPlaySize()

{

EditorPrefsSetBool(FILESIZE, true);

isShowSize = true;

GetPropjectDirs();

}

[MenuItem("Tools/FileSize/ClosePlaySize")]

private static void ClosePlaySize()

{

EditorPrefsSetBool(FILESIZE, false);

isShowSize = false;

Init();

}

[InitializeOnLoadMethod]

private static void InitializeOnLoadMethod()

{

Init();

EditorApplicationprojectChanged += GetPropjectDirs;

EditorApplicationprojectWindowItemOnGUI += OnGUI;

}

[UnityEditorCallbacksDidReloadScripts]

private static void OnScriptsReloaded()

{

GetPropjectDirs();

}

private static void GetPropjectDirs()

{

Init();

if (isShowSize == false) return;

GetAllDirecotries(ApplicationdataPath);

foreach (string path in DirList)

{

string newPath = pathReplace("\\", "/");

DirSizeDictionaryAdd(newPath, GetFormatSizeString((int)GetDirectoriesSize(path)));

}

}

private static void Init()

{

isShowSize = EditorPrefsGetBool(FILESIZE);

DirSizeDictionaryClear();

DirListClear();

}

private static void OnGUI(string guid, Rect selectionRect)

{

if (isShowSize == false) return;

var dataPath = ApplicationdataPath;

var startIndex = dataPathLastIndexOf(REMOVE_STR);

var dir = dataPathRemove(startIndex, mRemoveCount);

var path = dir + AssetDatabaseGUIDToAssetPath(guid);

string text = null;

if (DirSizeDictionaryContainsKey(path))

{

text = DirSizeDictionary[path];

}

else if (FileExists(path))

{

var fileInfo = new FileInfo(path);

var fileSize = fileInfoLength;

text = GetFormatSizeString((int)fileSize);

}

else

{

return;

}

var label = EditorStyleslabel;

var content = new GUIContent(text);

var width = labelCalcSize(content)x + 10;

var pos = selectionRect;

posx = posxMax - width;

poswidth = width;

posyMin++;

var color = GUIcolor;

GUIcolor = mColor;

GUIDrawTexture(pos, EditorGUIUtilitywhiteTexture);

GUIcolor = color;

GUILabel(pos, text);

}

private static string GetFormatSizeString(int size)

{

return GetFormatSizeString(size, 1024);

}

private static string GetFormatSizeString(int size, int p)

{

return GetFormatSizeString(size, p, "#,##0##");

}

private static string GetFormatSizeString(int size, int p, string specifier)

{

var suffix = new[] { "", "K", "M", "G", "T", "P", "E", "Z", "Y" };

int index = 0;

while (size >= p)

{

size /= p;

index++;

}

return stringFormat(

"{0}{1}B",

sizeToString(specifier),

index < suffixLength suffix[index] : "-"

);

}

private static void GetAllDirecotries(string dirPath)

{

if (DirectoryExists(dirPath) == false)

{

return;

}

DirListAdd(dirPath);

DirectoryInfo[] dirArray = new DirectoryInfo(dirPath)GetDirectories();

foreach (DirectoryInfo item in dirArray)

{

GetAllDirecotries(itemFullName);

}

}

private static long GetDirectoriesSize(string dirPath)

{

if (DirectoryExists(dirPath) == false)

{

return 0;

}

long size = 0;

DirectoryInfo dir = new DirectoryInfo(dirPath);

foreach (FileInfo info in dirGetFiles())

{

size += infoLength;

}

DirectoryInfo[] dirBotton = dirGetDirectories();

foreach (DirectoryInfo info in dirBotton)

{

size += GetDirectoriesSize(infoFullName);

}

return size;

}

}

#endif

放在Unity项目中名为StreamingAssets文件夹中的任何文件将会被一字不差地复制到目标机器上的特定文件夹里

MAC/Win: path = = ApplicationdataPath + "/StreamingAssets";

iOS: path = ApplicationdataPath + "/Raw";

Android: path = "jar:file://" + ApplicationdataPath + "!/assets/";

Resources是untiy特殊文件夹,生成包后是不存在外部路径的,因为他是内部动态加载资源目录,打包后里面所有资源生成assets资源,也就不存在这个文件路径了,代码中调用直接ResourcesLoad就能加载,如果要是放在外部,可以自己写路径,或者放在StreamingAssets文件夹

Resources:

需要动态加载的文件放入,打包时,在这个文件夹里的文件不管有没有被使用,都会被打包出来。

Plugins:

插件目录,该目录编译时会优先编译,以便项目中调用。

Editor:

该目录下的代码可调用Unity Editor 的API,存放扩展编辑器的代码。编译时不会被打包到游戏中。

Standard Assets

该文件夹下的文件会优先被编译,以便项目调用,它与Plugins一样,打包时会被编译到同一个sln文件里。

SteamingsAssets

该目录下的文件会在打包时打包到项目中去,与Resources一样不管有没有用到的文件,在打包时都会被打包出来。

Resurces与SteamingsAssets的区别

Resurces下 文件在打时会进行压缩与加密,但是StremingsAssets下的文件是直接被打包出来。

Resurces中的材质球、预制体等资源,会在打包时自动寻找引用资源,打包到Resurce中。

1隐藏文件夹

以 开头的文件夹会被Unity忽略在这种文件夹中的资源是不会被导入的,且脚本不会被编译也不会出现在Project视图中这种文件夹我们可以在资源浏览器中找到这些文件

2Standard Assets

在这个文件夹中的脚本最先被编译一般是放一些Unity内置的资源在这个文件夹中的脚本会被导出到Assembly-CSharp-firstpass/Assembly-UnityScript-firstpass/Assembly-Boo-firstpass项目中依语言而定在这个文件夹中的脚本比其他脚本都要先编译将脚本放在这个文件夹里就可以用C#脚本访问其他语言的脚本

3Pro Standard Assets

和StandardAssets相同,只不过里面的文件是给Pro版本的Unity使用的,当然他的功能更为丰富,例如一些高级内置的shader文件,只有在Pro版才能起作用

4Editor

以Editor命名的文件夹允许其中的脚本访问UnityEditor的API,如果脚本中使用了在UnityEditor命名空间中的类或方法,他必须被放在名为Editor的文件夹中,Editor文件夹的脚本不会再build时被包含在项目中可以有多个Editor文件夹需要注意的是如果在普通的文件夹下,Editor文件夹可以出于目录的任何层级如果在特殊文件夹下,那Editor文件夹必须为特殊文件夹的直接子目录

5Editor Default Resources

你可以把编辑器用到的一些资源放在这里,比如,文本文件等等他和Editor文件夹一样都不会被打到最终发布报里,仅仅用于开发时使用你可以直接通过EditorGUIUtilityLoad去读取改文件夹下的资源,例如:

TextAsset text = EditorGUIUtilityLoad("Guidetxt") as TextAsset;

6Plugins

Plugins文件夹用来放native插件他们会被自动包含进build中去,注意这个文件夹只能是Assets文件夹的直接子目录例如:

Windows: dll文件;

Mac OS X: bundle文件

Linux下: so文件

和StandardAssets一样,这里的脚本会更早编译,并且允许他们呗之外的脚本访问

(1)Plugins/x86||x86_64(一般PC平台)

如果为32bit或64bit平台创建游戏,那么这个文件下的nativeplugin文件会被自动的包含在游戏build中如果这个文件夹不存在,则Unity会查找Plugins文件夹下的nativeplugins

如果要创建universalbuild,建议你同时使用这两个文件夹然后将32bit和64bit的nativeplugins放进相应的文件夹中

(2)Plugins/Android

在这个文件夹里放入Javajar文件,用于Java语言的plugins

so文件也会被包含进来

官方文档:>

Unity新建项目或者打开项目报opening file failed?

应该是你修改了GI缓存文件夹所导致。

我这边的做法是用另一个版本新建项目进入Unity编辑器,然后修改到新的GI缓存文件夹路径。

就能重新打开了。

以上就是关于Unity教程:Unity常用类(五)全部的内容,包括:Unity教程:Unity常用类(五)、unity pc版的打包完后 xml的配置文件放在哪个文件下才能读得到、unity同时显示文件夹和文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10150042.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存