Unity 3D学习之路

Unity目前的最新版本是5.5.2,可横跨9种主要游戏平台,包括Web平台,PC平台,Mac平台,IOS平台,Flash平台,Android平台,Xbox 360平台,PS3平台和Wii平台。

pdf源码下载:http://www.ituring.com.cn/book/1015
引擎下载:http://unity3d.com/unity/download/

Unity5.5系统的标准资源包导入,在Project右键,”Import Package”-“Characters”
标准资源包

170330

编辑器的结构

1.Unity中包含5大视图,分别是Scene(场景)视图、Game(游戏)视图、Hierarchy(层次)视图、Project(项目)视图和Inspector(监测)视图。视图与视图之间保持非常紧密的联系。
视图介绍1
视图介绍2
视图样本

Project视图

project视图
project_create
创建完资源后,它将保存在工程根目录下的“Assets”文件夹中。

Hierarchy视图

hierarchy视图
hierarchy_create1
hierarchy_create2

Inspector视图

Inspector视图
Inspector视图元素1
Inspector视图元素2
player_settings

Scene视图

scene视图1
scene视图2
scene视图3
移动视图,快捷健分别是QWER
移动视图
场景工具
场景工具

Game视图

Game视图

170331

运行游戏

运行游戏

导出和导入

导出和导入

第一个游戏实例

Unity语言
游戏效果:
第一个程序

//模型移动速度
var TranslateSpeed = 20;
//模型旋转速度
var RotateSpeed = 1000;

function OnGUI() {
    //设置GUI背景颜色
    GUI.backgroundColor = Color.red;
    if (GUI.Button(Rect(10, 10, 70, 30), "向左旋转")) {
        //向左旋转模型
        transform.Rotate(Vector3.up * Time.deltaTime * (-RotateSpeed));
    }
    if (GUI.Button(Rect(90, 10, 70, 30), "向前移动")) {
        //向前移动模型
        transform.Translate(Vector3.forward * Time.deltaTime * TranslateSpeed);
    }
    if (GUI.Button(Rect(170, 10, 70, 30), "向右旋转")) {
        //向右旋转模型
        transform.Rotate(Vector3.up * Time.deltaTime * RotateSpeed);
    }
    if (GUI.Button(Rect(90, 50, 70, 30), "向后移动")) {
        //向后移动模型
        transform.Translate(Vector3.forward * Time.deltaTime * (-TranslateSpeed));
    }
    if (GUI.Button(Rect(10, 50, 70, 30), "向左移动")) {
        //向左移动模型
        transform.Translate(Vector3.right * Time.deltaTime * (-TranslateSpeed));
    }
    if (GUI.Button(Rect(170, 50, 70, 30), "向右移动")) {
        //向右移动模型
        transform.Translate(Vector3.right * Time.deltaTime * TranslateSpeed);
    }

    //显示模型位置信息
    GUI.Label(Rect(250, 10, 200, 30), "模型的位置" + transform.position);
    //显示模型旋转信息
    GUI.Label(Rect(250, 50, 200, 30), "模型的旋转" + transform.rotation);
}

function Start () {

}

function Update () {
    //该方法每一帧都会调用
}

GUI方法1
GUI方法2

GUI高级控件

Label


//接收外部赋值字符串
var str:String;
//接收外部赋值贴图
var imageTexture:Texture;
//贴图宽度
private var imageWidth: int;
//贴图高度
private var imageHeight: int;
//当前屏幕宽度
private var screenWidth: int;
//当前屏幕高度
private var screenHeight: int;

function Start() {
   
    //只执行一次,界面初始化

    //得到屏幕宽高
    screenWidth = Screen.width;
    screenHeight = Screen.height;
    //得到图片宽高
    imageWidth = imageTexture.width;
    imageHeight = imageTexture.height;
}

function OnGUI() {
   
    //界面绘制方法,所有GUI的绘制都需要在这个方法中实现

    //将文字内容显示在屏幕中
    GUI.Label(Rect(100, 10, 100, 30), str);
    GUI.Label(Rect(100, 40, 100, 30), "当前屏幕宽:" + screenWidth);
    GUI.Label(Rect(100, 80, 100, 30), "当前屏幕高:" + screenHeight);
    //将贴图显示在屏幕中
    GUI.Label(Rect(100,120,imageWidth,imageHeight),imageTexture);
}

function Update () {
   

}

声明变量

Button

//按钮贴图
var buttonTexture : Texture2D;
//提示信息
private var str:String;
//时间计数器
private var frameTime:int;

function Start () {
   
    //初始化赋值
    str = "请您点击按钮"; 
}

function Update () {
   

}

function OnGUI(){
   
    //显示提示信息内容
    GUI.Label(Rect(10,10,Screen.width,30),str);
    if(GUI.Button(Rect(10,50,buttonTexture.width,buttonTexture.height),buttonTexture)){
        //点击按钮修改提示信息
        str = "您点击了图片按钮";
    }
    //设置按钮中文字的颜色
    GUI.color = Color.green;
    //设置按钮的背景色
    GUI.backgroundColor = Color.red;

    if(GUI.Button(Rect(10,200,70,30),"文字按钮")){
        //点击按钮修改提示信息
        str = "您点击了文字按钮";
    }

    //设置按钮中文字的颜色
    GUI.color = Color.yellow;
    //设置按钮的背景色
    GUI.backgroundColor = Color.black;

    if(GUI.Repeat(Rect(10,250,100,30),"按钮按下中")){
        //点击按钮修改提示信息
        str = "按钮按下中的时间:"+frameTime;
        //时间计数器
        frameTime++;
    }
}

TextField方法

TextField

该实例获取用户输入的用户名和密码并显示

//用户名
private var editUsername:String;
//密码
private var editPassword:String;
//提示信息
private var editShow:String;

function Start () {
   
    editShow = "请您输入正确的用户名和密码";
    editUsername = "请输入用户名";
    editPassword = "请输入密码";
}

function Update () {
   

}

function OnGUI(){
   
    //显示提示信息内容
    GUI.Label(Rect(10,10,Screen.width,30),editShow);

    if(GUI.Button(Rect(10,120,100,50),"登录")){
        //点击按钮修改提示信息
        editShow = "您输入的用户名为:"+editUsername + "您输入的密码为:"+editPassword;
    }

    //编辑框提示信息
    GUI.Label(Rect(10,40,50,30),"用户名");
    GUI.Label(Rect(10,80,50,30),"密码");

    //获取输入框输入的内容
    editUsername = GUI.TextField(Rect(60,40,200,30),editUsername,15);
    editPassword = GUI.PasswordField(Rect(60,80,200,30),editPassword,"*"[0],15);
}

TextField方法

ToolBar

该实例通过点击不同按钮来回切换界面显示的内容,并且内容以单选项的形式呈现出来

//工具栏选择按钮的ID
private var select:int;
//工具栏显示按钮的字符串
private var barResource:String[];
//选择按钮是否被按下
private var selectToggle0:boolean;
private var selectToggle1:boolean;

function Start () {
    //初始化
    select = 0;
    barResource = ["第一个工具栏","第二个工具栏","第三个工具栏","第四个工具栏"];
    selectToggle0 = false;
    selectToggle1 = false;
}

function Update () {

}

function OnGUI(){
    //备份上一次工具栏选择的ID
    var oldSelect = select;
    //重新计算本次工具栏选择的ID
    select = GUI.Toolbar(Rect(10,10,barResource.length*100,30),select,barResource);
    //如果两次选择的是不同的工具栏,将选择按钮全部释放掉
    if(oldSelect!=select){
        selectToggle0 = false;
        selectToggle1 = false;
    }

    //根据工具栏选择的ID显示不同的信息
    switch(select){
        case 0:
            selectToggle0 = GUI.Toggle(Rect(10,50,150,30),selectToggle0,"第一个工具栏单项选择——1");
            selectToggle1 = GUI.Toggle(Rect(10,80,150,30),selectToggle1,"第一个工具栏单项选择——2");
            break;
        case 1:
            selectToggle0 = GUI.Toggle(Rect(10,50,150,30),selectToggle0,"第二个工具栏单项选择——1");
            selectToggle1 = GUI.Toggle(Rect(10,80,150,30),selectToggle1,"第二个工具栏单项选择——2");
            break;
        case 2:
            selectToggle0 = GUI.Toggle(Rect(10,50,150,30),selectToggle0,"第三个工具栏单项选择——1");
            selectToggle1 = GUI.Toggle(Rect(10,80,150,30),selectToggle1,"第三个工具栏单项选择——2");
            break;
        case 3:
            selectToggle0 = GUI.Toggle(Rect(10,50,150,30),selectToggle0,"第四个工具栏单项选择——1");
            selectToggle1 = GUI.Toggle(Rect(10,80,150,30),selectToggle1,"第四个工具栏单项选择——2");
            break;
    }
}

ToolBar方法

Slider

//纵向滑动条数值
var verticalValue:int = 0;
//横向滑动条数值
var horizontalValue:float = 0.0f;

function OnGUI(){
   
    //计算滑动速度
    verticalValue = GUI.VerticalSlider(Rect(25,25,30,100),verticalValue,100,0);
    horizontalValue = GUI.HorizontalSlider(Rect(50,25,100,30),horizontalValue,0.0f,100.0f);
    //将滑动进度显示在屏幕中
    GUI.Label(Rect(10,150,Screen.width,30),"纵向滑动条当前进度:"+verticalValue+"%");
    GUI.Label(Rect(10,180,Screen.width,30),"横向滑动条当前进度:"+horizontalValue+"%");
}

function Start () {
   

}

function Update () {
   

}

slider方法

ScrollView

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

function Start () {
   
    //初始化滚动条位置
    scrollPosition[0] = 50;
    scrollPosition[1] = 50;
}

function OnGUI(){
   
    //开始滚动视图
    scrollPosition = GUI.BeginScrollView(Rect(0,0,200,200),scrollPosition,Rect(0,0,Screen.width,300),true,true);

    GUI.Label(Rect(100,40,Screen.width,30),"测试滚动视图,测试滚动视图,测试滚动视图,测试滚动视图,测试滚动视图。");

    //结束滚动条视图
    GUI.EndScrollView();
}

function Update () {
   

}

ScrollView方法1
ScrollView方法2

170401

GUI高级控件

群组视图

//贴图
var viewTexture0:Texture2D;
var viewTexture1:Texture2D;
function Start () {
   

}

function OnGUI(){
   
    //开始这个群组
    GUI.BeginGroup(new Rect(10,50,200,400));
    //显示贴图,坐标为相对群组的点(10,50)的坐标
    GUI.DrawTexture(Rect(10,20,viewTexture0.width,viewTexture0.height),viewTexture0);
    //标签提示信息
    GUI.Label(Rect(10,150,100,40),"群组视图1");
    //按钮
    GUI.Button(Rect(10,190,100,40),"按钮");
    //结束这个群组
    GUI.EndGroup();

    //开始这个群组
    GUI.BeginGroup(new Rect(300,0,500,400));
    //显示贴图,坐标为相对群组的点(300,0)的坐标
    GUI.DrawTexture(Rect(10,20,viewTexture1.width,viewTexture1.height),viewTexture1);
    //标签提示信息
    GUI.Label(Rect(10,150,100,40),"群组视图2");
    //按钮
    GUI.Button(Rect(10,190,100,40),"按钮");
    //结束这个群组
    GUI.EndGroup();
}

function Update () {
   

}

群组视图

窗口

//默认窗口位置
private var window0 : Rect = Rect(20,20,200,200);
private var window1 : Rect = Rect(250,20,200,200);
function Start () {
   

}

function OnGUI(){
   
    //在这里注册两个窗口
    GUI.Window(0,window0,oneWindow,"第一个窗口");
    GUI.Window(1,window1,twoWindow,"第二个窗口");
}

//显示窗口1的内容
function oneWindow(windowID:int){
   
    GUI.Box(Rect(10,50,150,50),"这里窗口的ID是"+windowID);
    if(GUI.Button(Rect(10,120,150,50),"普通按钮")){
        Debug.Log("窗口ID="+windowID+"按钮被点击");
    }
}

//显示窗口2的内容
function twoWindow(windowID:int){
   
    GUI.Box(Rect(10,50,150,50),"这里窗口的ID是"+windowID);
    if(GUI.Button(Rect(10,120,150,50),"普通按钮")){
        Debug.Log("窗口ID="+windowID+"按钮被点击");
    }
}

function Update () {
   

}

窗口视图

Skin

界面皮肤
界面皮肤元素
界面皮肤
皮肤属性
皮肤属性1
皮肤属性2
皮肤属性3

//自定义皮肤
var mySkin : GUISkin;
//单选控件是否被选中
private var choose : boolean = false;

//拖动窗口的位置
var windowRect : Rect = Rect(20,20,120,50);

//拖动窗口的位置
var edit : String = "请输入字符串";

function Start () {
   

}

function OnGUI(){
   
    //设置GUI皮肤为自定义皮肤
    GUI.skin = mySkin;
    //绘制自定义按钮
    GUI.Button(Rect(100,100,100,100),"自定义按钮");

    //单项选择
    choose = GUI.Toggle(Rect(10,50,100,30),choose,"单向选择");

    //输入框
    edit = GUI.TextField(Rect(200,10,200,20),edit,25);

    //注册窗口
    windowRect = GUI.Window(0,windowRect,setWindow,"这是一个窗口");
}

//创建窗口内容
function setWindow(windowID : int){
   
    //创建一个可以自由拖动的窗口
    GUI.DragWindow();
    //绘制自定义按钮
    GUI.Button(Rect(10,20,100,30),"自定义按钮");
}

function Update () {
   

}

Skin方法

自定义风格组件

//自定义皮肤
var mySkin : GUISkin;
function Start () {
   

}

function OnGUI(){
   
    //设置GUI皮肤为我们自定义的皮肤
    GUI.skin = mySkin;
    //绘制按钮,通过名称找到对应风格
    GUI.Button(Rect(0,100,300,100),"Custom0","Custom0");
    GUI.Button(Rect(300,100,300,100),"Custom1","Custom1");
}

function Update () {
   

}

自定义风格组件

170405

GUILayout游戏界面布局

GUI与GUILayout的区别

GUI与GUILayout

var addStr : String = "添加测试字符串";

function OnGUI(){
   
    //普通GUI按钮
    if(GUI.Button(Rect(50,50,100,30),addStr)){
        addStr += addStr;
    }
    //界面布局按钮
    if(GUILayout.Button(addStr)){
        addStr += addStr;
    }
}

GUILayoutOption界面布局配置

GUILayoutOption

function OnGUI(){
    //默认垂直线性排列
    GUILayout.Button("设置按钮布局宽度为400,高度为30",
        GUILayout.Width(400),GUILayout.Height(30));
    GUILayout.Label("设置按钮布局宽度为500,高度为30",
        GUILayout.Width(500),GUILayout.Height(30));
    GUILayout.Button("设置按钮布局宽度为100,高度为20",
        GUILayout.Width(100),GUILayout.Height(20));
    GUILayout.Button("设置按钮布局宽度为400,高度为40",
        GUILayout.Width(400),GUILayout.Height(40));
    //设置的width中最大的宽度,不一定是Button,这里最大是Label的500
    GUILayout.Button("设置宽度不等于最宽按钮",GUILayout.ExpandWidth(false));
    GUILayout.Button("设置宽度等于最宽按钮",GUILayout.ExpandWidth(true));
}

线性布局

线性布局

//贴
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值