分类: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. SICK LMS111激光雷达的使用

    LMS111系列是SICK推出的一款用于室外区域防撞.测量及安防的激光扫描器.LMS111同西克其他扫描器一样,采用成熟的ToF原理,非接触式检测,且加入了最新的多次回波检测技术(两次回波),使得LM ...

  2. 怎么查看mysql的数据库编码格式

    一.查看MySQL数据库服务器和数据库MySQL字符集. show variables like "%char%" 二.查看MySQL数据表(table)的MySQL字符集. sh ...

  3. 十问Android NFC手机上的卡模拟(转)

    1,  问:能否在AndroidNFC手机上实现卡模拟? 答:在技术上可行,但是,对一般开发人员来讲,目前看来仅仅是技术上可行:( 2,  问:具体如何实现呢? 答:有两种方式:一种是基于硬件的,被称 ...

  4. Windows下SVN备份脚本

    本站备份:svn备份与还原_脚本_(dump命令) 以下是转载记录, 转自:https://wuxiaobai.win/archives/111 用法 svnadmin dump REPOS_PATH ...

  5. maven 下载 源码和javadoc命令(转)

    转自:http://blog.csdn.net/topwqp/article/details/8902863 maven 下载 源码和javadoc命令 目录(?)[+] Maven命令下载源码和ja ...

  6. MySQL 分区表原理及数据备份转移实战

    MySQL 分区表原理及数据备份转移实战 1.分区表含义 分区表定义指根据可以设置为任意大小的规则,跨文件系统分配单个表的多个部分.实际上,表的不同部分在不同的位置被存储为单独的表.用户所选择的.实现 ...

  7. 兼容各大浏览器的event获取

    event: //得到事件 function getEvent(evt){ if (evt && typeof(evt) != "undefined") { var ...

  8. lamp虚拟主机的常用配制选项

    <VirtualHost *:80>    ServerAdmin m.koobird.com    DocumentRoot "/var/www/html/xinyou&quo ...

  9. 【SqlServer】如何把本地SqlServer数据库部署到远程服务器上

    这里笔者使用的使用SqlServer2012,本机和远程环境均为Win7. 1.选中需要部署的数据库,右击>任务>分离.选中删除连接. 2.现在在左侧的表中就看不见刚才那个数据了. 3.在 ...

  10. UAT测试后上线出现问题的引起的思考

    最近公司有一个外部项目上线了,虽然我没有参与这个项目,仅仅只是作为一个旁观者,但是关于用户的UAT测试的问题,不得表达下我的看法, 在上线之前进行了近一个月的UAT测试,测试完成后进入了正式上线阶段. ...