unity3d游戏制作制作如何设置场景角色移动设备.doc

unity3d游戏制作制作如何设置场景角色移动设备.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Unity3D游戏制作 开博写Unity的东西也写了好多,但大部分都是翻译,原创很少,接下来的一段日子,我会多写一些原创文章,介绍一些在项目中积累的简单实用的技术。 ?3D横版场景的角色移动控制 一、导入场景,并在场景中加入TouchPlane TouchPlane为鼠标屏幕时的Raycast平面,如下图场景中的绿线部分。由于是横版场景,地面一般是平坦的,所以可以选择进行一个平面来作为计算鼠标投射交点。 之所以是绿线,是因为我disable该平面的MeshRender,该平面的Inspector视图如下: 值得注意的是: 1、 该平面使用Box Collider,而不用Mesh Collider,这样做的好处是可以减少碰撞的计算量; 2、 Tag设定为“Plane”,这是为了鼠标点击时的Raycast选取; 3、 Layer设定为“TouchPlane”,这样做也是为了以后进行Raycast鼠标选取操作。 二、设定角色Component 角色Inspector视图如下图所示: 一共四个Component:Animation、Rigidbody、Capsule Collider以及Move Controller。 Animation组件主要是角色的动作动画; Rigidbody组件是为了角色的移动,这个我在后面会解释,这里还有一点需要注意就是不使用“Use Gravity”,这样做一是因为角色只在地面上跑(如果你的游戏需要角色有跳跃功能,那么应该使用“Use Gravity”,二是可以在不影响效果的同时,减少模型的物理计算); Capsule Collider是碰撞器,与该文章所介绍移动内容没有关系; Move Controller是自定义的角色移动控制组件,其中MoveController.cs为其对应脚本。 三、如何移动角色 流程可设定如下: 1、 鼠标点击地面,通过屏幕位置来计算出其所在三维空间中角色移动的目的位置。 2、 将角色从当前位置移动到鼠标点击位置 这样,我们就根据上述两个步骤来完成人物的移动操作。 (1) 鼠标拾取操作 [csharp] view plaincopyprint? void?Move()?? {?? ????if(Input.GetMouseButtonDown(0))?? ????{?? ????????//?m_layerMask是指TouchPlane的layer数,这也是为什么之前在设定//TouchPlane时要设定其layer的原因,这样做是为了方便鼠标拾取 ?? ????????m_layerMask?=?1??8;?? ????????//?根据鼠标在屏幕空间的位置计算射线 ?? ????????m_ray?=?Camera.main.ScreenPointToRay(Input.mousePosition);?? ????????//?进行三维场景中的射线求交 ?? ????????if?(Physics.Raycast(m_?ray,?out?m_?hitInfo,?100,?m_layerMask))?? ????????{?? ????????????//?如果拾取的tag为“Plane”的话 ?? ????????????if?(m_hitInfo.transform.tag?==?Plane)?? ????????????{?? ????????????????//?将角色朝向目标点 ?? ????????????????LookatTargetPos(m_?hitInfo.point);?? ????????????}?? ????????}?? ????}?? }?? void Move() { if(Input.GetMouseButtonDown(0)) { // m_layerMask是指TouchPlane的layer数,这也是为什么之前在设定//TouchPlane时要设定其layer的原因,这样做是为了方便鼠标拾取 m_layerMask = 1 8; // 根据鼠标在屏幕空间的位置计算射线 m_ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 进行三维场景中的射线求交 if (Physics.Raycast(m_ ray, out m_ hitInfo, 100, m_layerMask)) { // 如果拾取的tag为“Plane”的话 if (m_hitInfo.transform.tag == Plane) { // 将角色朝向目标点 LookatTargetPos(m_ hitInfo.point);

文档评论(0)

sjatkmvor + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档