unity3d 第九天

来源:互联网 发布:linux user id 编辑:程序博客网 时间:2024/05/15 01:58

Space() 偏移


Space_test.cs

using UnityEngine;using System.Collections;public class Space_test : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid 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 initializationvoid Start () {}// Update is called once per framevoid 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 initializationvoid Start () {winArryList.Add (new Rect (winArryList.Count * 100, 50, 150, 100));}// Update is called once per framevoid 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);}}


0 0
原创粉丝点击