一、新建C#代码文件,会自动生成类以及开始和更新函数,写好拖到左上角scene相应中的控制件上即可,切记不使用的代码文件在导出为安卓工程前要删掉,否则容易引起错误。

unity 编译代码 unity 编程_编程常用

二、做AR项目,动态显示的text控件需要放在ImageTarget下面,Canvas会自动生成,且要选成world space模式,一般通过设置旋转90,弄成水平放置,因识别的图片是水平放置的。

unity 编译代码 unity 编程_编程常用_02


三、获取文本对象的代码在start函数中,如下图,对应上例代码为:

// 获取文本对象

GameObject textObj = GameObject.Find(“ImageTarget/Canvas/textResult”);

textResult = textObj.GetComponent

();

unity 编译代码 unity 编程_unity 编译代码_03


文本控件的定义在此例中为全局的,在主类中为:Text textResult;


该代码挂在三维物体恐龙即RaptorAnimated上,获取此游戏对象不用简介路径了,直接find就行,代码如上图中的一样,为:


// 获取游戏对象


btnObj = GameObject.Find(“RaptorAnimated”);


文本控件动态赋值的时候,用其内部的text属性,如下:


textResult.text=“stop”;或textResult.text=asrResult;


其中asrResult定义为:string asrResult = string.Empty;


unity 编译代码 unity 编程_System_04


四、调试信息显示在windows平台有两种:一种是text文本动态显示如上条所示;另一种是Debug.Log更方便,不用定义直接使用(如上图),显示在UNITY底部状态栏中,如下:


unity 编译代码 unity 编程_Time_05


但对于安卓平台的话,Debug.Log是无法使用的,只能用text文本动态显示.


五、用麦克风录音时,只能放在主线程,另开线程来录音行不通,所以想做实时语音控制,只能开启麦克风的true模式,并设定固定时长。函数如下:


//截取3秒的声音片段放到saveAudioClip剪辑片段中;


saveAudioClip = Microphone.Start(device, true, recordMaxLength, recordFrequency);//true 为连续录音,因此函数只能在主线程运行,所以开辟新的线程行不通,只能连续录音了!


unity 编译代码 unity 编程_unity 编译代码_06


另外自己写的音量测定GetMaxVolume以及语音识别函数_StartBaiduYuYin()也必须放到主线程中,因里面有一个相同的函数:saveAudioClip.GetData是自带的,必须放到主线程中。如下:


unity 编译代码 unity 编程_编程常用_07


我放在了Update函数中实时监测语音命令StartCoroutine函数代表不被打断的意思。


六、平移和放大缩小用如下函数:

Vector3 transformValue = new Vector3();//定义平移向量 
  
 transformValue = Vector3.left * 0; 
  
 switch (state) 
  
 { 
  
 case 1://角色状态变小时,角色不断变小 
  
 flag = true; 
  
 scale -= 0.001f; 
  
 break; 
  
 case 2://角色状态变大时,角色不断变大 
  
 flag = true; 
  
 scale += 0.001f; 
  
 break; 
  
 case 3://角色状态向前时,角色不断向前缓慢移动 
  
 animator.Play(“WalkFW”); 
  
 transformValue = Vector3.forward * speed;//在android平台此句是向前的作用 
  
 //transformValue = Vector3.right * speed;//在windows平台此句是向前的作用 
  
 //transformValue = Vector3.forward * Time.deltaTime * speed; 
  
 break; 
  
 case 4://角色状态向后时。角色不断向后缓慢移动 
  
 animator.Play(“WalkS”); 
  
 transformValue = Vector3.back * speed;//在android平台此句是向后的作用 
  
 //transformValue = Vector3.left * speed;//在windows平台此句是向后的作用 
  
 //transformValue = Vector3.back * Time.deltaTime * speed; 
  
 break; 
  
 case 5://角色状态向左时。角色不断向右缓慢移动 
  
 animator.Play(“TurnLeft”); 
  
 //transformValue = Vector3.right * Time.deltaTime * speed; 
  
 break; 
  
 case 6://角色状态向右时,角色不断向左缓慢移动 
  
 animator.Play(“TurnRight”); 
  
 //transformValue = Vector3.left * Time.deltaTime * speed; 
  
 break; 
  
 case 7://角色状态停止 
  
 animator.Play(“idleLookAround”); 
  
 flag = false; 
  
 transformValue = Vector3.left * 0; 
  
 break; 
  
 } 
  
 btnObj.transform.Translate(transformValue, Space.World);//平移角色 
  
 if (flag) 
  
 btnObj.transform.localScale = new Vector3(1 * scale, 1 * scale, 1 * scale);


unity 编译代码 unity 编程_编程常用_08


animator如此定义(参考下图):

Animator animator; 
  
 然后在starta函数中 
  
 //获取动画组件 
  
 animator = GetComponent();


unity 编译代码 unity 编程_unity 编译代码_09


注:函数挂在恐龙上面。


当然也可以如下旋转平移:


unity 编译代码 unity 编程_Time_10


部分定义如下:


unity 编译代码 unity 编程_unity 编译代码_11


头文件如下:


unity 编译代码 unity 编程_Unity_12


using System.Collections; 
  
 using System.Collections.Generic; 
  
 using UnityEngine; 
 
using System;
using System.Text.RegularExpressions;
 using UnityEngine.UI;
 using UnityEngine.EventSystems;
 using UnityEngine.Networking;