大家好,我是秦培,欢迎关注我的博客。我的博客地址blog.csdn.net/qinyuanpei。

今天我们来一起学习在Unity3D中怎样实现角色攀爬效果。

在RPG游戏中,某些游戏场景经常须要玩家沿着墙壁或者梯子攀爬到高处,比如《仙剑奇侠传三》的九龙坡场景中,玩家须要沿着梯子爬到高处才干收集场景中的物品。

相同在《古剑奇谭一》中的翻云寨,玩家则须要爬到顶层才干开启游戏里的机关。

那么今天我们就来利用Mecanim动画系统中的MatchTarget来实现角色攀爬效果。

在正式開始今天的内容前,首先让我们来了解下MatchTarget的详细概念。MatchTarger即匹配目标,是Animator类中的一个方法,该方法能够实如今运行动画的过程中使角色身体的某个部位与指定位置进行匹配。比方我们在攀爬的过程中,手、脚及身体应该是和墙壁接触的,那么这时我们就能够考虑使用这种方法,该方法定义例如以下:

void MatchTarget (Vector3 matchPosition, Quaternion matchRotation, AvatarTarget targetBodyPart, MatchTargetWeightMask weightMask,
 float startNormalizedTime,float targetNormalizedTime)

能够看出,在该方法中。我们指定了匹配的位置、角度、身体的详细部分、权重、匹配開始及匹配结束的时间。由此。我们就能够開始今天的内容了,首先我们来创建一个简单的场景:

在这个场景中,我们希望角色能够沿着墙壁爬到墙上。那么详细怎么做呢?首先我们在场景中创建一个空的游戏体,将其命名为RightHandTarget,它将作为角色在攀爬时右手的一个匹配点。我们将其拖放到合适的位置。然后将其拖放到墙模型下。使其成为它的一个子物体。如图所看到的:

好了,这样我们完毕了场景部分的搭建和准备工作。接下来我们来制作角色的动画模型,新建一个Animator Controller,命名为JumpGrab。双击打开Animator窗体,这里我们仅仅拖入两个动画Idle'和JumpUp。这里我们新建两个float类型的參数MatchStart、MatchEnd及Bool类型的參数Jump,触发JumpUp动画的条件是Jump为True。如图

当中JumpUp是一个完整的攀爬墙壁的动画,在这个动画中,角色首先会伸出右手进行攀爬,因此我们能够将其右手与我们在场景中定义好的RightHandTarget进行匹配,从而保证角色在攀爬的过程中总是紧紧贴着墙壁。

好了,如今让我们来编写脚本来将动画模型和角色关联起来:

using UnityEngine;
using System.Collections; public class TargetMatching : MonoBehaviour
{
//动画组件
private Animator animator;
//右手着力点
public Transform RightHand;
//是否完毕跳跃
bool hasJumped = false; AnimatorStateInfo mState; void Start ()
{
//获取动画组件
animator = GetComponent<Animator>();
} void Update ()
{ if (animator)
{
//获取动画状态
mState = animator.GetCurrentAnimatorStateInfo(0); if (Input.GetButton("Fire1")) animator.SetBool("Jump", true);
if (mState.IsName("Base Layer.JumpUp") || mState.IsName("Base Layer.FullJump"))
{
animator.SetBool("Jump", false);
//调用MatchTarget方法
animator.MatchTarget(RightHand.position, RightHand.rotation, AvatarTarget.RightHand, new MatchTargetWeightMask(new Vector3(1, 1, 1), 0), animator.GetFloat("MatchStart"), animator.GetFloat("MatchEnd"));
hasJumped = true;
}
} }
}

好了。以下我们来看终于的效果吧!

好了,这就是今天的内容了,希望大家能够喜欢!

每日箴言:不管发生什么都欣然接受。一切都是礼物。

我们给予,我们接受。——艾丽丝·门罗

喜欢我的博客请记住我的名字:秦元培,我博客地址是blog.csdn.net/qinyuanpei。
转载请注明出处。本文作者:秦元培,本文出处:http://blog.csdn.net/qinyuanpei/article/details/38275323

版权声明:本文博客原创文章。博客,未经同意,不得转载。转载请注明作者和出处。谢谢。

[Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现的更多相关文章

  1. 关于《Unity3D/2D游戏开发从0到1》书籍再版说明

    关于<Unity3D/2D游戏开发从0到1>第一版本在2015年7月1日全国发行,累计得到不少国内高校教师.培训机构的好评.但是由于Unity官方对于技术不断的升级与版本的快速迭代,基于U ...

  2. 《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结

    前几天,个人著作<Unity3D/2D游戏开发从0到1(第二版)>经过七八个月的技术准备以及近3个月的日夜编写,在十一长假后终于完稿.今天抽出一点时间来,给广大热心小伙伴们汇报一下书籍概况 ...

  3. 《Unity3D/2D游戏开发从0到1》正式出版发行

    <Unity3D/2D游戏开发从0到1>正式出版发行 去年个人编写的Unity书籍正式在2015年7月正式发行,现在补充介绍一下个人著作.书籍信息:      书籍的名称: <Uni ...

  4. Unity3D 入门 游戏开发 Unity3D portal game development

    Unity3D 入门 游戏开发 Unity3D portal game development 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com ...

  5. Unity3D手机游戏开发

    <Unity3D手机游戏开发> 基本信息 作者: 金玺曾 出版社:清华大学出版社 ISBN:9787302325550 上架时间:2013-8-7 出版日期:2013 年8月 开本:16开 ...

  6. Unity3D独立游戏开发日记(二):摆放建筑物

    在沙盒游戏里,能自由建造是很重要的特点,比如说风靡全球的<我的世界>,用一个个方块就能搭建出规模宏大的世界.甚至有偏激的人说,没有自由建造,就不是一个真正的沙盒游戏.的确,沙盒游戏的魅力有 ...

  7. Unity3D独立游戏开发日记(一):动态生成树木

    目前写的独立游戏是一个沙盒类型的游戏.游戏DEMO视频如下: 提到沙盒类型的游戏,就有人给出了这样的定义: 游戏世界离现实世界越近,自由度.随机度越高才叫沙盒游戏.所谓自由度,就是你在游戏里想干啥就干 ...

  8. Unity3D小游戏开发之两个我踩过的坑

    最近在开发一个植物大战僵尸小游戏,今天写了一早上的代码,踩了两个坑,这两个坑的位置分别位于触发器和数据转换,写这篇博文以此来让其他程序员不要再去踩这两个坑. 1.我在做简易僵尸模型的时候,这个僵尸模型 ...

  9. Photon + Unity3D 在线游戏开发 学习笔记(两)

    本文和大家 和大家说说 Photon 解压后的目录结构 这里面最基本的我们 以后开发要用到的目录 就是  deploy目录,这个目录里 放的是要挂载的 server 当然我们的 server端也要放在 ...

随机推荐

  1. gradle下载(转)

    http://services.gradle.org/distributions services.gradle.org/ distributions/ gradle-2.2.1-rc-1-all.z ...

  2. 《反project核心原则》说明

      致亲爱的中国读者: 大家好 !我是<逆向project核心原理> 作者 李承远(ReverseCore). (韩文博客地址:www.reversecore.com) 首先.非常高兴我的 ...

  3. 非正确使用浮点数据由项目产生BUG讨论的问题

    乘分配 当小学学会了乘法分配.详细乘法分配:并与多个两个数相乘的,他们能够把这个数字乘以,然后加入.由于一个恒定.乘法分配律也能够使用表达式的定义"(a+b)×c = a×c+b×c&quo ...

  4. 由单页面web应用引发的企业应用问题

    由于单页面web应用的流行,client与server端之间都对应的产生了一些微妙的变化,比方,client原来仅仅是用来展示页面和理清逻辑,而现在逐渐转变成了一个可以进入驱动状态的应用程序. 未来的 ...

  5. freemarker错误七

    1.错误叙述性说明 五月 30, 2014 11:33:57 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template p ...

  6. Android - match_parent 和 fill_parent差异

    Android - match_parent 和 fill_parent差异 本文地址: http://blog.csdn.net/caroline_wendy match_parent 和 fill ...

  7. MongoDB:逐渐变得无关紧要

    我与MongoDB的关系可分为三个阶段.对于目前处于第三阶段的我来说,这款产品似乎变得无关紧要了.很快你就会明白为什么我这么说. 阶段一:痴迷 我与MongoDB的第一次接触十分神奇:一个poligl ...

  8. android:ViewPager动画摘要

    动画节目: 我们可以用ViewPager的setPageTransformer办法,至ViewPager动画.示及效果: 1.CubeInTransformer 2.CubeOutTransforme ...

  9. 恶意软件&quot;跨平台&quot; 小心钱包很受伤

    什么是跨平台攻击? 举例来说.就像网络诈骗犯为了避开电子商务平台的监控.会在微博上发消息.百度上撒网,腾讯上联系,最后在淘宝上交易.这样的跨平台操作的模式会大大添加犯罪过程监控和取证的难度.而跨平台攻 ...

  10. linux下串口调试工具/串口终端推荐: picocom

    对于picocom, kermit, minicom, picocom 最简单易用,也全然符合我的使用需求. 安装(mint / ubuntu): $ sudo apt-get install pic ...