您的位置:首页 > 移动开发 > Unity3D

unity3d 第九天

2016-07-20 22:00 399 查看
Space() 偏移



Space_test.cs

using UnityEngine;
using System.Collections;

public class Space_test : MonoBehaviour {

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

}
void OnGUI(){
//开始一个显示区域
GUILayout.BeginArea (new Rect (0, 0, 200, 60));
GUILayout.BeginHorizontal ();
GUILayout.Box ("Test1");
//偏移十像素
GUILayout.Space (10);
GUILayout.Box ("Test2");
GUILayout.EndVertical ();
GUILayout.Space (20);
GUILayout.BeginHorizontal ();
GUILayout.Box ("Test3");
//偏移十像素
GUILayout.Space (10);
GUILayout.Box ("Test4");
GUILayout.EndVertical ();
GUILayout.EndArea ();
}
}


FlexibleSpace ()对齐方式



FlexibleSpace_test.cs

using UnityEngine;
using System.Collections;

public class FlexibleSpace_test : MonoBehaviour {

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

}
void OnGUI(){
//开始显示区域
GUILayout.BeginArea (new Rect (0, 0, Screen.width, Screen.height));
GUILayout.BeginHorizontal ();
GUILayout.BeginVertical ();
GUILayout.Box ("Test1");
//两个Box控件上下对齐
GUILayout.FlexibleSpace ();
GUILayout.Box("Test2");

//多个控件对齐 以平分的方式
/*GUILayout.FlexibleSpace ();
GUILayout.Box("Test5");
GUILayout.FlexibleSpace ();
GUILayout.Box("Test6");*/

GUILayout.EndVertical ();
//两个布局上下对齐
GUILayout.FlexibleSpace ();
GUILayout.BeginVertical ();
GUILayout.Box ("Test3");
GUILayout.FlexibleSpace ();
GUILayout.Box("Test4");
GUILayout.EndVertical ();
GUILayout.EndHorizontal();
GUILayout.EndArea();
}
}
窗口创建与关闭 

这里在将js代码 改为c#代码时出现问题,还未解决

CreateandClose_window.cs

using UnityEngine;
using System.Collections;

public class CreateandClose_window : MonoBehaviour {
ArrayList winArryList = new ArrayList();
public Texture icon;
// Use this for initialization
void Start () {
winArryList.Add (new Rect (winArryList.Count * 100, 50, 150, 100));
}

// Update is called once per frame
void Update () {

}
void OnGUI(){
int cout = winArryList.Count;
for (int i =0; i<cout; i++) {
<span style="color:#ff0000;">winArryList[i]=GUILayout.Window(i,winArrayList[i],AddWindow,"窗口ID:"+i);</span>
}
}
void AddWindow(int windowID){
GUILayout.BeginHorizontal ();
GUILayout.Label (icon, GUILayout.Width (50), GUILayout.Height (50));
GUILayout.Label ("这是一个全新的窗口");
GUILayout.EndHorizontal ();
GUILayout.BeginHorizontal ();
if (GUILayout.Button ("添加新窗口")) {
winArryList.Add (new Rect(winArryList.Count * 100,50,150,100));
}
if (GUILayout.Button ("关闭当前窗口")) {
winArryList.RemoveAt(windowID);
}
GUILayout.EndHorizontal ();
//设置窗口拖动的区域
GUI.DragWindow(new Rect(0,0,Screen.width,Screen.height));
}
}


错误提示为:

1.Assets/CreateandClose_window.cs(19,59): error CS0103: The name `winArrayList' does not exist in the current context

2.Assets/CreateandClose_window.cs(19,50): error CS1502: The best overloaded method match for `UnityEngine.GUILayout.Window(int, UnityEngine.Rect, UnityEngine.GUI.WindowFunction, string, params UnityEngine.GUILayoutOption[])' has some invalid arguments

3. Assets/CreateandClose_window.cs(19,50): error CS1503: Argument `#2' cannot convert `object' expression to type `UnityEngine.Rect'

 貌似是ArrayList 存储的Rect类型 无法正常转化  强制转换方法我又没找到 还未解决
问题一是变量名写错了  声明的winArrylist 
问题2,3是类型转化问题  其中 ArrayList的as方法对Rect没用  直接类型强制转化 (Rect)winArryList  (之前这样改过 不知道是用成了Rect* 还是之前变量名的问题导致还是保存)
成功的图片



修改的代码
void OnGUI(){
int cout = winArryList.Count;
for (int i =0; i<cout; i++) {
winArryList[i]=GUILayout.Window(i,(Rect)winArryList[i],AddWindow,"窗口ID:"+i);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: