我们继续来做点和仙剑相关的东西,首先我们来看一副图:

这幅图呢,是仙剑奇侠传的第一个迷宫场景——仙灵岛的莲花池。男主角李逍遥为替婶婶求药独闯仙灵岛,在经历了前面的小草妖战斗后,李逍遥就来到了 莲花池,这个迷宫的解法很简单,乘坐莲花池中的芦苇垫到不同的地方,然后用破天锤打碎五座阿修罗像,通往仙灵岛的通路就会被打开,就是在仙灵岛李逍遥邂逅了正在沐浴的赵灵儿,仙剑奇侠传的故事从此展开。好了,故事先说到这里,我们来看这里很重要的一个信息:李逍遥踩着芦苇垫到达不同的地方,然后用破天锤打碎石像开启机关。我们把最终要的东西提取出来的话就是我们可以踩着芦苇垫子到不同的地方去。好,我们今天就来实现一个简化的"仙灵岛"吧!那么怎么做呢?在这篇文章中,我们最终实现的效果是这样的:

现在呢,让我们把莲花池里的构件做一下抽象:每一个 石柱可以看做是一个寻路节点,芦苇垫子可以看做是绑定了寻路组件的一个GameObject。唯一的区别就在于这里的芦苇垫子是需要我们的角色站在上面才能让它运动的,而我们在这篇文章里的游戏体是自己运动的。好,现在我们开始来实现这个功能吧。我们先创建如下图所示的场景:

我们在水中布置了8个石柱,两个芦苇垫子,当游戏开始时,玩家控制角色走上芦苇垫子时,芦苇垫子将按照事先设定的路线,将角色送达最后一个石柱位置,此时,玩家可以控制角色到达对岸。当玩家再次踏上芦苇垫子时,芦苇垫子会将角色送回起点位置。当芦苇垫子处于移动状态中时,角色可以向四个方向旋转,活动范围仅限于芦苇垫子上。好,交待清楚了场景,我们下面来讲解原理:

1、角色控制

采用在游戏开发之仿仙剑奇侠传角色控制效果》中实现的角色控制器来控制角色的行为。

2、寻路的实现

采用在游戏开发之基于ITween实现寻路功能》中实现的寻路组件作为基础脚本,本节在此基础上做扩充和完善,保证角色可以自由的移动

基于以上两个原理,我们下面来编写今天的脚本:

[csharp] view plaincopyprint?
  1. using UnityEngine;
  2. using System.Collections;
  3. public class TransportScript : MonoBehaviour {
  4. //寻路组件节点
  5. public Transform[] mPaths;
  6. //芦苇垫传送器
  7. private Transform mTransportor;
  8. //被传送的角色
  9. public Transform mTransportPlayer;
  10. //起点
  11. Vector3 StartPoint=new Vector3(0F,0.5F,-13F);
  12. //终点
  13. Vector3 EndPoint=new Vector3(0F,0.5F,10F);
  14. //定义移动的方向类型:从起点到终点为0,从终点到起点为1
  15. private int MoveType=0;
  16. //定义移动状态的标志变量
  17. private bool isMoving=false;
  18. //存储寻路组件设置的哈希表
  19. private Hashtable args=new Hashtable();
  20. void Start ()
  21. {
  22. //获取传送器
  23. mTransportor=this.transform;
  24. //初始化寻路插件
  25. Hashtable args = new Hashtable();
  26. //设置路径的点
  27. args.Add("path",mPaths);
  28. //设置类型为线性,线性效果会好一些。
  29. args.Add("easeType", iTween.EaseType.linear);
  30. //设置寻路的速度
  31. args.Add("speed",2.5f);
  32. //移动的整体时间。如果与speed共存那么优先speed
  33. args.Add("time",10f);
  34. //是否先从原始位置走到路径中第一个点的位置
  35. args.Add("movetopath",true);
  36. //延迟执行时间
  37. args.Add("delay", 0.1f);
  38. //移动的过程中面朝一个点
  39. args.Add("looktarget",Vector3.up);
  40. //三个循环类型 none loop pingPong (一般 循环 来回)
  41. args.Add("loopType", "pingPong");
  42. //是否让模型始终面朝当面目标的方向
  43. //如果你发现你的模型在寻路的时候时钟都是一个方向那么一定要打开这个
  44. args.Add("orienttopath",true);
  45. iTween.MoveTo(gameObject,args);
  46. iTween.Pause();
  47. }
  48. void  Update()
  49. {
  50. //如果当前处于停止状态则暂停动画
  51. if(isMoving==false)
  52. {
  53. iTween.Pause();
  54. }
  55. //从起点到终点的控制
  56. if(MoveType==0 && mTransportor.position!=EndPoint && isMoving==true)
  57. {
  58. //未到达终点则继续运动
  59. mTransportPlayer.position=mTransportor.position;
  60. }else if(MoveType==0 && mTransportor.position==EndPoint)
  61. {
  62. //到达终点则暂停运动
  63. iTween.Pause();
  64. isMoving=false;
  65. MoveType=1;
  66. }
  67. //从终点到起点的控制
  68. if(MoveType==1 && mTransportor.position!=StartPoint && isMoving==true)
  69. {
  70. //未到达终点则继续运动
  71. mTransportPlayer.position=mTransportor.position;
  72. }else if(MoveType==1 && mTransportor.position==StartPoint)
  73. {
  74. //到达终点则暂停运动
  75. iTween.Pause();
  76. isMoving=false;
  77. MoveType=0;
  78. }
  79. }
  80. //当角色走上芦苇垫的时候开始移动动画
  81. void OnTriggerEnter(Collider mCollider)
  82. {
  83. if(mCollider.gameObject.name=="Samuzai")
  84. {
  85. if(isMoving==false)
  86. {
  87. isMoving=true;
  88. iTween.Resume();
  89. }
  90. }
  91. }
  92. }

在上面的代码中,我们需要把握以下几点:

1、在Start()方法中,我们主要完成的是寻路组件的初始化,这里我们将寻路动画设置为来回,然后通过Pause()、Resume()方法两个方法来控制动画的播放,因为iTween没有提供在Update()中实现动画播放的方法,iTween只支持部分方法在Update()方法中使用,具体的大家可以自己去了解iTween的API文档。

2、我们主要通过isMoving标志来标记当前的状态,使用OnTriggerEnter()方法来判断角色是否走上了芦苇垫子,当角色走上芦苇垫子上时,就开始播放寻路动画。当到达起点/终点时,寻路动画即停止。当角色再次走上芦苇垫子时,再次开始寻路动画。

3、我们再Update()方法中通过改变角色的位置实现了角色和芦苇垫子的同步移动,当到达起点/终点时,寻路动画即停止,直到下一次被触发。

4、触发与碰撞的区别在于触发不会产生力的作用,可以通过OnTriggerEnter/OnTriggerStay/OnTriggerExit方法分别监听触发开始、触发中、触发结束。要使用Trigger需要勾选碰撞器的isTrigger选项。具体的区别我会在后面的文章中为大家做讲解。

更多精彩请点击  www.gopedu.com

这篇文章中用到的东西就是这么多,主要的难点是寻路动画的控制,由于官方没有提供有关的方法,所以我们只能采用Pause()、Resume()方法来控制角色的动画。最后我们来一起看看实现的效果吧,是不是有仙灵到的感觉呢?呵呵

Unity3D游戏开发之仿仙剑奇侠传仙灵岛机关的实现相关推荐

  1. [Unity3D]Unity3D游戏开发之仿仙剑奇侠传仙灵岛机关的实现

    大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 在前面的文章中,我们分别实现了一个自定义的角色控制器<[Unity3D]Unity3D ...

  2. [Unity3D]Unity3D游戏开发之仿仙剑奇侠传角色死亡效果实现

    大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 感谢对我的支持,在上一篇文章< [Unity3D]Unity3D游戏开发之仿仙剑奇侠传 ...

  3. Unity3D游戏开发之仿仙剑奇侠传角色控制效果

    在上一篇文章中,我们从Unity3D为我们提供的相机原型实现了非编码式的小地图,如果结合GUI在这个小地图下面绘制一些背景贴图,相信整体的效果会更好一些.博主希望这个问题大家能够自己去做更深入的研究, ...

  4. Unity3D游戏开发之仿仙剑奇侠传一2D游戏 (一)

    今天要和大家分享的是基于Unity3D开发2D游戏,博主一直钟爱于国产武侠RPG,这个我在开始写Unity3D游戏开发系列文章的时候就已经说过了,所以我们今天要做的就是利用Unity3D来实现在2D游 ...

  5. Unity3D游戏开发之仿仙剑奇侠传角色死亡效果实现

    今天和大家分享的是在Unity3D中一个比较重要的组件--布娃娃(Ragdoll).我们首先来看张图片吧! 相信熟悉仙剑的朋友一定知道这样一句话:胜败乃兵家常事,大侠请重新来过.从仙剑一到仙剑五前传, ...

  6. Unity3D游戏开发之仿仙剑奇侠传角色死亡怎么来实现

    今天我想和大家分享的是一个比较重要的组件--布娃娃(Ragdoll).我们首先来看张图片吧! 相信熟悉仙剑的朋友一定知道这样一句话:胜败乃兵家常事,大侠请重新来过.从仙剑一到仙剑五前传,仙剑带给我们的 ...

  7. [Unity3D]Unity3D游戏开发之仿仙剑奇侠传四角色控制效果

    大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 在上一篇文章中,我们从Unity3D为我们提供的相机原型实现了非编码式的小地图,如果结合GU ...

  8. [Unity3D]Unity3D游戏开发之仿仙剑奇侠传角色控制效果

    大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 在上一篇文章中,我们从Unity3D为我们提供的相机原型实现了非编码式的小地图,如果结合GU ...

  9. [Unity3D]Unity3D游戏开发之当仙剑奇侠传遇上Mecanim动画系统

    大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是 blog.csdn.net/qinyuanpei.博主总算赶在这个月底写出了这篇文章.这个月因为期末考试一直没时间研究太多关于技术方面的东西, ...

最新文章

  1. LaZagne检测windows本地存储的密码
  2. 【转】mysql增量备份恢复实战企业案例
  3. JAVA正則表達式小总结
  4. php网站需要装zend吗,php-zend网站也需要别名
  5. Java Spring实现原理研究之Servlet initialization初始化过程
  6. linux-查找相关-find-locate-grep
  7. C++程序调用python3
  8. 中南大学毕业设计(论文)LaTeX模板
  9. linux if 括号用法总结
  10. BitTorrent下载原理和演示
  11. iOS 常用三方集合
  12. 软件测试如何快速入门
  13. eclipse安装angularjs
  14. LCD1602液晶显示屏学习笔记
  15. 2021-10-11日python笔记(VM虚拟机安装Linux)
  16. C语言 【程序30】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
  17. 用C语言打印简单图案(爱心\圆形\三角形等)
  18. python基础-02-基础的数据类型
  19. 浪潮配置ipim_NF5280M3 – IPMI设置
  20. How to GROUD?

热门文章

  1. 数据库学习5-高级数据操作1(增删改查)
  2. cmd界面英文变中文
  3. Python实现微信定时发送天气预报
  4. Maltab GUI课程设计——身份证号码识别
  5. python中换行符怎么写_Python读写文件之换行符
  6. python 拟合sigmoid曲线_使用python+sklearn实现概率校准曲线
  7. Visual Studio如何实现.exe免安装免DLL运行[动态链接库--->>>静态链接库]
  8. 智源论文前沿记录230610
  9. JQuery模仿淘宝天猫魔盒抢购页面倒计时效果
  10. Mac导出微信聊天记录到world