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

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

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

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

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

1、角色控制

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

2、寻路的实现

采用在《[Unity3D]Unity3D游戏开发之基于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()方法来控制角色的动画。最后我们来一起看看实现的效果吧,是不是有仙灵到的感觉呢?呵呵

时间: 2024-10-05 20:12:29

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

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

更多精彩内容,请点击http://www.gopedu.com/ 今天我想和大家分享的是在Unity3D中一个比较重要的组件--布娃娃(Ragdoll).我们首先来看张图片吧! 相信熟悉仙剑的朋友一定知道这样一句话:胜败乃兵家常事,大侠请重新来过.从仙剑一到仙剑五前传,仙剑带给我们的感动里不仅仅是一个个跌宕起伏.感人至深的故事,还有每一次战斗失败之后从头再来的勇敢.人生有时候就像游戏一样,我们总会遇到这样或着那样的挫折和困难.虽然在仙剑这样一个五灵六界的世界观下,人类基本作为最弱小的生命存在,但

[Unity3D]Unity3D游戏开发之异步记载场景并实现进度条读取效果

大家好,我是秦元培.欢迎大家关注我的博客,我的博客地址是:blog.csdn.net/qinyuanpei.终于在各种无语的论文作业中解脱了,所以立即抓紧时间来这里更新博客.博主本来计划在Unity3D游戏开发之从<魂斗罗>游戏说起(上)--目标追踪这篇文章后再写一篇<Unity3D游戏开发之从<魂斗罗>游戏说起(下)>,只是眼下博主的项目进度有些缓慢,所以想等项目稳定下来以后再和大家分享. 作为大家等待博主更新博客的回报,我们今天来说一说Unity3D中的游戏场景异步

Unity3D游戏开发之当游戏开发遇上Excel

各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是http://blog.csdn.net/qinyuanpei. 今天我们的话题是Excel,作为常用的办公软件的Excel相信大家都不陌生啦.可是如果我们认为Excel只是办公软件的话,那么这就不只是天真而是Out了.事实上Excel和游戏开发有着密切的联系,不知道大家还记不记得那款利用Excel开发出来的三国杀,这可能是Excel第一次以游戏开发的身份出现在大家面前吧.我们知道在游戏开发领域有一种工作叫做策划,就像在软件开发领

[Unity3D]Unity3D游戏开发之继续探索NGUI

大家好,我是秦元培.欢迎大家关注我的博客.我的博客地址是blog.csdn.net/qinyuanpei. 博主近期開始研究NGUI了,但是说实话,博主感觉NGUI的东西似乎有些分散,由于网上大部分的资料都仅仅是简单地解说怎样使用NGUI,并没有从实质性的原理出发来解说NGUI的内涵,这就和我们学习.NET仅仅会拖控件是一样的.并不能把握事物内在的东西.所以,博主推荐大家从官方提供的样例入手研究NGUI.博主这几天基本上都在看NGUI的演示样例程序,自我感觉内容比較杂吧.在今天的文章中,博主将讲

Unity3D游戏开发之伤害数值显示

众所周知,在RPG游戏策划中最为重要的一个环节是数值策划.数值策划是一个关于游戏平衡方面的概念,它是一种非常深奥的概念.游戏从某种意义上 是多种选择的组合,因此如果一个游戏失去平衡,那么就会减少选择而影响游戏的乐趣.数值策划人员通常需要按照一定的规则和方法将整个游戏系统的相关数值调整到一个合适的范围,以确保玩家可以有更多地选择以增强游戏的可玩性.数值策划是近年来国内游戏行业从国外游戏业引申过来的一个概念,我们在学习游戏设计的过程中,除了专注于技术上的实现以外,还应该对游戏设计中的相关理论有所了解

[Unity3D]Unity3D游戏开发之伤害数值显示

大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.众所周知,在RPG游戏策划中最为重要的一个环节是数值策划.数值策划是一个关于游戏平衡方面的概念,它是一种非常深奥的概念. 游戏从某种意义上 是多种选择的组合,因此假设一个游戏失去平衡,那么就会降低选择而影响游戏的乐趣. 数值策划人员通常须要依照一定的规则和方法将整个游戏系统的相关数值调整到一个合适的范围.以确保玩家能够有很多其它地选择以增强游戏的可玩性.数值策划是近年来国内游戏行业从国外游戏

Unity3D游戏开发初探—2.初步了解3D模型基础

一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被.机械等等,比如一个大楼的3D模型图.3D模型也包括玩具和电脑模型领域. 互联网的形态一直以来都是2D模式的,但是随着3D技术的不断进步,在未来的时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯.电子阅读.网络游戏.虚拟社区.电子商务.远程教育等等.甚至对于旅游业,3D互联网也能

Unity3D游戏开发从零单排(六) - 人物运动及攻击连击

提要 今天要实现的是一个简单人物控制器.包括用w,a,s,d来控制人物上下左右跑动,鼠标左击发出连招,都是基于老的lagacy的动画.虽然unity3d自带有charactorcontroller,但是并不是很好用,所以人物控制相关的全部自己来实现.先上效果图: 场景搭建 首先下载这个package,里面包含了人物的动作还有地面的模型.将人物和地面都拖进场景中.这里的模型默认的动画模式是lagacy,不用修改.模型有点偏小,改变模型的scale值为10.最好不要改源文件的scale的scale

unity3D游戏开发实战原创视频讲座系列10之《保卫战:异形入侵》游戏开发第一季

讲解目录 <保卫战:异形入侵>游戏开发    1 第一讲   游戏演示和资源的介绍    1 第二讲  "异形"怪物的实现    1 第三讲  "异形"怪物生命值的体现    9 第四讲  "异形"怪物死后处理    12 第五讲  玩家的制作    15 第六讲  玩家的行走控制(键盘)    16 第七讲  武器的切换(鼠标)     16 第八讲  摄像头的变化(鼠标)    19 第九讲  子弹预制体和特效的制作    20