教程作者: | 转载自互联网 (如有问题请短消息联系作者或发表回复) |
---|
本系列文章由 Amazonzx 编写,欢迎转载,转载请注明出处。
http://blog.csdn.net/amazonzx/article/details/7824112
开博写Unity的东西也写了好多,但大部分都是翻译,原创很少,接下来的一段日子,我会多写一些原创文章,介绍一些在项目中积累的简单实用的技术。
一、导入场景,并在场景中加入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 plaincopy
(2) 角色移动操作
[csharp] view plaincopy
MoveController.cs中的Update函数如下:
[csharp] view plaincopy
四、实现效果
通过以上设置即可控制角色在横版场景中的移动,效果图如下:
五、小结
1、该做法只适合平面的地表,如果是有起伏的,则需要使用Navmesh或其他trick来解决。
2、该做法并没有让角色与地面去做碰撞,因为本身是平面的,所以直接限定其y值,不让其使用重力作用,这样的好处可以避免不必要的物理计算。
3、角色的移动可以不用rigidbody来搞定,一般的做法还是通过Time.deltatime来一帧一帧来计算步长、移动物体,这里只是给出另外一种方法,原来其实是一样的。
|