zoukankan      html  css  js  c++  java
  • unity3d之sokect通信

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using System;
    using System.Linq;
    using System.Text;
    
    using System.Net;
    using System.Net.Sockets;
    using System.IO;
    using System.Threading;
    using UnityEngine.UI;
    
    public class ss : MonoBehaviour {
        public TcpClient client;
        public BinaryReader breader;
        public BinaryWriter bwriter;
        public NetworkStream netstream;
        public float m_speed = 5f;
       
        // Use this for initialization
        void Start () {
    
            client = new TcpClient("127.0.0.1", 8139);
            netstream = client.GetStream();
            breader = new BinaryReader(netstream);
            bwriter = new BinaryWriter(netstream);
    
    
            Thread threadReceive = new Thread(new ThreadStart(ReceiveData));
            threadReceive.IsBackground = true;
            threadReceive.Start();
    
    
        }
        private void ReceiveData()
        {
            //Text text;
            string receiveSting = null;
           //text = GameObject.Find("Canvas/Text").GetComponent<Text>();
    
    
            receiveSting = breader.ReadString();
         //text.text += receiveSting;
    
        }
        // Update is called once per frame
        void Update () {
            if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.UpArrow)) //前
            {
                this.transform.Translate(Vector3.forward * m_speed * Time.deltaTime);
                bwriter.Write("w下");
                bwriter.Flush();
            }
            if (Input.GetKey(KeyCode.S) | Input.GetKey(KeyCode.DownArrow)) //后
            {
                this.transform.Translate(Vector3.forward * -m_speed * Time.deltaTime);
                bwriter.Write("s上");
                bwriter.Flush();
            }
            if (Input.GetKey(KeyCode.A) | Input.GetKey(KeyCode.LeftArrow)) //左
            {
                this.transform.Translate(Vector3.right * -m_speed * Time.deltaTime);
                bwriter.Write("a左");
                bwriter.Flush();
            }
            if (Input.GetKey(KeyCode.D) | Input.GetKey(KeyCode.RightArrow)) //右
            {
                this.transform.Translate(Vector3.right * m_speed * Time.deltaTime);
                bwriter.Write("d右");
                bwriter.Flush();
            }
        }
    }

    1.unity里不能搭建服务器端

    可以搭建客户端

    除非unity3d封装的网络游戏的类

    2.最好不要用C#封装的tcpclient等封装类,使用socket,否则与其他语言服务器对接会有问题

    3.接受服务器端的信息无法关闭线程保护来避免

    “线程间操作无效: 从不是创建控件“ ”的线程访问它”

    协程没用过

    (1)估计必须使用委托来跨线程调用; 

    才能调用其它unity3d的其他组件

    (2)设置全局变量,子线程改变全局变量

    (3)用unity3d封装的网络游戏的类


    4.unity3d不支持后台线程

    参考http://www.manew.com/thread-98363-1-1.html

    https://www.zhihu.com/question/52057063?sort=created


  • 相关阅读:
    More than 100 ABAP Interview Faq's
    SAP所有模块用户出口(User Exits)
    机器巡检基本知识
    SAP常用词汇
    ERP系统模块完全解析──工作中心
    abap基础
    topas命令详解
    企业如何处理制度、ISO质量体系与ERP系统的冲突
    在ALV表格中双击某一行记录后,显示明细记录
    Linux 命令修改图片尺寸!
  • 原文地址:https://www.cnblogs.com/fengmao31/p/13880208.html
Copyright © 2011-2022 走看看