位置: 编程技术 - 正文

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

  • 出口退税率怎么算
  • 什么是试算平衡?如何进行试算平衡
  • 固定资产的折旧费用计入什么科目
  • 销售成本结转属于收入吗
  • 进项抵扣联丢了怎么办
  • 所得税申报时成本数据填错怎么办
  • 幼儿园属于小型幼儿吗
  • 已报废的固定资产
  • 担保费能抵扣吗
  • 延期缴纳税款会退回吗
  • 部门会议要点
  • 老师课时费计入什么科目
  • 主营业务税金及附加包括印花税吗
  • 无偿赠送要交税吗
  • 营改增的会计分录
  • 环保费用计入哪个科目
  • 直接快递到国外的货物如何收汇?
  • 上年留抵增值税怎么做账
  • 不同的折旧方法对经济评价有什么影响
  • 销方开具红字发票流程
  • 印花税查账征收和核定征收计算
  • 转让投资性房地产收到售价款
  • 暂估金额与发票金额的区别
  • 装修的增值税
  • windows7部分的更新安装失败怎么办?
  • 第36届大众电影百花奖直播回放
  • 苹果推送最新系统怎么弄
  • 增值税普通发票怎么开
  • 电脑avc是什么意思
  • 什么叫奖励旅游
  • 以房产投资入股应当缴纳契税
  • 企业银行贷款利率2023
  • 不动产司法拍卖税费
  • php常用数组函数和用法
  • gpts
  • vue发布时间
  • [深度学习] 基于切片辅助超推理库SAHI优化小目标识别
  • 税局通知纳税人的短信
  • 织梦如何使用
  • phpcms任意文件上传
  • phpcms api
  • 民办非企业保险优惠政策
  • 安装sqlserver2005警告iis
  • 销售赠送赠品会计处理
  • 不具有销售性质的工作
  • 公司因担保产生损失
  • 收到银行承兑如何做账
  • 将资产货物用于职工福利
  • 如何填写社会保障卡信息
  • 个人所得税专项扣除需要交钱吗
  • 实缴资本和注册资本的比例
  • 个人账户发工资扣税吗
  • sql切割字段
  • sql集合包含关系
  • 电脑win7win8win10操作系
  • windows 10预览版
  • centos6.9开启ssh服务
  • unix vi命令
  • windows8内存
  • 如何关闭自动启动项目
  • windows7里剪切小剪刀在哪里
  • win7怎么查看电池信息
  • Linux操作系统支持虚拟内存吗
  • js匿名函数作用域
  • js加载失败怎么办
  • Linux服务器无法远程连接
  • python编程中的函数
  • javascript数组去重set方法
  • 全面理解和准确把握新时代党的建设总要求心得体会
  • jquery valid()
  • jquery动态添加的元素怎么添加事件
  • javascript快速入门
  • js密码验证正则表达式
  • android电池优化设置
  • 广西国家税务总局电子税务局官网
  • 江苏税务新办企业套餐
  • 国家税务定额发票票样
  • 安徽国家税务局增值税发票查询平台
  • 建筑施工企业一级资质企业,安全生产管理
  • 加拿大鹅海关被税交多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设