大家好,我是秦培,欢迎关注我的博客。我的博客地址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. logback与Spring、SpringMVC结合使用教程(转) logback good

    摘要:本文主要介绍了如何在spring.springMVC中使用logback 一.logback与Spirng结合使用 1.maven添加引用: <dependency> <gro ...

  2. Java Web整合开发(79) -- Struts 2

    一. Struts 2.x 概述 不继承任何类的Action Struts 2的Action并不一定要实现Action接口或者继承ActionSupport,任何POJO都可以做Action,只要这个 ...

  3. java编程接口(6) ------ 图标

    本文提出了自己的学习笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 能够在JLable或者不论什么从AbstractButton继承的组件使用Ic ...

  4. Apple Watch 1.0 开发介绍 2.1 WatchKit Apps UI要点

    实现app的开始是定义storyboard场景.每个场景定义了app的一部分界面.可以为不同的尺寸自定义场景. 组装storyboard界面 WatchKit app和iOS app的布局模式不同.组 ...

  5. C# HttpClient Cookie验证解决方法

    自实现的cookie 验证,远程取值的例子 以下代码配合HttpClient使用可以实现跨域(cookie的读写) //验证 复制代码 代码如下: HttpClient httpClient = ne ...

  6. 【Android进阶】获取Android软件的版本信息

    PackageInfo pinfo = getPackageManager().getPackageInfo("com.andbase", PackageManager.GET_C ...

  7. C# DataTable详细用法

    通过经常使用的项目中的DataTable,假设DataTable使用得当,不仅能使程序简洁有用,并且可以提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 一.DataTab ...

  8. jQuery 有条件排序

    尊重劳动成果,转载请注明出处(http://blog.csdn.net/sllailcp/article/details/41011173)... 点击button,表格里就会依照分数的高低.将学生信 ...

  9. 【iOS】Swift扩展extension和协议protocol

    加上几个关节前Playground摘要码进入github在,凝视写了非常多,主要是为了方便自己的未来可以Fanfankan. Swift语法的主要部分几乎相同的. 当然也有通用的.运算符重载.ARC. ...

  10. ipset高大上性能果断将nf-HiPac逼下课

    netfilter.sourceforge,github上有一个凄凉的项目,那就是nf-hipac.这个以前给Linux firewall设计带来希望的项目早在2005年就停止了更新和维护,而我本人则 ...