如果是在引擎里面出问题,那你的状况是不是未响应?如果是直接未响应导致最后退出的话那是你的代码里面有问题,一般是出现死循环之类的导致引擎崩溃,你仔细检查一下你的代码,是在找不出来的话,你就把觉得可能出错的地方先注释掉,再试运行,看到底哪里出错了,希望能帮到你。Update是Unity把一帧内的事情做完后再刷新画面,再重新调用一次Update,你可以把垂直同步关闭了,然后其实可以看到1秒内可以执行超过60次的Update,如果你在Update里写了太多的消耗性能的代码,你的帧率会降低,一般一帧消耗的时间是16ms左右就差不多60帧,如果超过了就能感受到卡顿。你甚至可以在Update里面写一个死循环,然后再运行游戏看看,你就会发现你会发现新世界你所说的多发几次就有反应的状况其实是你运气好,因为loop是一直循环的,所以里面的代码一遍遍一行行往下运行,比如你正好在运行SerialRead()命令前传送了,那就可以进行判断。
所以,要先判断有没有数据传输过来,再进行判断。
另外,SerialRead()使用过后,所有已经被接收的数据就会被清空!
举例:就拿你的程序来说,如果说你现在的程序加上了判断有数据的语句,然后你输了个'g'
那么,第一个if判断进行:SerialRead()此时是g,不等于k。跳过,
但是,此时缓存中的g已经被清除了,也就是说:
第二个if判断进行:SerialRead()的值是空,不等于g,也跳过。因此会失效
解决办法就是新建一个变量保存结果。
##PS:pinMode(pin,mode); mode是INPUT(数字输入)或OUTPUT(数字、模拟输出)
程序:
void setup()
{
pinMode(13,OUTPUT); //使13口成为输出口
Serialbegin(9600);
}
void loop()
{
while(Serialavailable()<=0); //这里是一个死循环,如果还有其他任务,就不能用死循环了。这里使用,意思是,如果没有数据就一直什么都不干,如果有数据,就跳出循环(下面就是判断)
char temp=char(Serialread()); //保存数据(char(),转换为字符)
if(temp=='k')
{
digitalWrite(13,HIGH);
}else if(temp=='g')
{
digitalWrite(13,LOW);
}
}
##PS:Serialavailable()命令用于判断串口是否有数据,有就返回可以读取的字节的数目,没有就是0,通常用if(Serialavailable()>0)判断。
官网解释:Get the number of bytes (characters) available for reading from the serial port This is data that's already arrived and stored in the serial receive buffer (which holds 64 bytes) available() inherits from the Stream utility class当你ReadP的方法运行玩了 这个线程就结束 了
如果想不停的运行的话 你可以在ReadP方法利放上死循环
while(true)
{
}
你是一开始就这样,还是运行某个Scene出现这样的?
如果是运行后出现的问题,那可能是代码有误引起程序崩溃,建议重新检查一下代码,有可能是某段代码的循环出现死循环导致崩溃;
如果是连打开都开不了,那建议你重新安装,而且40是很老的版本了,建议安装50或者51版本,再不济安装46的版本试试;
希望能帮到你。
我说一下我的想法,看看对你是不是用。第一,如果你的客户端socket在连接服务器的时候是在主线程做的,那么在报告连接服务器之前,下层会有多次尝试的情况,这就是会卡死的原因。我自己遇到这个问题的时候有关连接服务器的部分开了一个专门的线程来处理,没有出现卡死的情况。
第二,就是有关资源的问题。例如你的程序不小心在主线程弄了个死循环、其他资源或者脚本导致的内存泄漏等等原因都会使你的程序卡死,你看一下是不是这些东西间接导致的你的soclet卡死了。
第三,不知道你的服务器使用什么做的,服务器程序并发性怎么样,还有硬件能不能支持都需要考虑,是不是这一块卡死的。
如果不麻烦,你可以多说一点关于这个卡死的具体情况,我看看我知不知道。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)