分类:Unity、C#、VS2015

创建日期:2016-05-02

一、简介

第三人称视角控制器涉及的相关概念有:

1、刚体(Rigidbody)。

2、碰撞体(Collider)。包括球体碰撞体(Sphere Collider)、箱体碰撞体(Box Collider)、网格碰撞体(Mesh Collider)、物理材质(Physics Material)、铰链关节(Hinge Joint)、弹簧关节(Spring Joint)等。

Unity内置了 NVIDIA PhysX 物理引擎。要控制场景中的物理对象,只需对该对象添加刚体 (Rigidbody)。执行此操作后,该对象就会受重力的影响,而且还可以将该对象与世界坐标系中的其他对象进行碰撞检测。

二、本章要点

1、刚体

刚体 (Rigidbody) 是以物理方式模拟的对象。可将刚体 (Rigidbody) 用于玩家可以四处推动的事物(例如板条箱或松散对象),或通过编写脚本向刚体 (Rigidbody) 应用力来直接移动它。

如果对非运动学刚体 (non-Kinematic Rigidbody) 进行变换,则可能不会与其他对象正确碰撞,因此应通过对刚体 (Rigidbody) 应用力和扭矩来移动它。另外,还可以向刚体 (Rigidbody) 添加关节 (Joint) 以使行为更复杂。例如,可以创建具有物理门,或创建具有摇摆链条的起重机等。

还可使用刚体 (Rigidbody) 使车辆显得生动,例如可以用一个刚体、四个车轮碰撞体 (Wheel Collider) 以及一个基于用户输入应用车轮旋转力的脚本来创建汽车。

可以通过从脚本向刚体 (Rigidbody) 应用力来创建飞机。

刚体 (Rigidbody) 最常与基元碰撞体 (Primitive Collider) 结合使用。

重要提示:

  • 绝不应一起使用父和子刚体 (Rigidbody)
  • 绝不应缩放刚体 (Rigidbody) 的父级

2、运动学刚体 (Kinematic Rigidbody)

运动学刚体 (Kinematic Rigidbody) 是指启用了“运动学”(is Kinematic) 选项的刚体。运动学刚体 (Kinematic Rigidbody) 不受力、重力或碰撞的影响。它们通过设置变换的位置和旋转或对其进行动画处理来驱动,运动学刚体还可以与其他非运动学刚体 (non-Kinematic Rigidbody) 进行交互。

运动学刚体 (Kinematic Rigidbody) 可在与其他刚体 (Rigidbody) 碰撞时正确唤醒它们,并会对置于其上的刚体 (Rigidbody) 应用摩擦力。

下面是针对运动学刚体 (Kinematic Rigidbody) 的几个使用情况的示例:

(1)希望某个对象处于物理控制下,但是其他情况下则是通过脚本或动画进行控制。例如,可以创建一个动画角色,其骨骼附加了与关节 (Joint) 连接的刚体 (Rigidbody),以用作布娃娃。大多数时候该角色处于动画控制下,此时会创建运动学刚体 (Kinematic Rigidbody)。但是当命中它时,又希望它变为布娃娃并受物理影响。为实现此目的,只需禁用“运动学”选项,即让“is Kinematic”为false即可。

(2)需要某个对象可以推动其他对象、但不推动自己移动的对象。例如,如果有一个动画平台,并且要在其上放置一些刚体 (Rigidbody) 箱体,则应使该平台成为运动学刚体 (Kinematic Rigidbody) 而不仅仅是不带刚体 (Rigidbody) 的碰撞器 (Collider)。

(3)可能需要某个对象有一个经过动画处理的运动学刚体 (Kinematic Rigidbody),并使用一个可用的关节 (Joint) 让真实刚体 (Rigidbody) 跟随其后。

3、静态碰撞组件 (Static Collider)

静态碰撞组件 (Static Collider)是具有碰撞体 (Collider) 而不是刚体 (Rigidbody) 的游戏对象 (GameObject)。静态碰撞体 (Static Collider) 用于始终保持在相同的位置并且永远不会四处移动的水平几何结构。

既可以将网格碰撞组件 (Mesh Collider) 添加到已存在的图形网格,例如使用导入设置 (Import Settings) 生成碰撞体 (Generate Colliders),也可以使用其他碰撞组件。

绝不应逐帧移动静态碰撞体 (Static Collider),或者说,只要将其设置为静态碰撞体,它就应该从始至终都不会在场景中移动。否则就会导致物理引擎重新进行内部计算,这种计算成本十分高昂,还会使性能显著下降。不仅如此,基于静态碰撞体 (Static Collider) 唤醒其他刚体 (Rigidbody) 的行为未定义,并且移动静态碰撞体 (Static Collider) 不会对与之接触的刚体 (Rigidbody) 应用摩擦力。

总之,凡是在场景中移动的碰撞体 (Collider) ,都应该始终将其设置为运动学刚体 (Kinematic Rigidbody),而不是将其设置为静态碰撞体。

【Unity】第11章 第三人称角色控制器和碰撞体的更多相关文章

  1. Unity手游之路<七>角色控制器

    Unity手游之路<七>角色控制器 我们要控制角色的移动,可以全部细节都由自己来实现.控制角色模型的移动,同时移动摄影机,改变视角.当然Unity也提供了一些组件,可以让我们做更少的工作, ...

  2. UE4中创建第一、第三人称角色,并进行角色间的切换

    在游戏中经常会出现第一人称和第三人称的视角切换场景,笔者在这里简单介绍如何进行这步操作. 1.创建角色 在内容浏览器中添加2个Character蓝图,分别命名为FirstPersonalCharact ...

  3. UE4 创建第三人称角色

    一.C++创建 1.      创建一个C++类,继承自Character,取名MyThirdCharacter 2.      在头文件中声明一个摄像机目标点CameraBoom,一个摄像机Foll ...

  4. 第三人称角色移动及自由移动视野(RigidBody实现)

    重点:向量的运算.在获得水平及垂直方向的速度之后,将方向进行重设,让方向与视野同步(即:相机的方向与人物方向相同) 下面以一个实例来说明如何操作: 1.如图创建一个地形(Terrain),两个正方体( ...

  5. Unity手游之路&lt;七&gt;角色控制器

    我们要控制角色的移动,能够所有细节都由自己来实现.控制角色模型的移动,同一时候移动摄影机,改变视角.当然Unity也提供了一些组件,能够让我们做更少的工作,实现我们所期望的功能.今天我们就一起系统来学 ...

  6. U3D组件------CharacterController(角色控制器)

    角色控制器中有碰撞体和刚体的属性 Slope Limit:角色能爬的斜坡的坡度限制 Step Offset:角色走台阶的高度 Skin Width:当场景里面出现多个角色控制器的时候,两个对象在接触的 ...

  7. 【Unity】11.1 角色控制器 (Character Controller)

    分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 角色控制器(Character Controller)主要用于对第三人称或第一人称游戏主角的控制.如果要创建类人角色,可 ...

  8. 【Unity 3D】学习笔记三十八:角色控制器

    角色控制器 在unity中,已经帮我们实现的上下左右跳等动作,并将他们封装成了角色控制器.角色控制器保存在unity标准资源包中,能够说是很的强大.能够模拟第一或者第三人称视角.不受刚体的限制,很适用 ...

  9. unity——使用角色控制器组件+射线移动

    首先要导入unity标准资源包Character Controllers 这个标准资源包,为了方便,还添加了两外一个资源包Scripts,后者包含了一些基本的脚本个摄像机脚本. 没错,这次我们要使用其 ...

随机推荐

  1. 〖Android〗代理与正常网络分开同步CyangenMod源码

    为了同步CyanogenMod源代码,你也学会了FQ,对吗? 通常 .repo/manifest.xml 文件有Google AOSP的Project,也有Github的Project: 访问Gith ...

  2. 【AIX】查看当前目录下文件与文件夹大小

    使用命令: du –sg ./*    #以G为单位 du –sm ./*    #以M为单位 du –sk ./*    #以k为单位

  3. python之获取微信access_token

    # -*- coding: cp936 -*- #python 27 #xiaodeng #获取微信access_token #办法一:将该url直接填写到浏览器地址中可以获得access_token ...

  4. Ubuntu18.04下的音频录制和编辑软件Ardour及QjackCtl(jackd gui)

    Ardour 是一个Linux和OSX下的多音轨录制和数字音频编辑软件. 需要配合ALSA或者JACK总线使用. 快速入门 http://brunoruviaro.github.io/ardour4- ...

  5. Probability&Statistics 概率论与数理统计(1)

    基本概念 样本空间: 随机试验E的所有可能结果组成的集合, 为E的样本空间, 记为S 随机事件: E的样本空间S的子集为E的随机事件, 简称事件, 由一个样本点组成的单点集, 称为基本事件 对立事件/ ...

  6. 用C读取json文件

    a jconf_t * read_jconf(const char *file) { static jconf_t conf; // 清空数据 memset(&conf, , sizeof(j ...

  7. Retrofit、Okhttp使用小记(cookie,accesstoken,POST

    博主在项目中用RxJava也差不多几个月了,但是结合Retrofit使用经验还不是太多.恰好新项目的后台是http+json的,就打算尝试一把. 刚开始由于Retrofit还不太熟,但是后台接口急着测 ...

  8. 在发送信息时应用PendingIntent.FLAG_UPDATE_CURRENT

    1. 连续发送两条信息时,出现bug.以下是bug现象描述. 发送第一条信息,sentReceiver弹出toast告知发送成功,同时在listview中的发送状态立即同步更新为发送成功. 继续发送第 ...

  9. ILP32、ILP64、LP64、LLP64、64位系统

    Data Type     ILP32      ILP64     LP64      LLP64char              8             8            8     ...

  10. 我的第一个Raspberry PI装置

    好吧,我先承认是这是从书上学习的第一个示例. 我入手的是Raspberry红版,版本2,看到这么小巧的卡片电脑可以做这么多事情,真是让人惊喜! 安装系统等都很顺利,启动.安装程序.远程桌面.SSH登录 ...