写在前面:由于本人是初学unity,对其中的部分机制理解还不够深,这篇文章的主要目的是记录我的开发过程,同时向读者们征求更好的解决方法。
上一次的鼠标点击移动的文章出了一点bug所以并不完全,这篇文章会补全。
在上一篇:鼠标点击获取地面坐标 (http://blog.csdn.net/a2587539515/article/details/9390795)中我们已经输出了point这个坐标,那么鼠标控制移动就很简单了。
首先,使用unity自带的模型(使用模型需要导入资源,在建立项目的时候,根据你制作的游戏需要点击选择就好,模型就是那个修水管那个-_-||,真是的,不说做个帅的)模型中自带了动画并且会自动播放一个跑动的动画,看起来会更生动一点。我们只要模型,删除上面的所有脚本。
接下来设置相机,设置到一个你想要的位置就好,把相机拖到主角身上,让相机跟随主角移动。
按照上一篇的方法,我们会得到一个Point的点,接下来我们只要让主角走到那个点上就好啦。
首先让主角面向那个点,我们使用LookAt函数(其实一开始我想加一个转身时间,如果哪位大神有好的算法,请给我留言,不胜感激),这个函数能直接将模型转到一个点的方向。文档如下:
Rotates the transform so the forward vector points at /target/'s current position.
旋转物体,这样向前向量指向target的当前位置。简单说,
旋转物体使z轴指向目标物体。
接下了我们只需要让我们的主角向前走就好了。
这个是我的代码c#
mousedo.cs脚本,挂在maincamera上
using UnityEngine;
using System.Collections;
public class mousedo : MonoBehaviour {
public GameObject liziparfab;//一个粒子效果,用来标记鼠标点击位置
public float playerspeed;//设置人物移动速度
public GameObject player;//我们的主角
private bool touchbool=false;//用来判断鼠标是否点击
private Vector3 touchpoint;//得到点击位置(和上一篇的Point相同)
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if(touchbool)//如果点击的话
{
player.transform.LookAt(new Vector3(touchpoint.x,player.transform.position.y,touchpoint.z));//转向点击位置,注:这里的y坐标是人物的高度,防止人物旋转,有兴趣的读者可以试试也用touchpoint.y替换
if(Mathf.Abs(Vector3.Distance(touchpoint, player.transform.position))>=2.2f)//Mathf.Abs为unity中的取觉得值函数,即当人物与目标点的距离的绝对值小于2.2时为真
{
player.transform.Translate(Vector3.forward*playerspeed*Time.deltaTime);//这里让人物向前移动
}
else
touchbool=false;//这里设置为false人物就不会再移动
}
if(Input.GetMouseButton(1))
{//从这里开始和上一篇相同
Ray ray = camera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if(hit.transform.name=="Terrain")
{
touchbool=true;
}
touchpoint=hit.point;
Instantiate(liziparfab,touchpoint,hit.transform.rotation);
//这里实例化了一个粒子效果
}
}
}
}
在脚本设置好后,人物还是会出现bug(这里就是纠结了我一天的东西-_-||),比如不会下落,但是加入了刚体属性后,人物却又直接穿过地面,恶,到现在我都不明白那个Character Controller到底有什么用,总之我用box Collider替换了它,之后还有一个问题就是人物在走向斜坡时由于box collider的性质太死板,人物会翻滚,额……(其实挺欢乐的……),嘛,总之得改,于是我们在刚体属性中的Constraints限制了物体的Rotation让其不能翻滚,初步的demo总算是成型了,当然目前这个还并不十分完美,应该说是槽点巨多……呵呵,之后如果有更好的方法会来这继续更新……
就此搁笔了,如果文章对您有帮助,我深感荣幸