(1)创建一个空对象,设置空对象的位置,如图1;创建一个Sphere对象,然后拖曳到空对象上,使其成为空对象的子对象,设置Sphere对象的位置和大小,如图2;
图1
图2
(2)创建一个Script文件夹。创建一个脚本,命名为XuanZhuan。将创建的XuanZhuan脚本拖曳到空对象上。
脚本代码如下:
该脚本主要功能为使小球围绕空对象不断旋转。
(3)创建用于进行大量计算 的脚本。在Script文件夹下创建一个脚本,命名为XianShi。将创建的XianShi脚本拖曳到主摄像机对象上。
代码如下:
using System.Collections;
using UnityEngine;
using System.Threading;
using System;
public class XianShi : MonoBehaviour {
public GUIStyle myStyle;
object n=new object();
long shu=0;
long xian=0;
public float x,y,x1,y1;
public float xx,yy,xx1,yy1;
public float i,j,i1,j1;
public float ii,jj,ii1,jj1;
void Update () {
lock (n) {
xian = shu;
}
}
void OnGUI(){
GUI.skin.button.fontSize=50;
GUI.Label(new Rect(xx,yy,xx1,yy1),xian.ToString(),myStyle);
if(GUI.Button(new Rect(x,y,x1,y1),"另起线程")){
Thread a=new Thread(run);
a.Start();
}
if(GUI.Button(new Rect(i,j,i1,j1),"主线程")){
run();
}
if(GUI.Button(new Rect(ii,jj,ii1,jj1),"归零")){
lock(n){
shu=0;
}
}
}
void run()
{
long te=0;
for(long i=0;i<100000000;i++)
te+=1;
lock(n)
{
shu=te;
}
}
void run1(object o)
{
int a = (int)o;
int c = Convert.ToInt32 (o);
long te = 0;
for(long i=0;i<100000000;i++)
{
te += 1;
}
lock(n)
{
shu=te;
}
}
}
Unity场景Main Camera对象Inspector界面下改一下参数。各参数默认的数值为0。不改的话运行时你看不到那三个“主线程”,“另起线程”,“归零”,按钮。
(4)完成。单价运行按钮。
首先单击“主线程“按钮,发现整个游戏界面卡几秒钟,小球停顿一下再转动。这是因为大量计算长时间占用主线程使游戏卡顿。计算完成后小球恢复转动,屏幕上显示出计算结果。
然后单击“归零”按钮使数据归零,再单击“另起线程“按钮,发现游戏正常运行,小球不断转动,这是因为大量计算另起线程进行不占用主线程。过会儿大量计算完成后屏幕上显示出计算结果。