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(监测)视图。视图与视图之间保持非常紧密的联系。
Project视图
创建完资源后,它将保存在工程根目录下的“Assets”文件夹中。
Hierarchy视图
Inspector视图
Scene视图
移动视图,快捷健分别是QWER
场景工具
Game视图
170331
运行游戏
导出和导入
第一个游戏实例
游戏效果:
//模型移动速度
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高级控件
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
该实例获取用户输入的用户名和密码并显示
//用户名
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);
}
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;
}
}
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 () {
}
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 () {
}
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
界面皮肤
皮肤属性
//自定义皮肤
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 () {
}
自定义风格组件
//自定义皮肤
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的区别
var addStr : String = "添加测试字符串";
function OnGUI(){
//普通GUI按钮
if(GUI.Button(Rect(50,50,100,30),addStr)){
addStr += addStr;
}
//界面布局按钮
if(GUILayout.Button(addStr)){
addStr += addStr;
}
}
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));
}
线性布局
//贴