关于unity3D人物鼠标移动(初步实现)

写在前面:由于本人是初学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总算是成型了,当然目前这个还并不十分完美,应该说是槽点巨多……呵呵,之后如果有更好的方法会来这继续更新……


就此搁笔了,如果文章对您有帮助,我深感荣幸

 

 

你可能感兴趣的:(Unity3d教程,unity3D鼠标移动)