unity3d 网络通讯 让人可以在范围内行走

using UnityEngine;
using System.Collections.Generic;
using System.Threading;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Text;
public class TerrainCS : MonoBehaviour {
    //Update is called once per frame
    public Vector3 Point;
    public GameObject GBAPP1;
    public Transform target;
    public float speed = 0.2f;
    public Thread MRead = null;
//Use this for initialization
    public bool IsRunning = true;
 
    public void Loop()
    {
      while (IsRunning)
     {
          //wokao 1,1,1 1 @PP1 30.0214,1.617976,45.74802 123 @
          string senddata = "POS " + POS.ps.name + " " + POS.ps.x.ToString() + "," + POS.ps.y.ToString() + "," + POS.ps.z.ToString() + " "+POS.ps.toward.ToString();
          string mygetplace = POS.Send("192.168.8.193", 4444, senddata);
    
          string[] mylist = mygetplace.Split(new string[]{"@"},System.StringSplitOptions.RemoveEmptyEntries);
          for (int i = 0; i < mylist.Length; i++)
          {
              string mycuow = mylist[i];
              string[] sparg = mycuow.Split(new string[]{" "}, System.StringSplitOptions.RemoveEmptyEntries);
              string namestr = sparg[0];
              bool havent = false;
              foreach (PPPOS PSONE in POS.LPS)
              {
                  if (PSONE.name == namestr)
                  {
                      if (sparg[0] == PSONE.name)
                      {
                          string[] zuobiao = sparg[1].Split(new string[]{","}, System.StringSplitOptions.RemoveEmptyEntries);
                          PSONE.x = float.Parse(zuobiao[0]);
                          PSONE.y = float.Parse(zuobiao[1]);
                          PSONE.z = float.Parse(zuobiao[2]);
                          PSONE.toward =  float.Parse(sparg[2]);
                          havent = true;
                      }
                  }
              }
              if (havent == false)
              {
                  try
                  {
                      print( mycuow);
                      PPPOS PPP = new PPPOS();
                      PPP.name = namestr;
                      string[] zuobiao = sparg[1].Split(new string[]{","},System.StringSplitOptions.RemoveEmptyEntries);
                      PPP.x = float.Parse(zuobiao[0]);
                      PPP.y = float.Parse(zuobiao[1]);
                      PPP.z = float.Parse(zuobiao[2]);
                      PPP.toward = float.Parse(sparg[2]);
                      POS.LPS.Add(PPP);
                  }
                  catch(System.Exception expp)
                  {
                      print(expp.Message + " " + mycuow);
                  }
                
              }
          }
          //print("线程目标:一圈结束" );
         Thread.Sleep(200);
      
      }
    }
 
void Start () {
  
        MRead = new Thread(new ThreadStart(Loop));
        MRead.Start();
}
    void OnDestroy(){
        IsRunning = false;
        if (MRead.ThreadState == ThreadState.Running)
        {
            MRead.Abort();
        }
        print("线程已经退出");
    }
    void Update()
    {


        foreach (PPPOS PSONE in POS.LPS)
        {
            if (PSONE.name != POS.ps.name)
            {
                GameObject GOB = GameObject.Find(PSONE.name); 
                Vector3 topos = new Vector3(PSONE.x, PSONE.y, PSONE.z);
              //  GOB.transform.position = Vector3.MoveTowards(GOB.transform.position, target.position, 1.0f);
             GOB.transform.position =Vector3.MoveTowards(GOB.transform.position, topos, 1.0f);
              //GOB.transform.Translate( Vector3.Slerp(GOB.transform.position, topos, 1.0f));
                GOB.transform.localEulerAngles = new Vector3(0, PSONE.toward, 0); 
                //   GBAPP1.transform.position = new Vector3(PSONE.x, PSONE.y, PSONE.z);
            }
        }
        POS.ps.x = target.position.x;
        POS.ps.y = target.position.y;
        POS.ps.z = target.position.z;
        POS.ps.toward = target.localEulerAngles.y;


 
     //   GBAPP1.transform.localEulerAngles = target.localEulerAngles;
        print("测试" + target.localEulerAngles.x.ToString() + ", " + target.localEulerAngles.y.ToString() + " ," + target.localEulerAngles.z.ToString());
        if (Input.GetMouseButton(0))
        {
            
           Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
           float step = speed * Time.deltaTime;
           //  GBAPP1.transform.position = new Vector3(ray.x, ray.y, ray.z);//new  Vector3(GBAPP1.transform.position, ray, step);
           //  GetComponent<NavMeshAgent>().destination = ray;
           // Ray ray = camera.ScreenPointToRay(Input.mousePosition);
           上面注释掉的函数:当你的脚本没有绑在mainCamera上时,又想用MainCamera做原点是使用。
           接下来我们来试一下效果到底行不行,继续写void Update()
           这段代码是我照文档改的,自己似懂非懂,请各位读者指点
           print("新目标" + POS.ps.x + "," + POS.ps.y + "," + POS.ps.z); 
           GBAPP1.transform.position = new Vector3(POS.ps.x, POS.ps.y + 1, POS.ps.z);
          // GBAPP1.transform.rotation = new Quaternion(0.00f,POS.ps.toward,0.00f,0.00f);
           //print("人物:"+GBAPP1.transform.position.x + "," + GBAPP1.transform.position.y + "," + GBAPP1.transform.position.z);
           RaycastHit hit;//
           if (Physics.Raycast(ray, out hit))//函数是对射线碰撞的检测,这个out是什么意思?
           {
               Point = hit.point;//得到碰撞点的坐标
               //  GBAPP1.transform.LookAt(Point);
               GBAPP1.transform.position = new Vector3(Point.x, Point.y + 1, Point.z);//Vector3.MoveTowards(GBAPP1.transform.position, Point, step); //
               //    print(Point);//输出一下
               //   print("新目标" + Point.x + "," + Point.y + "," + Point.z);
               //    print("人物:" + GBAPP1.transform.position.x + "," + GBAPP1.transform.position.y + "," + GBAPP1.transform.position.z); 
               //    print("I'm looking at " + hit.transform.name);//输出碰到的物体名字
           }


        }
     //   GBAPP1.transform.position = new Vector3(POS.ps.x, POS.ps.y + 1, POS.ps.z);


        if (Input.GetMouseButton(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;//
            if (Physics.Raycast(ray, out hit))//函数是对射线碰撞的检测,这个out是什么意思?
            {
              float step = speed * Time.deltaTime;
              Vector3  tf= new Vector3(hit.point.x, hit.point.y, hit.point.z);


                point3 = hit.point;
              GBAPP1.transform.LookAt(new Vector3(hit.point.x, GBAPP1.transform.position.y, hit.point.z));
         
          //   MoveTo(hit.point);
            }
         }


        float time = Time.realtimeSinceStartup;


        float distancef = Mathf.Abs(Vector3.Distance(point3, GBAPP1.transform.position));
        print("距离: " + distancef);
        if (distancef >= 0.1f)
        {
            GBAPP1.transform.Translate(Vector3.forward * Time.deltaTime * 5);
        }
    }
    Vector3 point3;
    private  int rotationSpeed = 1;
    public void MoveTo(Vector3 tf)
    {
        print("人物原本位置:" + GBAPP1.transform.position.x + "," + GBAPP1.transform.position.y + "," + GBAPP1.transform.position.z);
        print("yh  点击的位置 " + tf.x + "," + tf.y + "," + tf.z);//输出碰到的物体名字
      //  GBAPP1.transform.position = Vector3.MoveTowards(GBAPP1.transform.position, tf, Time.deltaTime * 0.3f);
    //    GBAPP1.transform.position = new Vector3(tf.x, tf.y + 1, tf.z);


        //Vector3 direction = tf - GBAPP1.transform.position;
        //direction.y = 0;
        //transform.rotation = Quaternion.Slerp(GBAPP1.transform.rotation, Quaternion.LookRotation(direction), rotationSpeed * Time.deltaTime);


        //Vector3 eulerAngles = new Vector3(0, GBAPP1.transform.eulerAngles.y, 0);
        //GBAPP1.transform.eulerAngles = eulerAngles;


        //Vector3 forward = GBAPP1.transform.TransformDirection(Vector3.forward);


        //float speedModifier = Vector3.Dot(forward, direction.normalized);


        //speedModifier = Mathf.Clamp01(speedModifier);


        //direction = forward * speed * speedModifier;


        //GBAPP1.GetComponent<CharacterController>().SimpleMove(direction);
     
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨航 AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值