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

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

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

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

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

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

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

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

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

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

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

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

  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class TargetMatching : MonoBehaviour
  5. {
  6. //动画组件
  7. private Animator animator;
  8. //右手着力点
  9. public Transform RightHand;
  10. //是否完毕跳跃
  11. bool hasJumped = false;
  12.  
  13. AnimatorStateInfo mState;
  14.  
  15. void Start ()
  16. {
  17. //获取动画组件
  18. animator = GetComponent<Animator>();
  19. }
  20.  
  21. void Update ()
  22. {
  23.  
  24. if (animator)
  25. {
  26. //获取动画状态
  27. mState = animator.GetCurrentAnimatorStateInfo(0);
  28.  
  29. if (Input.GetButton("Fire1")) animator.SetBool("Jump", true);
  30. if (mState.IsName("Base Layer.JumpUp") || mState.IsName("Base Layer.FullJump"))
  31. {
  32. animator.SetBool("Jump", false);
  33. //调用MatchTarget方法
  34. animator.MatchTarget(RightHand.position, RightHand.rotation, AvatarTarget.RightHand, new MatchTargetWeightMask(new Vector3(1, 1, 1), 0), animator.GetFloat("MatchStart"), animator.GetFloat("MatchEnd"));
  35. hasJumped = true;
  36. }
  37. }
  38.  
  39. }
  40. }

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

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

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

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

喜欢我的博客请记住我的名字:秦元培,我博客地址是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. B. Dreamoon and WiFi(Codeforces Round 272)

    B. Dreamoon and WiFi time limit per test 1 second memory limit per test 256 megabytes input standard ...

  2. t持久化与集群部署开发详解

    Quartz.net持久化与集群部署开发详解 序言 我前边有几篇文章有介绍过quartz的基本使用语法与类库.但是他的执行计划都是被写在本地的xml文件中.无法做集群部署,我让它看起来脆弱不堪,那是我 ...

  3. SQL 修改排序规则的问题 sql_latin1_general_cp1_ci_as

    在一个项目中遇到:用原来的数据库生成的脚本,然后部署到新的服务器上,数据库的SQL_Latin1_General_CP1_CI_AS 怎么查询出来汉字都是乱码了. 遂查解决方法. 需要执行这个 ALT ...

  4. C++包括头文件&lt;&gt;和&quot;&quot;差额

    #include "book.h" #include<iostream.h> 在刚開始学习都会有这样的迷惑.有的程序用<>.有的却用"" ...

  5. 算法---高速分拣(quick sort)

    在前面的排序中所描述的算法.最快的排序算法是归并排序,但是有一个缺陷合并排序排序过程的需求O(N)额外的空间.本文介绍了高速的排序算法到位排序算法,所需的复杂性的额外空间O(1). 算法介绍:高速排序 ...

  6. Leetcode 实施细节 Rotate Image

    本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie Rotate Image Total Accepted: 15609 Total Submi ...

  7. NYOJ 372 巧克力的

    巧克力 时间限制:4000 ms  |  内存限制:65535 KB 难度:2 描写叙述 布欧能够把人变成巧克力吃了来添加他的能量,也有可能降低. 如今布欧变了n*m个巧克力,并把巧克力排成一个n*m ...

  8. unity3d c# 产生真正的随机数

    虽然能够使用Random类来生成随机数.但它是系统时钟种子,因此,有大量的反复产生伪随机数的. 您可以使用RNGCryptoServiceProvider();相对真随机数生成. 由加密服务提供程序( ...

  9. 第三篇——第二部分——第三文 配置SQL Server镜像——域环境

    原文:第三篇--第二部分--第三文 配置SQL Server镜像--域环境 原文出处:http://blog.csdn.net/dba_huangzj/article/details/28904503 ...

  10. Quartz(GUI)图形界面程序----Quartz Web

    下载.设置和运行Quartz(GUI)图形界面程序----Quartz Web 一.获取Quartz Web程序(Quartz GUI).早期的 Quartz 框架开发者意识到一个 GUI 对于某类用 ...