查看: 3656|回复: 6
打印 上一主题 下一主题

[其他] unity3鼠标点击移动以及自动寻路(2)

[复制链接]

25

主题

5

听众

358

积分

设计实习生

Rank: 2

纳金币
300
精华
0

最佳新人

跳转到指定楼层
楼主
发表于 2014-1-19 16:25:05 |只看该作者 |倒序浏览
我们上节课说道如何取得目标地点的坐标,和让我们的人物转向目标点。今天我们要实现让我们的人物走向目标点,
首先分析一下,我们要实现这个效果非常简单,当旋转完成后判断人物与目标点之间的距离,当距离大于我们设置的最小误差时,使物体朝前运动,当小于和等于最小误差时停止运动。
我们要用到的知识点就是判断两个点之间的距离,这个要用到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);

        }

}

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

已有 1 人评分纳金币 收起 理由
ku + 5 很给力!

总评分: 纳金币 + 5   查看全部评分

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏1 支持支持0 反对反对0
回复

使用道具 举报

40

主题

0

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
279
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-1-19 19:37:46 |只看该作者
谢谢整理
回复

使用道具 举报

7

主题

0

听众

2518

积分

中级设计师

Rank: 5Rank: 5

纳金币
317
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2014-1-19 23:49:24 |只看该作者
希望我也可以評分啊!!!!
這篇超級無敵實用啊!!!!
做線上遊戲會更方便!!!!!
讚啦!!!!
回复

使用道具 举报

0

主题

0

听众

3569

积分

中级设计师

Rank: 5Rank: 5

纳金币
465
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2014-1-20 01:01:30 |只看该作者
真是很方便啊,太感谢了
回复

使用道具 举报

74

主题

2

听众

3549

积分

中级设计师

Rank: 5Rank: 5

纳金币
-100
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2014-1-21 19:55:57 |只看该作者
不错的教程谢谢
回复

使用道具 举报

0

主题

3

听众

578

积分

初级设计师

Rank: 3Rank: 3

纳金币
3
精华
0

最佳新人

6#
发表于 2014-1-27 21:43:55 |只看该作者
libufan 发表于 2014-1-19 19:37
谢谢整理

还不错哦哈哈。
回复

使用道具 举报

10

主题

8

听众

1866

积分

助理设计师

Rank: 4

纳金币
187
精华
0

活跃会员

7#
发表于 2014-2-7 15:46:18 |只看该作者
看看后面怎么做
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-4-19 17:22 , Processed in 0.089411 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部