位置: 编程技术 - 正文

Unity3D研究之角色控制器组件研究(unity 设置物体角度)

编辑:rootadmin
Unity3D研究之角色控制器组件研究 Unity3D 封装了一个非常好用的组件来实现第一人称视角与第三人称视角游戏开发,我们称他为角色控制器组件,几乎不用写一行代码就可以完成一切的操作,神奇吧。 使用它的方法如下,首先打开Unity游戏引擎编辑器,然后在Project视图中右键选择Import Package -> Charactr Controller(角色控制器)把它导入我们的工程中。如下图所示,第一人称与第三人称的组建已经加入Project视图中。3rd Person Controller 表示第三人称控制器,First Person Controller表示第一人称控制器。 如下图所示,我们将FirstPerson Controller拖拽入Hierarchy(层次视图)中。由于角色控制器是具有一定物理引擎的,所以一定要将它放在地形或面对象之上,否则当它接收物理效果时发现地面没有东西支撑它,它就会掉下去。然后运行游戏你就会发现和CS中的第一人称效果非常相像, W、S、A、D移动人物行走,移动鼠标更改行走的方向,空&#;键人物会跳跃。 第一人称视角的实现原理是在游戏场景中创建了一个胶囊体的游戏对象,并且给胶囊体对象身上绑定了一个摄像机,摄像机对象如下图所示,它绑定在”Person Controller”中。这时场景中默认的摄像机就会失效,可以直接删掉默认的摄像机。通过按键控制这个胶囊体移动,通过鼠标修改胶囊体的朝向,此时你就会发现第一人称视角已经完全实现,目前为止我们不需要编写一行代码。目前场景中的天空盒子我是使用skyBox组件绑定在摄像机中,因为第一人称视角的摄像机对象在”Person Controller”中,所以需要将SkyBox组件绑定在这个摄像机中,如果绑定在默认摄像机中那么你将不会看到天空的效果。 下面我们在看看第三人称视角,如下图所示,在Project视图中将3rd Person Controller拖拽入Hierarchy视图中。第三人称视角需要使用我们原有的摄像机,如果刚刚将摄像机的删掉的话。在Hierarchy视图中点击Creat->Camera 即可。然后选择摄像机,在右侧Inspector视图中设置它的tag为MainCamera,如下图所示。最后在Hierarchy视图中选择3rd Person Controller,在右侧Inspector视图中将Third Person Camera 脚本的 Camera Transform 变量绑定上刚刚创建的主摄像机,此时运行游戏后以第三人称视角移动主角行走与跳跃,摄像机永远都会在跟随在后面除非修改角色控制器组件中默认提供的源码,源码都在右侧监测面板视图中直接点开就可以查看。 下面我们学习角色控制器组件在其它模型之间的应用。首先在Hierarchy视图中创建两个Cube(立方体对象) 命名为:Cube0(发出碰撞的对象)Cube1(接收碰撞的对象),然后在Hierarchy视图中选择Cube0对象,接着Unity导航菜单栏中选择Component(组件)-Character->选择任意一个角色控制属性。 补充一句,角色控制器组件一定要在Project视图中导入,否则这里将无法绑定组件。角色控制器组件因为与碰撞组件相互冲突,所以添加角色控制器组建后 Collider组件就会消失。下面我们实现一段简单得代码,使用添加过角色控制器组件的Cube0 去碰撞未添加角色控制器组件的Cube1。using UnityEngine;using System.Collections;public class Test : MonoBehaviour {//主动碰撞的对象名称string castName = null;//接收碰撞的对象名称string receiveName = null;void OnGUI () {if(castName!= null && receiveName !=null){//设置显示的颜色为黑色GUI.color = Color.black; //显示主动碰撞的对象 与接收碰撞的对象名称 GUI.Label(new Rect(,,,),"主动碰撞的对象名称"&#;castName); GUI.Label(new Rect(,,,),"接收碰撞的对象名称"&#;receiveName);}}//角色控制器组件在与具有Collider组件对象之间的碰撞void OnControllerColliderHit(ControllerColliderHit hit){//得到接收碰撞名称GameObject hitObject = hit.collider.gameObject;//当它不是地面时间if(!hitObject.name.Equals("Terrain")){//得到主动碰撞的对象 与接收碰撞的对象名称castName = gameObject.name;receiveName = hitObject.name;}}} 将上面这段代码绑定在Cube0中,运行游戏后W、A、S、D按键来控制Cube1立方体移动。当Cube0与Cube1发生碰撞时,程序将进入方法 OnControllerColliderHit(),通过参数就可以得到接收碰撞的游戏对象也就是Cube1对象,而gameObject就是当前主动发生碰撞的Cube1。如下图所示,当两个立方体碰撞时使用GUI已经将碰撞的信息打印出来。 接着我在说说刚体组件,默认在Unity中创建的模型是不具备接收物理引擎的,除非给模型添加刚体组件或角色控制器组件。我们先说说刚体,还用奋斗的小鸟来举例子。发射小鸟以后,小鸟以一个抛物线轨迹去撞击物体,发生碰撞后被碰撞的物体会根据小鸟撞击的角度以及力度发生不同的物理效果,并且几乎是完全模拟真实的物理引擎。但是这种物理引擎的效果不能绑定在比如RPG游戏的主角身上。原因很简单,因为刚体所添加的物理引擎太过于真实以至于会影响用户的对主角的操作,举个例子比如用户在控制主角移动时他碰撞到质量较大的物体,根据真实的物理引擎会被这个物体的反弹力把主角反弹回原位。但是这个是不符合逻辑的,因为刚体组件太过于物理话了,所以我们需要给主角添加角色控制器组件,它操作起来比较灵活,更容易让我们操作主角。 下面我们给Cube1对象绑定刚体组件,选择Cube1对象然后在导航菜单栏中选择Component->physics ->Rigidbody(刚体)。我们看看下面这段代码,使用添加了角色控制器组件的Cube0 去碰撞添加刚体组件的Cube1,当他生碰撞时计算一下Cube0碰撞Cube1时的碰撞角度向量,然后通过刚体向他施加一个力把它推开。using UnityEngine;using System.Collections;public class Test : MonoBehaviour {//角色控制器组件在与具有Collider组件对象之间的碰撞void OnControllerColliderHit(ControllerColliderHit hit){//判断碰撞的对象是否具备刚体组件GameObject hitObject = hit.collider.gameObject;Rigidbody rigidbody = hitObject.rigidbody;if(rigidbody != null && !rigidbody.isKinematic){//地面也具备刚体组件,这里判断一下if(!hitObject.name.Equals("Terrain") ){rigidbody.AddForce(new Vector3(hit.moveDirection.x, 0, hit.moveDirection.z) * );}}}} 也可以将同样的脚本直接绑定在第三人称的角色控制器组件中。如下图所示,主角移动将周围的箱子都推开了。 总的来说角色控制器组件适用于 既需要感应物理引擎的支持但是又不能完全依赖与物理引擎,需要自己代码去编写一些东西的模型,所以非常适合游戏中主角对象的使用。

推荐整理分享Unity3D研究之角色控制器组件研究(unity 设置物体角度),希望有所帮助,仅作参考,欢迎阅读内容。

Unity3D研究之角色控制器组件研究(unity 设置物体角度)

文章相关热门搜索词:unity study,unity3dterrain,unity study,unity3d gui,unity研究院,unity 设置物体角度,unity 设置物体角度,unity研究院,内容如对您有帮助,希望把文章链接给更多的朋友!

Unity3d 赛车车辆各类性能算法 欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多Unity3D资源、Unity3D培训视频、Unity3D教程、Unity3D常见问题、Unity3D项目源码,【狗刨学习

TFC冯燃:手游市场细分领域新秀崛起 狗刨学习网报道/3月日上午,第十届TFC全球移动游戏大会在北京国际会议中心开幕。本届大会以寻路、跨界、融合为主题,吸引了超过位业内重量

Unity手机游戏录像、录音sdk介入(游戏陀螺WeRecSDK) 这东西不错,如果项目需要录像回放功能,可以使用。但是在介入之前建议先试试手动的

标签: unity 设置物体角度

本文链接地址:https://www.jiuchutong.com/biancheng/383600.html 转载请保留说明!

上一篇:如何在NGUI上显示粒子特效(csgo视角指令锁定枪械摇晃)

下一篇:Unity3d 赛车车辆各类性能算法(unity3d赛车游戏毕业设计)

  • 一般纳税人开普票税率是3%还是13%
  • 幼儿园会计需要做什么工作
  • 贴现怎么计算公式
  • 转出未交增值税在借方是什么意思
  • 一般纳税人适用会计制度怎么填
  • 采购商品的会计分录料未到票到
  • 个体户开电子发票需要交税吗
  • 报废的机器设备怎么处理
  • 公司购买汽车可以抵扣吗
  • 房产继承是不是谁照顾谁的
  • 建筑施工企业会计制度
  • 投标人认证证书
  • 有外经证的计税收入怎么算?
  • 耕地占用税为什么属于房地产开发成本
  • 报关单增值税税单收货人更改
  • 营改增后建筑企业财务核算
  • 未开票收入为负数如何写说明
  • 公司给员工的商业保险
  • 临时人员工资需交税吗
  • 应税行为扣除额期初余额
  • 不同类型商业分布的特征
  • 个体户收入总额是含税还是不含税
  • 附加税退税如何做账
  • 已认证的发票开红字红发要去税局吗
  • 消费满额赠礼
  • 出售已计提减值准备的固定资产
  • 股东折价入股会计分录
  • 单位卖报纸的钱算什么
  • 1697509422
  • 固定资产更新改造替换部件怎么做账务处理
  • 收到几分钱的认证费怎么做账
  • 利润表营业成本是负数是什么原因
  • 如何在windows11上安装动态壁纸
  • 资产负债表中的固定资产怎么算
  • php 时间差
  • win11键盘全部没反应
  • PHP:Memcached::getAllKeys()的用法_Memcached类
  • 退休返聘人员报销差旅费
  • 税收风险应对措施包括
  • 高新技术企业研究开发费用加计扣除
  • 工业企业在进行材料采购
  • 没有报税盘
  • 微信小程序获取地理位置
  • 【简陋Web应用2】人脸检测——基于Flask和PaddleHub
  • 遍历目录文件
  • 微服务docker打包规范
  • 员工聚餐谁出钱
  • 企业接受投资者投资,投资者超额缴入的资本
  • 织梦论坛
  • 关于python序列类型
  • 哪些无票费用能够抵扣所得税
  • 工程施工和工程结算对冲有差额的会计分录
  • 会计付租金会计分录
  • 受托加工物资如何开票
  • 运费发票抵扣要求
  • 销售退货的会计账怎么处理
  • 发票入账的时候能作废吗
  • 预计负债的初始计量
  • 银行日记账余额与银行对账单不符
  • Centos MySQL 5.7安装、升级教程
  • ubuntu怎么开启root
  • macOS 10.12.2下PDF崩溃严重怎么回事 macOS 10.12.2下PDF崩溃的原因以及解决办法
  • win8defender怎么打开
  • ubuntu浏览网页
  • c盘esd是什么文件夹
  • windows系统后台不显示QQ等软件(任务栏右侧不显示QQ图标)
  • register.exe - register进程有什么用.是什么意思
  • cocos 2d x
  • vue中父子组件如何通信的
  • jquery.cookie.js用法实例详解
  • Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社
  • node.js express koa
  • python计算π值
  • Android support v7 ActionBarActivity 过时
  • [置顶] 安卓手电筒小程序
  • js中的类和对象
  • 国家税务总局在哪
  • 关于地税代收工会经费工作实施办法
  • 成都税务二维码扫描
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设