AR Trump2(多卡识别学习)

小贴士:

获取组件:GetComponent<T>  T:要获取的组件类型设置

动画状态:Animator.SetBool(“变量名字“,变量值)

lnput.GetKeyDown(KeyCode.按键名)

距离判断:Vector3.Distance (坐标1,坐标2) ; 

[坐标在物体的Transform上,自己身上直接transform.position,别的物体上即变量名.transform.position]

注意transform虽然是组件,但是是特有的(有且仅有一个,且不可被移除),所以可以直接调用,而没有用GetComponent<T>

还有一个gameObject(小写)是特指当前物体本身

输出语句:Print () Debug.Log()

 


 

添加了一张病毒的图片 

其余与单图识别差不多

动画制作

 我们设置bool变量控制是否切换动作

 注意!变量名不要有空格

(单击也行哈哈) 

但是当时我用着旧版的动画,没法使用新版的状态机

关于旧版Animatio在新版Animator中的播放问题

解决旧版Animation无法在新版动画animator中播放问题(Animator是新版的动画机,我们尽量紧随时代)

还有就是它动画不能循环播放,百度了一下,

Animator设置公话循环播放的办法:

实现扫描出来有一个特效动作然后进入idle动画

现在希望有一个apperance动画在最开头然后病毒出现之后跳一下:

于是我修改了动画状态机:

勾上是当前动画播放完切换状态,取消勾选是立即切换状态

修改Animator参数代码:

a.SetBool("appearance",true);

(前面是变量名,后面是变量值) 

识别到物体后开始的参考:

Unity 使用Vuforia实现识别图后触发其他事件的方法

修改这个函数:

加一个public变量Animator

public Animator bingDu;
    protected virtual void OnTrackingFound()
    {
        if (mTrackableBehaviour)
        {
            var rendererComponents = mTrackableBehaviour.GetComponentsInChildren<Renderer>(true);
            var colliderComponents = mTrackableBehaviour.GetComponentsInChildren<Collider>(true);
            var canvasComponents = mTrackableBehaviour.GetComponentsInChildren<Canvas>(true);

            // Enable rendering:
            foreach (var component in rendererComponents)
                component.enabled = true;

            // Enable colliders:
            foreach (var component in colliderComponents)
                component.enabled = true;

            // Enable canvas':
            foreach (var component in canvasComponents)
                component.enabled = true;
            
            
            //后面是我添加的————————————————————————————————————————————————
            a.SetBool("appearance",true);
        }
    }


    protected virtual void OnTrackingLost()
    {
        if (mTrackableBehaviour)
        {
            var rendererComponents = mTrackableBehaviour.GetComponentsInChildren<Renderer>(true);
            var colliderComponents = mTrackableBehaviour.GetComponentsInChildren<Collider>(true);
            var canvasComponents = mTrackableBehaviour.GetComponentsInChildren<Canvas>(true);

            // Disable rendering:
            foreach (var component in rendererComponents)
                component.enabled = false;

            // Disable colliders:
            foreach (var component in colliderComponents)
                component.enabled = false;

            // Disable canvas':
            foreach (var component in canvasComponents)
                component.enabled = false;


            //后面是我添加的————————————————————————————————————————————————
            a.SetBool("appearance", false);
        }
    }

也就是说我现在实现了让它识别出来的时候就跳一下,没有识别到的时候就让其呆在一个空的阶段

Trump和病毒靠近时触发攻击特效

现在要做的是当Trump和病毒靠近时触发攻击特效(两者皆触发攻击特效),于是我们现在需要通过距离判断,如果脚本本身在Trump身上,我们要拿到病毒引用即创建一个共有变量,一会儿将病毒拖过去赋值给它

public GameObject bingDu;

在其身上的组件可以直接GetComponent<T>

我们首先要看两个物体坐标距离多远的时候开始打架

Debug.Log("两者距离:"+Vector3.Distance(transform.position,bingDu.transform.position));

不能同时识别出两个物体问题解决:

最开始我不能同时识别出两个物体,百度后看到原因,才想起来上课讲过这里,我给忘了

然后就只能出现一个被识别的东西

修改方法:

关于Vuforia实现同时识别多个标志

外接摄像头显示设置方法

外接了一个摄像头,外接摄像头显示设置方法:

就可以了

(我发现每次摄像头距离拉远的时候距离会变大)

这个暂时还不是特别明白

Trump每次识别图不见的时候都可以重置

我想让Trump每次识别图不见的时候都可以重置(因为这个控制他走路的东西一会儿没控制好就会让他走不见)

最开始我是这样写的:

trump.transform.localPosition = Vector3.zero;

Unity 游戏框架搭建 2019 (十七、十八) Transform 重置与概率函数

unity3d中Transform组件 Rotate()和rotation变量详解

unity 修改transform.rotation的两种方法

    protected virtual void OnTrackingLost()
    {
        if (mTrackableBehaviour)
        {
            var rendererComponents = mTrackableBehaviour.GetComponentsInChildren<Renderer>(true);
            var colliderComponents = mTrackableBehaviour.GetComponentsInChildren<Collider>(true);
            var canvasComponents = mTrackableBehaviour.GetComponentsInChildren<Canvas>(true);

            // Disable rendering:
            foreach (var component in rendererComponents)
                component.enabled = false;

            // Disable colliders:
            foreach (var component in colliderComponents)
                component.enabled = false;

            // Disable canvas':
            foreach (var component in canvasComponents)
                component.enabled = false;


            //后面是我添加的————————————————————————————————————————————————
            bingDu.SetBool("bingduAppearance", false);
            trump.GetComponent<Animator>().SetBool("trumpAppearance", false);
            trump.transform.localPosition = Vector3.zero;
            trump.transform.localRotation = Quaternion.Euler(0.0f, 180f, 0.0f);
            //trump.transform.localRotation = Quaternion.Euler(Vector3.up * 180);
            //transform.localScale = Vector3.one;
            //transform.localRotation = Quaternion.identity;
            //transform.eulerAngles = new Vector3(0,0,0);
        }
    }

这样的话小人就可以每次都出现在纸片中央了

现在我们修改Trump里的函数,让它离病毒近且不走路的时候开始打架并且面朝病毒

但是我发现病毒消失之后trumpAttack还是没有改变,得回到DefaultTrackableEventHandler修改下,增加一条消失改变trumpAttack的语句

GetComponent<Animator>().SetBool("trumpAttack", false);

修改Trumpzou走路的时候的奇怪方向:

受上课视频启发,我修改了旋转的函数,原来是:

transform.eulerAngles = new Vector3(transform.eulerAngles.x, Mathf.Atan2(x, y) * Mathf.Rad2Deg, transform.eulerAngles.z);

修改为:

transform.eulerAngles = new Vector3(0, Mathf.Atan2(x, y) * Mathf.Rad2Deg, transform.eulerAngles.z);

 去掉了X方向的旋转这样就显得没有很奇怪了

添加音效

利用Vuforia、Unity 实现AR识别图触发音频播放

创建空物体并在下面创建一个音源组件

Unity3D游戏引擎一共支持4个音乐格式的文件

.AIFF  适用于较短的音乐文件可用作游戏打斗音效

.WAV  适用于较短的音乐文件可用作游戏打斗音效

.MP3  适用于较长的音乐文件可用作游戏背景音乐

.OGG  适用于较长的音乐文件可用作游戏背景音乐

我用的是MP3格式的背景音乐,音乐下载地址:

TRUMP VS. CLINTON - Songify 2016

这样就好了,参考:

 

[Unity零基础入门]7.音效系统(使用Unity2018,基于Unity官方教学资源包)


下面的没有调好,不用放进PPT里了

本来想加一些小的打斗声音特效,但是老是加进去是有点问题

后来发现是因为我的音效时间太短了我却用mp3往里加,就加不进去

我用风云音频处理大师去了噪然后WAV格式导出(因为从B站弄出来的音频有背景音乐)

这样就可以用了

我想把这个小病毒往上移动一点,但是这样的话Trump也会跟着仰起头

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值