大家好,我是秦培,欢迎关注我的博客。我的博客地址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. MonkenRunner通过HierarchyViewer定位控制的方法和建议(Appium/UIAutomator/Robotium侣)

    1. 背景 正在使用MonkeyRunner当我们经常使用Chimchat下面HierarchyViewer模块获得目标控制的一些信息,以协助我们测试.但在MonkeyRunner官方的说法是没有看到 ...

  2. NET中小型企业项目开发框架系列(一个)

    当时的前端,我们开发了基于Net一组结构sprint.NET+NHibernate+MVC+WCF+EasyUI等中小型企业级系统开发平台,如今把整个开发过程中的步步进展整理出来和大家分享,这个系列可 ...

  3. C++基于该模型模板包括节目外实例

    一个."经典模式"失败 我们学过C++的人都知道.在C++中组织代码的经典模型是:将函数或类的声明和定义部分分开在不同的文件之中   , 即一般将声明放在一个.h的头文件里而定义在 ...

  4. JavaScript的"类"

    1. 基本创建“类”方式 var Class = function(){ var klass = function(){ this.init.apply(this, arguments); }; kl ...

  5. RH133读书笔记(8)-Lab 8 Manage Network Settings

    Lab 8 Manage Network Settings Goal: To build skills needed to manually configure networking Estimate ...

  6. Android View系统解析(上)

  7. D3D 扎带 小样本

    D3D 符合基本程序 #pragma once #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.li ...

  8. 设备11g_rac配置对等

    linux平台安装oracle 11gssh同等配置简单 构造grid用户任关系 登陸rac1,rac2分别运行: $ su - grid $mkdir ~/.ssh $chmod 700 ~/.ss ...

  9. leetcode先刷_Maximum Subarray

    dp创始人级精英赛的冠军.最大的部分和. 扫从左至右,保持一个最佳值而当前部分和,在这一部分,并成为负值什么时候.再往下的积累后,也起到了负面作用,所以,放弃直销,然后部分和初始化为阅读的当前位置. ...

  10. JEECG移动解决方案 - 针对移动应用的应用系统转换的中间件解决方案

     设想: 通过中间件配置,在业务系统中使用到移动应用程序的简单版本.(移动页面生成器) 实现方法: 当前移动应用解决方式非常多:app?html5?微信 採用何种方法来实现?对于一个企业来讲,app分 ...