查看: 1866|回复: 2
打印 上一主题 下一主题

[经验分享] 关于unity3d路径跟随的代码分享

[复制链接]

1

主题

1

听众

56

积分

设计初学者

Rank: 1

纳金币
7
精华
0
跳转到指定楼层
楼主
发表于 2017-3-2 14:47:32 |只看该作者 |倒序浏览
关于如何设置简单的路径跟随;
      最简单的路径更随方式是将当前路径点设置为路点,用靠近行为产生操控力来靠近路点直到非常考究这个点;然后寻找下一个路点,设置为当前路点,重复此过程,直到最后一个路点。
  代码设置如下:using UnityEngine;using System.Collections;

public class SteeringFollowPath : Steering
{
        public GameObject[] waypoints = new GameObject[4];
        private Transform target;
        private int currentNode;
        private float arriveDistance;
        private float sqrArriveDistance;
        private int numberOfNodes;
        private Vector3 force;
        private Vector3 desiredVelocity;
        private Vehicle m_vehicle;
        private float maxSpeed;
        private bool isPlanar;
        public float slowDownDistance;

        void Start ()
        {
                numberOfNodes = waypoints.Length;

                m_vehicle = GetComponent<Vehicle>();
                maxSpeed = m_vehicle.maxSpeed;
                isPlanar = m_vehicle.isPlanar;

                currentNode = 0;
                target = waypoints[currentNode].transform;
                arriveDistance = 1.0f;
                sqrArriveDistance = arriveDistance * arriveDistance;
        }

        /*
        public override Vector3 Force()
        {
                force = new Vector3(0,0,0);
                Vector3 dist = transform.position - target.position;
                //Vector3 dist = target.position - transform.position;
                if (isPlanar)
                        dist.y = 0;


                if (currentNode == numberOfNodes - 1)
                {
                        print("now the last point!");
                        if (dist.magnitude > slowDownDistance)
                        {
                                desiredVelocity = (-dist.normalized) * maxSpeed;
                                force = desiredVelocity - m_vehicle.velocity;
                        }
                        else
                        {
                                desiredVelocity = (-dist) - m_vehicle.velocity;
                                force = desiredVelocity - m_vehicle.velocity;
                        }
                       
                        return force;
                }



                if (dist.sqrMagnitude < sqrArriveDistance)
                {
                        if ( currentNode < numberOfNodes -1)
                        {
                                currentNode ++;
                                target = waypoints[currentNode].transform;
                        }

                }

                desiredVelocity = (target.position - transform.position).normalized * maxSpeed;
                if (isPlanar)
                        desiredVelocity.y = 0;
                force = desiredVelocity - m_vehicle.velocity;

                return force;
        }*/



        public override Vector3 Force()
        {
                force = new Vector3(0,0,0);
                Vector3 dist = target.position - transform.position;
                if (isPlanar)
                        dist.y = 0;               
               
                if (currentNode == numberOfNodes - 1)
                {
                        if (dist.magnitude > slowDownDistance)
                        {
                                desiredVelocity = dist.normalized * maxSpeed;
                                force = desiredVelocity - m_vehicle.velocity;
                        }
                        else
                        {
                                desiredVelocity = dist - m_vehicle.velocity;
                                force = desiredVelocity - m_vehicle.velocity;
                        }
                }
                else
                {
                        if (dist.sqrMagnitude < sqrArriveDistance)
                        {
                                currentNode ++;
                                target = waypoints[currentNode].transform;                               
                        }
                       
                        desiredVelocity = dist.normalized * maxSpeed;
                        force = desiredVelocity - m_vehicle.velocity;               

                }
               
                return force;
               

        }

}


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

使用道具 举报

1

主题

1

听众

56

积分

设计初学者

Rank: 1

纳金币
7
精华
0
沙发
发表于 2017-3-2 14:57:00 |只看该作者
新人,求指教哈,没事来逛逛,

shown.png (48.04 KB, 下载次数: 350)

shown.png

回复

使用道具 举报

may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52336
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

板凳
发表于 2017-3-3 02:00:42 |只看该作者
哈 不錯啊 謝謝
回复

使用道具 举报

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

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-23 20:39 , Processed in 0.094696 second(s), 31 queries .

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

© 2008-2019 Narkii Inc.

回顶部