博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3D小功能 小技巧 小教程 小原理(持续更新...)
阅读量:6841 次
发布时间:2019-06-26

本文共 5521 字,大约阅读时间需要 18 分钟。

Unity3D小功能 小技巧 小教程 小原理(持续更新...)

1.Unity的.NET版本是2.0

按道理来说,C#能用的功能Unity也能用,但是Unity的.NET却不是最新版

要是用一些别的DLL或者接入SDK的时候有DLL,就会发现有一些DLL的.NET版本是4.0,Unity便无法使用这些DLL,相当困扰。

2.关闭Request error提示 Edit→Preferences→General→Show Asset Store search hits

3.设置物体物理互不碰撞

Edit-Project Settings-Physics 打开物理管理器(Physics Manager)

里面可以设置层级相互间的碰撞

4.进度条

通过改变UI的FillAmount值

public UnityEngine.UI.Image healthBar;

void Start() {healthBar.fillAmount = 0.0f;}

5.Unity连接多媒体SDK开发

体感:Kinect、Leapmotion

AR:Vuforia Metiao EasyAR VoidAR

VR:gear 暴风 oculus HTC

触屏: Input.Touch EasyTouch(插件)

7.Inspector面板修改

例如添加一个按钮:

[CustomEditor(typeof(出现按钮的脚本名)), CanEditMultipleObjects]

public class 自定脚本名: Editor {

public override void OnInspectorGUI(){

base.OnInspectorGUI();//绘制原本的信息//
if(GUILayout.Button("自定义按钮名字")){
方法函数();
}
}}

8.平台预处理

#if UNITY_EDITOR

platform = "hi,大家好,我是在unity编辑模式下";
#elif UNITY_XBOX360
platform="hi,大家好,我在XBOX360平台";
#elif UNITY_IPHONE
platform="hi,大家好,我是IPHONE平台";
#elif UNITY_ANDROID
platform="hi,大家好,我是ANDROID平台";
#elif UNITY_STANDALONE_OSX
platform="hi,大家好,我是OSX平台";
#elif UNITY_STANDALONE_WIN
platform="hi,大家好,我是Windows平台";
#endif
Debug.Log("Current Platform:" + platform);

9.加载Resources

GameObject instance = Resources.Load("资源名字") as GameObject;

GameObject cube = Instantiate(instance) as GameObject;
cube.transform.position = this.transform.position;

10.Only one exe只允许打开一个程序

int count=Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length ;

if (count> 1)
{// MessageBox.Show(count.ToString());调试使用
//杀掉当前
Process.GetCurrentProcess().Kill();}

11.物体de 旋转 and 位移

旋转:

(瞬间)transform.localRotation = Quaternion.Euler(new Vector3(x,y,z));

(缓慢)transform.rotation = Quaternion.Slerp( a , b , t );

位移

(速度相关) transform.position=Vector3.MoveTowards(transform.position,tempUpdatePos,Time.deltaTimeDisShakeThreshold);

(固定时间)this.transform.Translate(Vector3.normalize(目标位置-自身位置) (Vector3.Distance(自身位置, 目标位置)/(所用时间 * Time.deltime)));

2d 向某方向移动

moveDirection = mTarget.transform.position - mSelf.transform.position;

moveDirection.Normalize();

float target = Mathf.Atan2(moveDirection.y, moveDirection.x) Mathf.Rad2Deg - 90f;
mSelf.transform.rotation = Quaternion.Slerp(mSelf.transform.rotation, Quaternion.Euler(0, 0, target), turnSpeed
Time.deltaTime);
_controller.SetForce(speedX,speedY));

6.改变鼠标位置和隐藏鼠标

using System.Runtime.InteropServices;

[DllImport("user32.dll")]

public static extern int SetCursorPos(int x, int y);

Void XX(){ SetCursorPos(0, 0); }

[DllImport("user32.dll")]

public static extern int SetCursorPos(int x, int y);
void Start () {
//隐藏
Cursor.visible = false;
}

17.控制全局音量

通过 AudioListener.volume = *;来控制场景场景音量

AudioListener.volume = *;    AudioListener.volume = *;

18.UGUI

对于Text 使用材质和Outline可以制作出艺术字体

Mask可以遮掩 对于制作一些动画比较好

19.鼠标点击设置UI位置(不同分辨率设置有不同 此处实例为1920*1080 可在调试模式下使用)

GetComponent<Animator>().SetTrigger("Clip");

// 获取目标对象当前的世界坐标系位置,并将其转换为屏幕坐标系的点
Vector3 Pos = Camera.main.WorldToScreenPoint(transform.position);
// 设置鼠标的屏幕坐标向量,用上面获得的Pos的z轴数据作为鼠标的z轴数据,使鼠标坐标与目标对象坐标处于同一层面上
Vector3 mousePos = new Vector3(Input.mousePosition.x(1920.0f/(float)Screen.width) - 1920/2, Input.mousePosition.y(1080f/(float)Screen.height) - 1080/2,Pos.z);//先乘一个GameView折扣(GameView要设置为1920*1080) 然后减去中心点的差值
Debug.Log(mousePos.ToString());
transform.position = mousePos;

20.使用AssetsBundle压缩文件有奇效

首先制作一个空项目,加入AB代码后,导出有28M

然后我是使用了一组72帧的动画,这组动画大约有4M

众所周知,unity对2D Sprite格式处理会使图片很大,由原本的图片大小67k变到了Unity里的1m一张

然后我把动画加到了UGUI里 然后导出,震惊的94M总共

最后使用AB压缩,观察压缩的文件,最大的image里就2M

比原图还要小

导出结果当然也小

AB真是太好用了 建议独立物件都用AB

21.重置动画(播放动画第一帧)

firstAnimName = GetComponent<Animator>().GetCurrentAnimatorClipInfo(0)[0].clip.name;

GetComponent<Animator>().Play (firstAnimName,-1,0);

22.Mono中文乱码

【Tools】-->【Option】, 然后选择【Fonts】,双击【Text Editor】,选择【Monospace】字体 Normal 10

23.uLua使用方法

注意AppConst里的LuaBundleModel变量,如果想使用AssetBundle模式,该值置为true,但是每次修改lua代码,需要执行菜单栏上的LuaFramework->Build XXX Resource,将lua资源打包,否则,你修改的lua逻辑不会更新并执行。

如果LuaBundleModel置为false,则lua代码会时时更新。

此外,修改C#代码,一定不要忘了执行菜单Lua->Clear wrap files,然后重新生成Gen Wrap + Binder

确定逻辑无误后,注册C#类,打开"CustomSettings.cs",注册我们的类。"_GT(typeof(XXXXXX)),"。最后,执行上面第2步的Lua->Clear wrap files,Gen Wrap + Binder。此时,会生成一个叫MyHelloWorldWrap.cs的文件,在Assets\LuaFramework\ToLua\Source\Generate目录下,其实所有在CustomSettings中注册的C#类都会生成Wrap文件,保存在该目录下。

24.使用VS作为C#编辑器

vs可以断点调试和为Unity提供的便捷简直不要太好

下载VS Tool for unity即可断点调试 (选择相应VS版本) 地址:

但是vs的快捷键蛋疼得很,--修改快捷键ctrl+w关闭当前窗口的方法:

编译器相关 如果使用Vs的 #region 和 #endregion 用于代码的隐藏缩放,对于项目代码管理,相当好用。Mono也有缩放模式,有点碍眼..

  1. Process.Start()

一个C#的API 可以用于打开一个网页..应用..或者进程..或者控制面板内的功能..例如打印..

public void PrintFile(){

System.Diagnostics.Process process = new System.Diagnostics.Process(); //系统进程

process.StartInfo.CreateNoWindow = false; //不显示调用程序窗口

process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;//

process.StartInfo.UseShellExecute = true; //采用操作系统自动识别模式

process.StartInfo.FileName=path; //要打印的文件路径

process.StartInfo.Verb="print"; //指定执行的动作,打印:print打开:open…………

process.Start(); //开始打印}

5.Unity加载图片动画(动画比较多的情况)

(1.UnityAnimation播放,直接全选png序列帧图(卡超级久) 然后拖到面板上(卡很久),会自动生成序列播放的animator。但我发现超过300图之后有可能会出现不明报错(大概因为输出问题),1k张感觉就没什么希望了,最重要的是在unity里1080p的图转成sprite,都会变成10m一张,导致项目发布之后更是奇大无比。

(2.播放mov,可以尝试播带透明通道的mov,但需要一个shader,具体我不会写,在网上找到的也不太好用,各种问题(抠色会失真和有噪点,提取透明or黑白遮罩会出现不同步)。
(3.Load的方法,unity有3种。(需要在start前预先加载完,不要一边播一边加载会卡的。)
① LoadPrefab,不考虑。
②LoadResources,先load资源文件夹内的,然后播放。目前测试超过700张Unity会迷之不加载,估计是load的东西太大。
③LoadAssets。因为是一张张地load,不会出现太大而不加载的问题。目前使用这个办法播放

④AB加载

25.远程Mac鸡可以使用vnc viewer连接 ,Cornerstone作为项目管理

26.求向量夹角

向量 = 目标位置 - 共同起点位置

v3.angle(向量A,向量B)

转载于:https://blog.51cto.com/14058389/2313023

你可能感兴趣的文章
POSTFIX实现全功能邮件
查看>>
shell整理(42)====mysql 分库分表备份
查看>>
Java反序列化之commons-beanutils分析
查看>>
Effective C++: {}初始化
查看>>
数学之美-【算法】 - 用来流方式计算UV的基数算法
查看>>
about @SuppressWarnings.
查看>>
几种常见的持续集成工具
查看>>
我的友情链接
查看>>
私立SVN服务器
查看>>
GlusterFS集群文件系统
查看>>
MySQL企业版VS社区版
查看>>
WebService环境搭建
查看>>
MySQL表分区的使用
查看>>
2011暑假记事
查看>>
python的包管理pip安装
查看>>
Android开发6——布局中的wrap_content和fill_parent以及match_parent
查看>>
JavaFX 常见问题_网页设计
查看>>
nagios 批量添加监控主机
查看>>
Ubuntu Linux下的QQ使用方案
查看>>
5.Python操作MySQL,三层架构,Socket网络编程
查看>>