Unity3D技术入门之JavaScript

来源:互联网 发布:耽美网络剧百度云链接 编辑:程序博客网 时间:2024/06/05 23:01

       刚刚接触unity3D游戏引擎,这里做点学习笔记。下面是我建立的简单场景,左侧的Hierarchy(层次)视图里显示了场景中所有游戏对象,这些基本对象可以从Create下拉菜单里创建。


       当你点击某个对象,比如立方体Cube时,在右侧Inspector(监视)中可以看到Cube对象的详细信息,比如它的位置信息、表面材质信息,然后可以在其中修改。下方的Project视图中的Assets(资源)里显示了游戏中所有资源,这里注意与Hierarchy视图里对象的区别,我们的游戏脚本放在Assets里。刚开始学习unity3d我会反感那些脚本,总希望不需要写代码就能创建自己的游戏,但后来发现,在Unity3D中不写脚本是不可能的,脚本完全就是一切的逻辑文章出处【狗刨学习网】。

 

 


       要在Scene(场景)视图里创建物体,可以在左侧的Hierarchy视图里点击Create下拉菜单,选择创建即可,我这里创建了一个平面Plane、两个立方体CubeMyCube、一个摄像机MainCamera、一个圆柱体Cylinder。在Scene中,按住ALT键,用鼠标就可以旋转整个场景;按住鼠标中键,可以拖动场景视图;用鼠标滚轮可以缩放视图。

       要给场景中的物体上色,比如平面Plane,只需要点击对象Plane,然后在右侧Inspector中做些设置即可。那么如何改变物体表面的颜色了,是直接修改吗?不是,有点图像学基础的都知道,要改变表面颜色,实际要改变的是物体的表面材质,材质中可以包含各种复杂信息。要创建材质,可以在Assets视图中点击右键,选择Create->Material即可,然后在Inspector中修改Main Color属性即可。最后点击Plane对象,在右侧点击MaterialsElement0最右边的小圈,选择想要的材质,也可以直接把Assets里的材质拖放到Element0上即可。

       Create里只能创建一些基本模型,下面学习用JavaScript脚本在场景中创建游戏界面元素,比如按钮、文本框、图片等。我看的书是《unity3d游戏开发》,最开始讲的就是JavaScript,后面会讲C#作为脚本语言。下面是我自己的一个练习的截图。

 


       界面有点乱,也懒得改了。最上面的是几个旋转视图的按钮,左边绿色的文字,接着是一幅图片、滑动条。下方是输入框、图片按钮。比较显眼的是3个窗口,窗口里的元素坐标都是相对的。我在代码中都有详细的注释,也不需要做什么说明了。要使用脚本,先在Assets里创建javaScript,打开编辑器复制我的代码。然后点击左侧的Main Camera对象,把脚本文件拖动到右侧中即可。可能会出现编译错误,无法运行,那是因为我没有提供材质、图片。点击Main Camera对象,点击右侧Inspector里的脚本文件,展开它的属性,会看到Image TextureButton Texture这些变量,凡是在JavaScript里的public修饰的变量就会出现在这里,要给这些变量赋值才可以正常运行。


        我这里需要赋值的是Image TextureButton TextureView Texture 0,这三个都是图片,从Assets里拖放三个图片赋给它们即可。下面还有一个My Skin变量,是Unity里的皮肤,比如决定按钮的颜色,可以被很多按钮使用,也是在Assets里直接创建即可。对于Unity3D里的GUI控件,简单的有Label(文本)、Button(按钮)、TextField(文本框)、ToolBar(工具栏)、Slider(滑块)、ScrollView(滚动显示区域)等。


       群组视图(Group View控件):将多个视图放在一个群组中,群组视图里的坐标都是相对的。修改群组视图坐标,里面所有元素坐标都会变化。

 

 

       GUILayout


       相对与GUI控件,GUILayout控件的创建不需要设定显示区域,不指定具体坐标,可以动态适应窗口。比如绘制一个按钮,如果用GUI控件,需要指定按钮的长度,如果按钮上的文字长度超出了按钮长度,超出部分便无法显示了。如果使用GUILayout,便可以动态自适应。


       帧动画:


       在加载图片动画时,我使用了Resources.Load()这样的方法,注意需要在Assets里创建Resources目录,然后把动画资源放在其中。


       刚体(Rigidbody):


       Unity中可以给对象添加这个属性,比如立方体,添加后的立方体可以和其它物体产生碰撞反应,变成了一个具有物理属性的物体,比如可以自由裸体运动。要添加这个属性,先选择对象,然后在菜单栏里选择Component->Physics->Rigidbody即可。


   代码如下:


 var str1:String;//外部字符串

 

4var imageTexture:Texture;//外部贴图

 

5var buttonTexture:Texture2D;//按纽图片

 

6var viewTexture0:Texture2D;

 

7var TranslateSpeed=20;//模型移动速度

 

8var RotateSpeed=1000;//模型旋转速度

 

9

 

10private var username:String;//用户名

 

11private varpassword:String;//密码

 

12

 

13private var imageWidth:int;//图片宽度

 

14private var imageHeight:int;

 

15private var screenWidth:int;//屏幕宽度

 

16private var screenHeight:int;

 

17

 

18private varselect:int;//工具栏选择按钮的ID

 

19private var barResource:String[];//工具栏按钮字符串

 

20

 

21var verticalValue:int=0;//纵向滑动条数值

 

22var horizontalValue:float=0.0f;//横向滑动条数值

 

23

 

24var scrollPosition:Vector2;//滚动条位置

 

25

 

26var mySkin:GUISkin;//自定义皮肤

 

27

 

28private varchoose:boolean=false;//单选控件是否选中

 

29

 

30//默认窗口位置

 

31private var window0:Rect=Rect(770,100,250,100);

 

32private var window1:Rect=Rect(600,200,400,300);

 

33

 

34var winArrayList=newArrayList();//用于存储窗口

 

35

 

36

 

37private var animUp:Object[];//动画数组

 

38private var animDown:Object[];

 

39private var animLeft:Object[];

 

40private var animRight:Object[];

 

41private var map:Texture2D;//地图贴图

 

42private var tex:Object[];//当前人物动画

 

43private var x:int=400;//人物的x坐标

 

44private var y:int=400;//人物的y坐标

 

45private var nowFrame:int;//帧序列

 

46private var mFrameCount:int;//帧总数

 

47private var fps:float=10;//一秒多少帧

 

48private var time:float=0;//限制帧的时间

 

49

 

50//程序开始函数,变量初始化

 

51function Start(){

 

52    screenWidth=Screen.width;

 

53    screenHeight=Screen.height;

 

54    imageWidth=imageTexture.width;

 

55    imageHeight=imageTexture.height;

 

56    str1=“点击click”;

 

57    username=“”;

 

58    password=“”;

 

59    select=0;

 

60    barResource=[“Toolbar1”,“Toolbar2”,“Toolbar3”];

 

61    scrollPosition[0]=50;

 

62    scrollPosition[1]=50;

 

63

 

64    //添加一个窗口

 

65    winArrayList.Add(Rect(winArrayList.Count*100,400,150,100));

 

66

 

67    //得到帧动画中的所有图片资源

 

68    animUp=Resources.LoadAll(“up”);

 

69    animDown=Resources.LoadAll(“down”);

 

70    animLeft=Resources.LoadAll(“left”);

 

71    animRight=Resources.LoadAll(“right”);

 

72    tex=animUp;

 

73}

 

74

 

75//每一帧都要执行的更新

 

76function Update(){

 

77

 

78}

 

79

 

80//绘制GUI界面组件

 

81function OnGUI()

 

82{

 

83    //设置GUI背景颜色

 

84    GUI.backgroundColor=Color.red;

 

85    //设置一个按钮,规定一个矩形区域

 

86    if(GUI.Button(Rect(10,10,70,30),“向左旋转”))

 

87    {

 

88        //transform为当前绑定模型的变换对象,设置模型旋转

 

89        //Time.deltaTime:表示完成最后一帧的时间,单位为秒

 

90        transform.Rotate(Vector3.up*Time.deltaTime*(-RotateSpeed));

 

91    }

 

92    if(GUI.Button(Rect(170,10,70,30),“向右旋转”))

 

93    {

 

94        transform.Rotate(Vector3.up*Time.deltaTime*RotateSpeed);

 

95    }

 

96    if(GUI.Button(Rect(90,10,70,30),“向前移动”))

 

97    {

 

98        transform.Translate(Vector3.forward*Time.deltaTime*TranslateS

 

0 0
原创粉丝点击