位置: 编程技术 - 正文

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赛车游戏毕业设计)

  • 抵扣的发票可以部分红冲吗
  • 出口退税网上服务中心app
  • 一般纳税人变成小规模 在电子税务局哪里可以找到
  • 商场采用联营方式的原因
  • 试驾车抵税
  • 财政局专利补助政策
  • 购入技术服务怎么结转成本的
  • 销售回扣分录
  • 分配利润和分配股利
  • 应收账款减值处理
  • 福利费的发票可以开什么内容
  • 在建工程全部费用化
  • 免租与转租分别什么意思
  • 个体户开普票要交企业所得税吗
  • 出纳可以做记账表格吗
  • 公司破产实收资本尚未交完股东对公司承担什么责任
  • 完工百分比法确认成本 分录
  • 现金银行存款日记账日清月结
  • 汇总会计报表和合并会计报表均是
  • 运输途中发生货物丢失
  • 安全中心总是弹出来
  • 商事账簿编制的一般规则是什么
  • 组成计税价格用来算什么
  • 怎么安装Win7系统
  • 建筑工程团体意外险
  • 进项税大于销项税怎么结转
  • 收到税局退回增值税
  • 让绿萝疯长的妙招
  • 摇篮山圣克莱尔湖国家公园
  • 发票已开不符合收入确认条件账务处理怎么做?
  • nyu数据集
  • php设计模式六大原则
  • 黄石国家公园的占地面积
  • phpemail正则
  • php引用传值
  • 企业的存货采用计划成本核算的,在资产负债表日
  • php preg_quote
  • php的中文名
  • vue修饰词
  • diff比较文件不同输出
  • 帝国cms安装教程
  • 会计利润表计算公式
  • 捐赠合同模板
  • 财务报表中的应收款项包括哪些
  • 小规模纳税人进项发票怎么做账
  • 员工持股平台合伙企业如何设立
  • 发票收到款项未付做什么凭证编制
  • 财政拨款事业单位的办公用车免征车船税吗
  • 担保公司的风险准备金在报表中如何反应
  • sql的where条件怎么写
  • sqlserver游标实例
  • win7系统安装包在哪个文件夹
  • 高速公路费如何查询
  • 安全生产费用应当专户储存专款专用专户核算
  • 办理产权证费用明细
  • 收到员工社保
  • 实收资本有关会计科目
  • 商业承兑背书后怎么办
  • 企业中的消费环境分析
  • 应收票据贷方余额
  • mysql命令导入
  • mysql安装使用教程
  • windows延缓写入失败怎么修复
  • linux支持多种平台
  • redhat linux6.5安装教程
  • win7系统如何隐藏任务栏
  • win8.1怎么设置
  • sccenter.exe - sccenter是什么进程 有什么用
  • windowsxp是什么时候正式发布
  • win8如何更改默认存储位置
  • windows累积更新失败怎么办
  • javascriptz
  • cocos2dx-3.x(三)、场景切换及可能产生的错误
  • 计算机图形学和计算机视觉的区别
  • 批处理命令在windows操作中的典型应用
  • 深入理解android内核
  • jquery自定义的方法有哪些
  • 国家电子税务局云南省电子税务局
  • 善意取得的条件和效力
  • 海关税目表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设