位置: 编程技术 - 正文

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

  • 个税免申报什么时候申报
  • 建筑业印花税核定征收
  • 利息税怎么算的
  • 境外收入个人所得税抵免限额
  • 小汽车属于固定资产的什么设备
  • 物业公司广告费返还会计分录
  • 个体户转一般纳税人怎么做账
  • 小规模纳税人开票税率
  • 包工包料怎么付款流程
  • 收到订金如何开票
  • 打包材料的费用会计分录
  • 企业内部转账应注意什么
  • 劳务公司代发工资合法吗
  • 车辆购置税完税证明网上打印
  • 申报扣除的广告费支出须符合哪些条件
  • 营业收入管理也是企业财务管理的基本内容
  • 高新技术企业外债便利化
  • 社保年年递增
  • 施工单位对分包单位能罚款吗
  • 投标保证金利息计入什么科目
  • 补缴以前年度税费
  • 社保和公积金缴费基数怎么算
  • 重庆房产税政策历史
  • 电子税务局变更经营地址怎么操作
  • 安全教育经费计算方法
  • 汇算清缴时所得税费用
  • 印花税退款分录
  • 交通费用扣除标准
  • 惠普2600打印机故障排除
  • windows11如何关闭病毒和威胁防护
  • 母公司投资收益和子公司
  • mac 快速切换输入法
  • 计提短期借款利息资产增加还是减少
  • 加德满都治安状况如何
  • 房地产企业土地使用税纳税义务终止
  • 财务费用明细科目怎么写
  • 公章没有数字是什么情况
  • /t python
  • 知识图谱实现方案
  • JavaScript之Ajax-axios表单提交
  • 获取企业微信用户身份信息授权失败
  • pytorch训练函数
  • 年底计提成本
  • wordpress all in one
  • 飞机票抵扣进项税含民航发展基金吗
  • 收取的水电费怎么入账
  • 将外购商品用于个人消费
  • 企业所得税的征税对象包括( )
  • 出纳报销时应注意什么
  • 小规模纳税人免税额度是多少
  • 微信收款和支付宝收款有啥区别
  • 只收加工费
  • 其它收益和递延收益的区别
  • 货物运输企业的经营内容
  • 公司股东可以买公司股票吗
  • 投资收益科目的借贷
  • 支付宝企业账户在哪里查看
  • 简述公司利润分配的程序
  • 旅游饮食服务企业会计核算的特点包括
  • mysql oracle和sqlserver分页查询实例解析
  • macbookair无响应
  • win2008个性化
  • win7系统升级win8
  • debian怎么配置ip
  • centos安装rclone
  • 怎么隐藏不让别人发现
  • Win10装不上是什么原因
  • win8显示隐藏文件夹
  • shell(bash)下“time” 命令的输出详解
  • nodejs自启动
  • python 堆叠
  • angularjs常用总结
  • 浏览器环境下的事件循环
  • Python常见格式化字符串方法小结【百分号与format方法】
  • python动态加载py
  • 怎么运用知识点
  • 国家税务局几号上班
  • 金米财税不退款怎么办
  • 居民个人从境外公司获得分红
  • 没有代理记账资质的公司从事代理记账业务
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设