查看: 1435|回复: 0
打印 上一主题 下一主题

[其他] 测试两点之间距离的代码

[复制链接]

9903

主题

126

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
53488
精华
316

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

跳转到指定楼层
楼主
发表于 2016-1-18 05:44:37 |只看该作者 |倒序浏览
方法一:只有线  没有具体距离
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;

  4. public class CeJu : MonoBehaviour
  5. {

  6.     private GameObject[] gameObj = new GameObject[2];
  7.     int i = 0;
  8.     void Update()
  9.     {
  10.         //按下鼠标左键时响应该方法  
  11.         if (Input.GetMouseButtonDown(0))
  12.         {
  13.             //创建一条射线一摄像机为原点  
  14.             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  15.             RaycastHit hit;
  16.             //射线碰撞到游戏地形时  
  17.             if (Physics.Raycast(ray, out hit))
  18.             {
  19.                 //在点击的位置实例出一个Cube
  20.                 Vector3 post = new Vector3(hit.point.x, hit.point.y + 0.5f, hit.point.z);
  21.                 GameObject obj = Instantiate(Resources.Load("1"), hit.point, Quaternion.identity) as GameObject;
  22.                 obj.transform.position = post;
  23.                 gameObj[i] = obj;
  24.                 if (i == 1)
  25.                 {
  26.                     //两点之间实例出一条线
  27.                     LineRenderer linerenderer = obj.AddComponent<LineRenderer>();
  28.                     linerenderer.SetPosition(0, gameObj[0].transform.position);
  29.                     linerenderer.SetPosition(1, gameObj[1].transform.position);
  30.                     linerenderer.SetWidth(0.1f,0.1f);
  31.                     i = -1;
  32.                 }
  33.                 i++;
  34.             }
  35.         }
  36.     }
  37. }
复制代码
方法二:计算出距离
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;

  4. public class Taggle : MonoBehaviour
  5. {
  6.     //定义一个位置的集合
  7.     List<Vector3> PointTransform = new List<Vector3>();
  8.     //定义一个路标
  9.     public GameObject LuBiao;
  10.     int PositionCount;
  11.     //定义一个实例化出物体的集合
  12.     List<GameObject> InstateGameObject = new List<GameObject>();
  13.     public GameObject Line;
  14.     //连线集合
  15.     List<GameObject> LineList = new List<GameObject>();
  16.     // Use this for initialization
  17.     void Start()
  18.     {
  19.         PositionCount = 0;
  20.     }

  21.     // Update is called once per frame
  22.     void Update()
  23.     {
  24.         if (Input.GetMouseButtonDown(0))
  25.         {
  26.             //从摄像机发出到点击坐标的射线
  27.             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  28.             RaycastHit hitInfo;
  29.             if (Physics.Raycast(ray, out hitInfo))
  30.             {
  31.                 //划出射线,只有在scene视图中才能看到
  32.                 Debug.DrawLine(ray.origin, hitInfo.point);
  33.                 Vector3 RemeberPosition = hitInfo.point;
  34.                 //添加到位置集合中
  35.                 PointTransform.Add(RemeberPosition);
  36.                 GameObject gam = Instantiate(LuBiao, RemeberPosition, Quaternion.identity) as GameObject;
  37.                 //添加到实例标记点的的集合中
  38.                 InstateGameObject.Add(gam);
  39.                 //定义的初始值小雨实例出来的标记物体个数  并且满足实例出来的物体数量不小于或等与一个
  40.                 if (PositionCount < InstateGameObject.Count && InstateGameObject.Count > 1)
  41.                 {
  42.                     //计算两个点的中点坐标
  43.                     Vector3 tempPos = (InstateGameObject[PositionCount].transform.position + InstateGameObject[PositionCount + 1].transform.position) / 2;
  44.                     //在两个点的中点处实例化线条,因为对物体的缩放,是从中心向两边延伸
  45.                     GameObject go = (GameObject)Instantiate(Line, tempPos, Quaternion.identity);

  46.                     go.name = "" + PositionCount;
  47.                     //实例出线条并添加到连线的集合中
  48.                     LineList.Add(go);
  49.                     //改变线条的朝向
  50.                     go.transform.right = (go.transform.position - InstateGameObject[PositionCount].transform.position).normalized;
  51.                     //计算两点的距离
  52.                     float distance = Vector3.Distance(InstateGameObject[PositionCount].transform.position, InstateGameObject[PositionCount + 1].transform.position);
  53.                     //延长线条,连接两点。
  54.                     go.transform.localScale = new Vector3(distance, 0.01f, 0.01f);
  55.                     PositionCount++;
  56.                 }
  57.             }
  58.         }




  59.     }
  60.     void OnGUI()
  61.     {
  62.         if (GUI.Button(new Rect(10, 10, 50, 50), "测量"))
  63.         {
  64.             //初始距离为0
  65.             float Number = 0;
  66.             //遍历循环位置的集合
  67.             for (int i = 1; i < PointTransform.Count; i++)
  68.             {
  69.                 //当满足位置集合不为空
  70.                 if (PointTransform[i] != null && PointTransform[i - 1] != null)
  71.                 {
  72.                     //计算出长度
  73.                     float a = Vector3.Distance(PointTransform[i], PointTransform[i - 1]);
  74.                     //
  75.                     Number += a;
  76.                     Debug.Log(i + "      " + a);//其中i表是第几段线条  a表示长度
  77.                 }
  78.             }
  79.             //打印出距离的总长度
  80.             Debug.Log(Number);
  81.             //清除所有的位置
  82.             PointTransform.Clear();
  83.             //销毁所有的标记物体
  84.             for (int i = 0; i < InstateGameObject.Count; i++)
  85.             {
  86.                 Destroy(InstateGameObject[i]);
  87.             }
  88.             //销毁所有的线条
  89.             for (int i = 0; i < LineList.Count; i++)
  90.             {
  91.                 Destroy(LineList[i]);
  92.             }
  93.             //清除所有线条
  94.             InstateGameObject.Clear();
  95.         }
  96.     }
  97. }

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

使用道具 举报

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

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

GMT+8, 2024-11-1 07:07 , Processed in 0.090484 second(s), 29 queries .

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

© 2008-2019 Narkii Inc.

回顶部