您的位置:首页 > 理论基础 > 计算机网络

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

2015-02-01 06:57 197 查看
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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: