Unity_6 涂涂乐案例

前言

最近学习的东西都是一些零零散散的,看了一下笔记,了解了一个地图插件Minimap之类的;还有一些C#语法:委托、Lambda表达式。另外还有有关vuforia,EasyAR Sense,AVProVideo,屏幕位置转射线之类的零零碎碎的东西,但是由于内容太零散了,有些内容也没有实际案例操作,加之我最近心情不太好,所以学的模棱两可,笔记做的也不全。
这两天做了一个AR涂涂乐的应用,也是根据别人的案例修改做的,现在记录一下主要步骤。

主要框架

这个应用是用vuforia制作的,首先要有ARCamera,以及用ARImage作为父物体存各个模型。
在这里插入图片描述

案例

建立ARImage

如图,子物体包括一个Plane,和一个对应的模型,以及用来控制动作的三个碰撞器,调整到合适位置。
在这里插入图片描述

添加Database图片

登录vuforia
在这里插入图片描述
创建Datebase名为Y20
在这里插入图片描述
添加需要识别的图片
在这里插入图片描述
下载并且导入到项目中
在这里插入图片描述
这时就可以使用了:
在这里插入图片描述

Plane的设置

将需要涂鸦的模型拖入:
在这里插入图片描述

创建动画控制器

创建动画控制器并拖到模型上,这里的动画都是素材中给出的。
在这里插入图片描述

动作控制代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Y20Animator : MonoBehaviour {
    public GameObject[] Y20Bodys;
    public GameObject Y20Obj;
    private Animator Y20_Animator;
    public GameObject shadowObj;
    //private Transform root1;
    //private Transform root2;
    //tishi
    
    //private float setTime;
    //private float currentTime;
    //private SkinnedMeshRenderer mRender;
    //public int index=0;//current Index
    //public GameObject uiHand;
    // Use this for initialization
    void Awake() {
        foreach (GameObject obj in Y20Bodys)
        {
            EventHandler.Get(obj).mDown += mDownHandler;
        }
        Y20_Animator = Y20Obj.GetComponent<Animator>();
        //root1 = transform.Find("root").Find("2").Find("1");
        //root2 = transform.Find("root").Find("2");
        //mRender = transform.Find("S_HY_shayu").GetComponent<SkinnedMeshRenderer>();
       
        //currentTime =0f;
        //setTime = 5f;
    }
    //private void Update()
    //{
    //    if ((mRender.material.name.Equals("Color (Instance)") || mRender.material.name.Equals("Color"))&&ProjectManager.Instance.isFirst)
    //    {
    //        if (uiHand.activeInHierarchy == false)
    //            uiHand.SetActive(true);
    //        currentTime += Time.deltaTime;
    //        if (currentTime> setTime)
    //        {
    //            currentTime = 0f;

    //            index++;
    //            if (index == J10Bodys.Length)
    //            {
    //                index = 0;
    //            }
    //        }
    //    }
    //    if (uiHand.activeInHierarchy)
    //    {
    //        uiHand.transform.position = Camera.main.WorldToScreenPoint(J10Bodys[index].transform.position);
    //    }
    //}

    void mDownHandler(GameObject obj)
    {
        //cancel tiShi
        //if (uiHand.activeInHierarchy == true)
        //{
        //    uiHand.SetActive(false);
        //    ProjectManager.Instance.isFirst= false;
        //}
        if (obj.name.Equals("headCollider"))
        {
            //shadowTrans.parent = root2;
            Y20_Animator.Play("chuchang");
            //AudioManager.Instance.AudioPlay(AudioManager.Instance.audioSource,(int)AudioEnum.Z10Attack);
            shadowObj.SetActive(false);
            
            Invoke("shadowShow", 2f);
        }
        if (obj.name.Equals("bodyCollider"))
        {
            //shadowTrans.parent = root1;
            Y20_Animator.Play("kongjiangzhuangjiache");
            //AudioManager.Instance.AudioPlay(AudioManager.Instance.audioSource,(int)AudioEnum.Z10Move);
            
            if(shadowObj.activeInHierarchy==false)
                shadowObj.SetActive(true);
        }
        if (obj.name.Equals("weiCollider"))
        {
            //shadowTrans.parent = root2;
            Y20_Animator.Play("tiaosan");
            //AudioManager.Instance.AudioPlay(AudioManager.Instance.audioSource,(int)AudioEnum.Z10Splash);
        }
        //取消点击提示
        //transform.Find("S_HY_shayu").GetComponent<OneRenderTotal>().J10BeClick();
    }
    //J10 birth Animation
    public void PlayY20BirthAnimation()
    {
        Y20_Animator.Play("chuchang");
        shadowObj.SetActive(true);
        //GameObject.Find("root").transform.GetChild(1).transform.gameObject.SetActive(true);

    }
    void shadowShow()
    {
        CancelInvoke("shadowShow");
        
        shadowObj.SetActive(true);
    }
    public void shadowClose()
    {
        CancelInvoke();
        
        shadowObj.SetActive(false);
    }
}

在这里插入图片描述

其他代码

在这里插入图片描述

 if (isY20)
        {
            GetComponent<SkinnedMeshRenderer>().material = ModelMaterial;
            //play birth Animation
            transform.parent.GetComponent<Y20Animator>().PlayY20BirthAnimation();
            //particularWater.SetActive(true);
            GameObject waterParClone = (GameObject)Instantiate(particularWater, new Vector3(0, 0, 0), Quaternion.identity);
            Destroy(waterParClone, 3f);
            // ShowSceneTotal("haiyang", new Vector3(1.5f, 1.5f, 1.5f));
            //shark shadow
            //GameObject.Find("ImageTargetShark").transform.Find("S_HY_shayu_atk").Find("root").Find("2").Find("shadow").gameObject.SetActive(true);
        }

其他操作

在GameManger中添加模型和Plane:
在这里插入图片描述
别忘记ARCamera中打开数据库,不然扫描会没有反应。
在这里插入图片描述
在这里插入图片描述

发布

做好之后就可以发布了:
在这里插入图片描述
在这里插入图片描述
调整Canvs和屏幕的分辨率和手机一致,就可以发布了。
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值