zoukankan      html  css  js  c++  java
  • unity3d杂录【2】

    当需要销毁一个物体,但是需要保留子物体不被销毁

    transform.DetachChildren();
    Destroy(gameObject);
    

      Unity实现加载场景进度条

    using UnityEngine;
    using System.Collections;
    
    public class Scene2 : MonoBehaviour {
    	//异步对象
    	AsyncOperation asyncOperation;
    	void Start () {
    		DontDestroyOnLoad(gameObject);
    	}
    
    	void OnGUI(){
    		//开始加载场景按钮
    		if(GUILayout.Button("Start Load Scene")){
    			StartCoroutine("loadScene","Bootcamp");
    		}
    
    		//判断异步对象并且异步对象没有加载完毕,显示进度
    		if(asyncOperation!=null&&!asyncOperation.isDone){
    			GUILayout.Label("progress:"+(float)asyncOperation.progress*100+"%");
    		}
    	}
    
    	IEnumerator loadScene(string sceneName){
    		yield return asyncOperation = Application.LoadLevelAsync(sceneName);
    		print("load Complete!");
    	}
    }
    

     

    性能优化重要知识:

    结合网格有利于性能最优化。如果mergeSubMeshes为true,所有的网格会被结合成一个单个子网格。否则每一个网格都将变成单个不同的子网格。如果所有的网格共享同一种材质,设定它为真。如果useMatrices为false,在CombineInstance结构中的变换矩阵将被忽略。

    以下是合并当前物体下所有网格的代码:

    using UnityEngine;
    using System.Collections;
    
    public class PlatformDefines : MonoBehaviour {
      void Start () {
    
        #if UNITY_EDITOR
          Debug.Log("Unity Editor");
        #endif
    
        #if UNITY_IPHONE
          Debug.Log("Iphone");
        #endif
    
        #if UNITY_STANDALONE_OSX
    	Debug.Log("Stand Alone OSX");
        #endif
    
        #if UNITY_STANDALONE_WIN
          Debug.Log("Stand Alone Windows");
        #endif
    
      }
    }
    

      

     捕捉音谱

    AudioSource.GetSpectrumData(int,int,FFTWindow)

    其中的三个参数分别表示(a,b,c):

             a:采样率,就是说采集多长一段的频谱,必须为2^n,但是最小64,最大8192。

             b:采集时间,0为左端,1为右端。(这个需要声音物理方面的知识,如果没有特殊需求的话,请默认为0)。

             c:采样方式。

            其中采样方式的具体参数有:

    Variables

    Rectangular

    W[n] = 1.0.

    Triangle

    W[n] = TRI(2n/N).

    Hamming

    W[n] = 0.54 - (0.46 * COS(n/N) ).

    Hanning

    W[n] = 0.5 * (1.0 - COS(n/N) ).

    Blackman

    W[n] = 0.42 - (0.5 * COS(n/N) ) + (0.08 * COS(2.0 * n/N) ).

    BlackmanHarris

    W[n] = 0.35875 - (0.48829 * COS(1.0 * n/N)) + (0.14128 * COS(2.0 * n/N)) - (0.01168 * COS(3.0 * n/N)).

           根据不同的采样方式会有不同的采样精度。

           那么下面进入实例,让我们通过例子来了解这个函数。

           首先新建Unity项目,之后再main camera中加入audio sourse组件,并给组件赋予一段音乐。运行一下,你应该可以听到这段音乐。

           由于这些都属于基础,不是我主讲的内容,所有有什么不会的请自行查找相关基础教程或给我留言。

           之后编写脚本,脚本内容如下,详细请看注释。

    注释:

    [csharp] view plaincopy
     
    1. using UnityEngine;  
    2. using System.Collections;  
    3.   
    4. public class audioTest : MonoBehaviour {  
    5.   
    6.     public GameObject obj;//我们需要动态控制的物体,需要在u3d中把你需要控制的物体赋予该物体  
    7.     // Use this for initialization  
    8.     void Start () {  
    9.     }  
    10.     // Update is called once per frame  
    11.     void Update () {  
    12.         //建立音谱数组,后面的三个参数我前面已经介绍过,这里是具体用法  
    13.         float[] spectrum = audio.GetSpectrumData(128, 0, FFTWindow.BlackmanHarris);  
    14.         int i = 1;  
    15.         //我们控制物体所用到的数值  
    16.         float all = 0;  
    17.         //以下内容是在scence中现实音谱内容  
    18.         while (i < 127)  
    19.         {  
    20.             Debug.DrawLine(new Vector3(i - 1, spectrum[i] + 10, 0), new Vector3(i, spectrum[i + 1] + 10, 0), Color.red);  
    21.             Debug.DrawLine(new Vector3(i - 1, Mathf.Log(spectrum[i - 1]) + 10, 2), new Vector3(i, Mathf.Log(spectrum[i]) + 10, 2), Color.cyan);  
    22.             Debug.DrawLine(new Vector3(Mathf.Log(i - 1), spectrum[i - 1] - 10, 1), new Vector3(Mathf.Log(i), spectrum[i] - 10, 1), Color.green);  
    23.             Debug.DrawLine(new Vector3(Mathf.Log(i - 1), Mathf.Log(spectrum[i - 1]), 3), new Vector3(Mathf.Log(i), Mathf.Log(spectrum[i]), 3), Color.yellow);  
    24.             all = all + spectrum[i];  
    25.             i++;  
    26.         }  
    27.         //经过本人测试all值最多为1点几,所以为了表示明显,我*10,但由于会有0影响效果,所以+1  
    28.         print(all*10);  
    29.         all = all * 10 + 1;  
    30.         //利用iTween插件变换图形,关于iTween我稍后做讲述  
    31.         iTween.ScaleTo(obj, new Vector3(all,all,all), 0f);  
    32.         iTween.ColorTo(obj, new Color(all, -all, 256 - all), 0f);  
    33.     }  
    34. }  



            之后我们新建一个球,使摄像机可以看到小球,我们把脚本拖到摄像机上,并在脚本中的obj与小球进行关联。

            运行文件,我们就会看到小球会随着音乐变大变小以及改变颜色。

    PS:来自

    http://www.u3dblog.com

     http://blog.csdn.net/moonagent/article/details/9984777

  • 相关阅读:
    Objective C 快速入门学习五
    Objective C 快速入门学习四
    Objective C 快速入门学习三
    Objective C 快速入门学习二
    Objective C 快速入门学习一
    基于内容的音频和音乐分析领域的研究工作
    特征选择常用算法综述
    外包项目网站积累
    IOS开发资料积累
    小心被“杜比”认证忽悠了
  • 原文地址:https://www.cnblogs.com/DragonX/p/3652786.html
Copyright © 2011-2022 走看看