位置: 编程技术 - 正文

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

编辑:rootadmin

推荐整理分享Unity3D游戏开发之仿仙剑奇侠传仙灵岛机关的实现(Unity3D游戏开发引擎),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:Unity3D游戏开发(第2版)pdf,Unity3D游戏开发标准教程,Unity3D游戏开发(第2版)pdf,Unity3D游戏开发引擎,Unity3D游戏开发标准教程,Unity3D游戏开发毕业论文,Unity3D游戏开发标准教程,Unity3D游戏开发(第2版),内容如对您有帮助,希望把文章链接给更多的朋友!

喜欢我的博客请记住我的名字:秦元培,我的博客地址是 本文出处: 我们继续来做点和仙剑相关的东西,首先我们来看一副图:

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

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

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

1、角色控制

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

2、寻路的实现

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

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

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

[csharp] view plaincopyprint?using UnityEngine; using System.Collections; public class TransportScript : MonoBehaviour { //寻路组件节点 public Transform[] mPaths; //芦苇垫传送器 private Transform mTransportor; //被传送的角色 public Transform mTransportPlayer; //起点 Vector3 StartPoint=new Vector3(0F,0.5F,-F); //终点 Vector3 EndPoint=new Vector3(0F,0.5F,F); //定义移动的方向类型:从起点到终点为0,从终点到起点为1 private int MoveType=0; //定义移动状态的标志变量 private bool isMoving=false; //存储寻路组件设置的哈希表 private Hashtable args=new Hashtable(); void Start () { //获取传送器 mTransportor=this.transform; //初始化寻路插件 Hashtable args = new Hashtable(); //设置路径的点 args.Add("path",mPaths); //设置类型为线性,线性效果会好一些。 args.Add("easeType", iTween.EaseType.linear); //设置寻路的速度 args.Add("speed",2.5f); //移动的整体时间。如果与speed共存那么优先speed args.Add("time",f); //是否先从原始位置走到路径中第一个点的位置 args.Add("movetopath",true); //延迟执行时间 args.Add("delay", 0.1f); //移动的过程中面朝一个点 args.Add("looktarget",Vector3.up); //三个循环类型 none loop pingPong (一般 循环 来回) args.Add("loopType", "pingPong"); //是否让模型始终面朝当面目标的方向 //如果你发现你的模型在寻路的时候时钟都是一个方向那么一定要打开这个 args.Add("orienttopath",true); iTween.MoveTo(gameObject,args); iTween.Pause(); } void Update() { //如果当前处于停止状态则暂停动画 if(isMoving==false) { iTween.Pause(); } //从起点到终点的控制 if(MoveType==0 && mTransportor.position!=EndPoint && isMoving==true) { //未到达终点则继续运动 mTransportPlayer.position=mTransportor.position; }else if(MoveType==0 && mTransportor.position==EndPoint) { //到达终点则暂停运动 iTween.Pause(); isMoving=false; MoveType=1; } //从终点到起点的控制 if(MoveType==1 && mTransportor.position!=StartPoint && isMoving==true) { //未到达终点则继续运动 mTransportPlayer.position=mTransportor.position; }else if(MoveType==1 && mTransportor.position==StartPoint) { //到达终点则暂停运动 iTween.Pause(); isMoving=false; MoveType=0; } } //当角色走上芦苇垫的时候开始移动动画 void OnTriggerEnter(Collider mCollider) { if(mCollider.gameObject.name=="Samuzai") { if(isMoving==false) { isMoving=true; iTween.Resume(); } } } } 在上面的代码中,我们需要把握以下几点:

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游戏开发之自由视角状态下的角色控制 喜欢我的博客请记住我的名字:秦元培,我的博客地址是

Unity3D游戏开发之自由视角状态下的角色控制(二) 喜欢我的博客请记住我的名字:秦元培,我的博客地址是

Unity3D游戏开发之开发游戏带来的问题 昨日曾就某投资人把移动团队失败原因之一归于选择Unity引擎进行了一番评论,工具本身无罪,但如何理解工具、正确使用Unity引擎确实需要讨论,在选

标签: Unity3D游戏开发引擎

本文链接地址:https://www.jiuchutong.com/biancheng/372907.html 转载请保留说明!

上一篇:Unity3D游戏开发之基于Trigger的触发式动画设计(Unity3D游戏开发标准教程)

下一篇:Unity3D游戏开发之自由视角状态下的角色控制(Unity3D游戏开发引擎)

  • 短期借款的实际资金成本
  • 税控抵减会计分录
  • 企业所得税季度预缴可以弥补以前年度亏损吗
  • 公司购买汽车的折旧年限
  • 承兑汇票可以当现金用吗
  • 期初试算平衡表不平衡怎么查
  • 合并报表无形资产摊销时间
  • 出口退税不退税主要适用于
  • 企业停产多久算长期停产
  • 小规模增值税税率表
  • 划拨土地划转是什么意思
  • 公司投资的股权财产怎么认定
  • 长期待摊费用的摊销方法
  • 个人在电商平台购买跨境商品需要缴纳什么税
  • 税控盘基本信息设置
  • 高危行业企业探索实行什么制度
  • 管理不善造成的损失怎么处理
  • 退回的增值税怎么做会计记录
  • 个人营业执照如何办理社保
  • 待摊费用做账
  • 销售商品收到货款20000元存入银行
  • 公司注销时债权人未申报债权
  • 税局代开专票季度未达起征点怎么缴纳地税?
  • 所得税前允许列支的税金包括
  • 微软产品提示订单失效
  • 民间非营利组织会计制度及操作实务
  • 现金日记账余额为零要怎么填
  • windows7中
  • 少收的应收款和应付账款
  • PHP:Memcached::quit()的用法_Memcached类
  • 总包和分包是什么关系
  • 解决中暑最有效方法
  • uniapp生成h5
  • php文库系统
  • 公积金托收怎么变更
  • 进项税额转出余额在贷方怎么处理
  • vue使用jquery
  • 个人所得税通过扣缴义务人申报
  • 机器视觉 machine
  • RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling `cublas‘
  • 企业所得税季报营业成本包括哪些
  • 将织梦dedecms转换到wordpress
  • 营业收入比销售商品收到的现金大
  • 更改Mysql root用户密码
  • 投资性房地产出售
  • 可供分配的利润包括
  • 质保金 销售费用
  • 预缴税款如何做账
  • 已认证抵扣的发票如何红字信息表
  • 广告费收入如何填写增值税申报表
  • 怎样在excel计算
  • 汽修厂印花税怎么交
  • 员工入股会计分录
  • 通过一达通出口到底开什么发票
  • 可转债不卖会亏钱吗
  • 租房发票如何做分录
  • 个人账号可以向对公账户转账吗
  • 矿山运输设备的点检绩效考核
  • 企业成立前期的重点工作
  • 房地产开发企业增值税怎么算
  • mysql修改默认字符集和校对规则
  • 猛料高手
  • rhel7.4安装
  • 苹果mac怎么安装win10
  • m0b0player播放器
  • edif是什么文件
  • windows 10预览版
  • win10mobile升级顾问
  • win10如何关闭windows defender实时保护
  • 微软雅黑啥意思
  • linux extern关键字
  • javascript中的原型和原型链
  • node搭建博客
  • android解析xml的方法中,将整个文件加载到内存
  • jQuery Ajax 加载数据时异步显示加载动画
  • 深圳前海地铁站几号线
  • 2021年吉林省城乡居民基础养老金是多少
  • 个人所得税的网址
  • 购电脑折旧的会计分录
  • 公司如何制定制度
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设