一、新建C#代码文件,会自动生成类以及开始和更新函数,写好拖到左上角scene相应中的控制件上即可,切记不使用的代码文件在导出为安卓工程前要删掉,否则容易引起错误。
二、做AR项目,动态显示的text控件需要放在ImageTarget下面,Canvas会自动生成,且要选成world space模式,一般通过设置旋转90,弄成水平放置,因识别的图片是水平放置的。
三、获取文本对象的代码在start函数中,如下图,对应上例代码为:
// 获取文本对象
GameObject textObj = GameObject.Find(“ImageTarget/Canvas/textResult”);
textResult = textObj.GetComponent
();
文本控件的定义在此例中为全局的,在主类中为:Text textResult;
该代码挂在三维物体恐龙即RaptorAnimated上,获取此游戏对象不用简介路径了,直接find就行,代码如上图中的一样,为:
// 获取游戏对象
btnObj = GameObject.Find(“RaptorAnimated”);
文本控件动态赋值的时候,用其内部的text属性,如下:
textResult.text=“stop”;或textResult.text=asrResult;
其中asrResult定义为:string asrResult = string.Empty;
四、调试信息显示在windows平台有两种:一种是text文本动态显示如上条所示;另一种是Debug.Log更方便,不用定义直接使用(如上图),显示在UNITY底部状态栏中,如下:
但对于安卓平台的话,Debug.Log是无法使用的,只能用text文本动态显示.
五、用麦克风录音时,只能放在主线程,另开线程来录音行不通,所以想做实时语音控制,只能开启麦克风的true模式,并设定固定时长。函数如下:
//截取3秒的声音片段放到saveAudioClip剪辑片段中;
saveAudioClip = Microphone.Start(device, true, recordMaxLength, recordFrequency);//true 为连续录音,因此函数只能在主线程运行,所以开辟新的线程行不通,只能连续录音了!
另外自己写的音量测定GetMaxVolume以及语音识别函数_StartBaiduYuYin()也必须放到主线程中,因里面有一个相同的函数:saveAudioClip.GetData是自带的,必须放到主线程中。如下:
我放在了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);
animator如此定义(参考下图):
Animator animator;
然后在starta函数中
//获取动画组件
animator = GetComponent();
注:函数挂在恐龙上面。
当然也可以如下旋转平移:
部分定义如下:
头文件如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Text.RegularExpressions;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Networking;