自动循环动画

1、铺设路点

创建N个路点,创建Gizmos文件夹,并放入格式为png的Point文件名图片,在每个路点增加脚本如下

using UnityEngine;public class PathNode : MonoBehaviour {public PathNode P_Paretn;public PathNode P_Next;public void SetNext(PathNode node) {if (P_Next != null) {P_Next.P_Paretn = null;P_Next = node;node.P_Paretn = this;}}void OnDrawGizmos(){Gizmos.DrawIcon(this.transform.position, "Point.png");}
}

P_Paretn为父路点,P_Next为下一个路点。没有则不需要拖入

2、重写控制恐龙运动动画的代码

using UnityEngine;public class Din_Auto : MonoBehaviour {public PathNode m_currentNode=null;public float speed = 20.0f;//储存走路时间public Din_Auto inst;public Animator V_Ani;public bool Move_Bl = true;//控制恐龙是否行走// Use this for initializationvoid Start () {inst = this;m_currentNode = GameObject.Find("P_A_01").GetComponent<PathNode>();Invoke("Eating", 1.8f);//让恐龙经过1.8秒后吃东西Invoke("Moving", 8.8f);//让恐龙经过8.8秒(吃东西动作播放完)后继续走路}void Update () {if (Move_Bl){RotateTo();MoveTo();}}//让恐龙执行吃东西动画的函数public void Eating() {Move_Bl = false;V_Ani.SetTrigger("Eating");}public void Moving() {Move_Bl =true;V_Ani.SetTrigger("Moving");}public void RotateTo() {float current = transform.eulerAngles.y;this.transform.LookAt(m_currentNode.transform);Vector3 target = transform.eulerAngles;float next = Mathf.MoveTowardsAngle(current,target.y,20*Time.deltaTime);this.transform.eulerAngles = new Vector3(0,next,0);}public void MoveTo() {Vector3 pos1 = transform.position;Vector3 pos2 = m_currentNode.transform.position;float dist = Vector2.Distance(new Vector2(pos1.x,pos1.z),new Vector2(pos2.x,pos2.z));if (dist<2f) {if (m_currentNode.P_Next == null){Destroy(gameObject);}else {m_currentNode = m_currentNode.P_Next;}}transform.Translate(new Vector3(0, 0, speed * Time.deltaTime));}
} 

a、通过上面代码,可以看出RotateTo()方法里的Mathf.MoveTowardsAngle(current,target.speed)控制两个路点之间的转向

float next = Mathf.MoveTowardsAngle(current,target.y,20*Time.deltaTime); 

它规定了起始角度,终止角度和转弯速度。很明显,第一和第二个路点之间,是没有转向的。在经过第二个路点,转向第三个路点时,模型角度才会随时间发生变化

b、MoveTo()里面的Translate()控制了模型的位移增量

当然也有更精确的控制策略,比如计算出两点之间运动距离所需时间,平均分配转弯角度,或者更写实的在路点一定距离内,进行转弯

c、MoveTo()实现了下个路点的切换,以及是否为最后一个路点的判断

3、生成恐龙

将该代码附在第一个路点上,每过N秒,生成一个新的恐龙

更精确控制策略可自行尝试

using UnityEngine;public class Ins_Din : MonoBehaviour {public GameObject Din_Pre;private int Frame_Count;//生成恐龙void FixedUpdate() {Frame_Count++;if (Frame_Count>1000) {Ins();Frame_Count = 0;}}void Ins() {Instantiate(Din_Pre, gameObject.transform.position, gameObject.transform.rotation);}
}

遮挡效果实现

该效果使用了一个shader“Mask”(附录1)和一个脚本“SetRenderQueue”(附录2),两者配合完成了效果的实现

a、shader添加到材质球上,材质球赋予遮挡恐龙的物体模型,完成遮挡

b、脚本添加至恐龙Perfab的Raptor层

附录1

shader:Mask

Shader "Masked/Mask" {SubShader {// Render the mask after regular geometry, but before masked geometry and// transparent things.Tags {"Queue" = "Geometry+10" }// Don't draw in the RGBA channels; just the depth bufferColorMask 0ZWrite On// Do nothing specific in the pass:Pass {}}
}

附录2

SetRenderQueue

/*SetRenderQueue.csSets the RenderQueue of an object's materials on Awake. This will instancethe materials, so the script won't interfere with other renderers thatreference the same materials.
*/using UnityEngine;[AddComponentMenu("Rendering/SetRenderQueue")]public class SetRenderQueue : MonoBehaviour {[SerializeField]protected int[] m_queues = new int[]{3000};protected void Awake() {Material[] materials = GetComponent<Renderer>().materials;for (int i = 0; i < materials.Length && i < m_queues.Length; ++i) {materials[i].renderQueue = m_queues[i];}}
}

AR互动大屏丨Add_自动循环动画、遮挡效果的实现相关推荐

  1. AR互动大屏项目实战

    1课程简介.mp4            2课程安排.mp4 3恐龙博物馆项目需求.mp4 4项目设计.mp4 5资源需求(模型流程及外包标准).mp4 6模型动画导入(动画流程及外包标准).mp4 ...

  2. 体感互动LED显示屏系统|体感互动屏幕|体感互动大屏软件

    体感互动大屏是对传统大屏的一种升级,是一种新型的多媒体互动展示系统,集信息展示.广告宣传.人机互动.游戏体验等功能为一体. 传统屏幕展示,体验者需要通过触摸点击来获取信息:而体感互动系统,不依赖任何工 ...

  3. 体感互动ar交互大屏设计方案

    AR大屏互动又称体感AR互动,是通过硬件大屏显示屏幕.体感互动系统软件以及三维数字内容,通过感应装置来感应站在大屏前的参与者的动作手势时,大屏里面的内容变随着参与者的动作发生变化. AR大屏互动利用图 ...

  4. 大屏互动-大屏交互-大屏投影技术解决方案

    新视野大屏互动(www.fgsxy.com)又称体感互动,是集3D体感摄影机.体感互动软件以及三维数字内容为一体的控制系统平台.是人和显示屏之间,通过简单姿势和特定的颜色等识别方式(如挥手.摆头.转身 ...

  5. 微信互动大屏 霸屏 抢红包 源码及所需技术

    当时这个项目是2018年中旬的时候帮一家传媒公司开发的,里面功能很多,但涉及到的技术点并不多,可能是客户需要的功能比较少的原因吧.但还是相当繁琐的,因为里面有很多功能点.       霸屏,抢红包,互 ...

  6. AR 广告大屏UI界面搭建一

    1.创建一个项目,将素材拖动到Assets目录下,并且将图片的格式修改为Sprite(2D and UI) 将图片转换为精灵类型 2.在屏幕上点击鼠标右键-->屏幕分辨率,查看屏幕的分辨率,在u ...

  7. 超带感的AR大屏互动,多元化应用场景!

    什么是AR大屏互动? 佩京科技AR互动大屏是通过AR技术将大屏上的内容进行虚拟景象的补充,让人们在视听方面都带来更真实的,通过各种传感设备使用户"沉浸"到该环境中,实现用户和环境直 ...

  8. AR大屏互动的原理是什么?可以应用在哪些场景中?

    AR互动大屏是运用AR增强现实技术,利用计算机生成一种逼真的视.力.听.触和动等感官结合的虚拟环境,再通过各种信息传感设备,让用户在此环境中开启沉浸式互动体验,实现人和环境之间两者进行自然的交互. A ...

  9. 房地产ar大屏互动展示更炫酷吸睛

    AR大屏互动,利用AR图像识别.跟踪.输入.交互等技术,结合3D立体成像技术,将真实世界信息和虚拟世界信息无缝集成,参与者可与虚拟影像进行互动,营造出震撼的场景氛围,给人们更加真实的互动体验. AR大 ...

最新文章

  1. Flutter开发之图片加载(九)
  2. html自定义标签提示,用简单的jquery+CSS创建自定义的a标签title提示tooltip_HTML/Xhtml_网页制作...
  3. 树莓派3上安装kali后的相关配置kali(2)
  4. TCP/IP协议是什么
  5. virtualenv在Ubuntu18.10(64位)中的用法(命令和图形化建立虚拟环境)
  6. Cookie、session、token对比
  7. 区块链入局,51小长假听歌、打游戏的姿势将被颠覆!
  8. python更改当前工作路径
  9. 基于特征融合的图像情感识别
  10. MATLAB聚类分析学习笔记
  11. 【新知实验室】腾讯云TRTC接入测试以及状态同步功能重点验证
  12. 《大明王朝1566》台词摘录
  13. 旅游网-去哪儿网景点评论爬取
  14. Spring MVC之redirect、forward和普通跳转
  15. 关于调整互联网、电话订票起售时间的公告
  16. 【Mysql】 update语句更新原理
  17. Functional Commitment Schemes: From Polynomial Commitments to Pairing-Based Accumulators学习笔记
  18. HDU - 4540 威威猫系列故事——打地鼠
  19. 基于嵌入式系统的电动汽车交流充电桩设计
  20. 河源无菌实验室建设室内设计

热门文章

  1. 本周最新文献速递20220508
  2. 将文本中的各个单词的字母顺序翻转(Java)
  3. 从“棱镜门”事件看数据安全如何保护
  4. 使用Nordic芯片的手环OTA(android)
  5. 主题美化 —— IAR篇
  6. [arch Linux IDEA] 搭配MariaDB的JDBC
  7. 开始使用WebRTC
  8. 获取csv表格中的数据
  9. 常用的一些LDO芯片及使用
  10. Python中len的使用方法