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);
}
}
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);
}
}
相关文章推荐
- Unity3d网络游戏Socket通讯
- Unity3d网络游戏Socket通讯
- 知道ip地址和子网掩码后可以算出网络地址、广播地址、地址范围、本网主机数
- 某A类网络10.0.0.0的子网掩码255.224.0.0,请确定可以划分的子网个数,写出每个子网的子网号及每个子网的主机范围。
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- 应用层的通讯安全--网络大典
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)----使用方法
- 用C#实现基于TCP协议的网络通讯
- 用C++ Builder中的TServerSocket,TClientSocket来写网络通讯程序
- 用C#实现基于用C#实现基于TCP协议的网络通讯
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)----使用方法
- 网络游戏通讯模型初探
- Visual C++ 网络与通讯
- 可以玩网络游戏的代理客户端-Permeo Security Driver
- Windows Sockets API实现网络异步通讯