纳金网

标题: unity3鼠标点击移动以及自动寻路(2) [打印本页]

作者: paopao    时间: 2014-1-19 16:25
标题: unity3鼠标点击移动以及自动寻路(2)
我们上节课说道如何取得目标地点的坐标,和让我们的人物转向目标点。今天我们要实现让我们的人物走向目标点,
首先分析一下,我们要实现这个效果非常简单,当旋转完成后判断人物与目标点之间的距离,当距离大于我们设置的最小误差时,使物体朝前运动,当小于和等于最小误差时停止运动。
我们要用到的知识点就是判断两个点之间的距离,这个要用到Vector3 Distance (a : Vector3, b : Vector3) 返回a和b之间的距离
我们只需要的将a换成人物坐标将b换成我们的目标点坐标就OK了
代码如下:
using UnityEngine;
using System.Collections;

public class Pathfinding : MonoBehaviour {
        //public Transform from;
        public Transform to;
        public float speed = 5F;
        //游戏主角
        private GameObject play;
        RaycastHit hit;
        //距离差值
        float dist;
        //角度差值
        float angle;
        void Start ()
        {
                play=GameObject.Find("person");
                dist=0.5f;
        }
        // Use this for initialization
        void Update ()
        {
               
                if(Input.GetMouseButtonDown(0))
                {
                        Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);               
                        if (Physics.Raycast(ray, out hit, 100))
                        {
                               
                                if(hit.collider.gameObject.name=="floor")
                                {
                                        Debug.Log(hit.point);
                                       
                                        to.transform.parent = null;
                                        to.LookAt(hit.point);
                                        //得到玩家至碰撞点的距离差值
                                        dist=Vector3.Distance(play.transform.position, hit.point);
                                        //得到角度差值
                                        angle=Vector3.Angle(play.transform.forward,to.forward);
                                }
                        }
                }
               
                if(angle<2.0f&&dist>0.5f&&hit.collider.gameObject.name=="floor")
                {
                        //实时得到玩家至碰撞点的距离差值
                        dist=Vector3.Distance(play.transform.position, hit.point);
                        to.transform.parent=play.transform;
                        to.transform.localPosition = new Vector3(0, 0, 0);
                        move();


                }
                else
                        play.transform.rotation = Quaternion.Slerp(play.transform.rotation, to.rotation, speed);
                    //实时得到角度差值
                        angle=Vector3.Angle(play.transform.forward,to.forward);
                        //play.transform.position = Vector3.Lerp(play.transform.position, hit.point, Time.time);

        }
        void move()
        {
                //玩家向前移动
                play.transform.Translate(Vector3.forward * Time.deltaTime);

        }

}

将代码附加到我们的主相机上,运行游戏。效果还不错吧。这样就实现了一个简单的鼠标自动寻路功能。


作者: libufan    时间: 2014-1-19 19:37
谢谢整理
作者: wusky751023    时间: 2014-1-19 23:49
希望我也可以評分啊!!!!
這篇超級無敵實用啊!!!!
做線上遊戲會更方便!!!!!
讚啦!!!!
作者: thebat    时间: 2014-1-20 01:01
真是很方便啊,太感谢了
作者: huhumark    时间: 2014-1-21 19:55
不错的教程谢谢
作者: 相思赋予谁    时间: 2014-1-27 21:43
libufan 发表于 2014-1-19 19:37
谢谢整理

还不错哦哈哈。
作者: pz789as    时间: 2014-2-7 15:46
看看后面怎么做




欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5