[Unity3D]Unity3d开发常用代码集合
发表于:2024-11-23 作者:热门IT资讯网编辑
编辑最后更新 2024年11月23日,function OnGUI() {GUI.Label(Rect(1,1,100,20),"I'm a Label"); //1GUI.Box(Rect(1,21,100,20),"I'm a Box
- function OnGUI() {
- GUI.Label(Rect(1,1,100,20),"I'm a Label"); //1
- GUI.Box(Rect(1,21,100,20),"I'm a Box"); //2
- GUI.Button(Rect(1,41,100,20),"I'm a Button"); //3
- GUI.RepeatButton(Rect(1,61,120,20),"I'm a RepeatButton"); //4
- GUI.TextField(Rect(1,81,100,20),"I'm a TextFielld"); //5
- GUI.TextArea(Rect(1,101,100,40),"I'm a TextArea,\nMultiline"); //6
- GUI.Toggle(Rect(1,141,120,20),true,"I'm a Toggle true"); //7
- GUI.Toggle(Rect(1,161,120,20),false,"I'm a Toggle false"); //8
- GUI.Toolbar(Rect(1,181,160,20),-1,["Toolbar","Tool2","Tool3"); //9
- GUI.SelectionGrid(Rect(1,201,190,20),2,["Selection","Grid","select3"],3); //10
- GUI.HorizontalSlider(Rect(1,221,180,20),3.0,0,10.0); //11
- GUI.VerticalScrollbar(Rect(1,241,20,100),3.0,1,0.0,10.0); //12
- //13
- GUI.BeginScrollView (Rect (200,10,100,100),Vector2.zero, Rect (0, 0, 220, 200));
- GUI.Label(Rect(0,0,100,20),"I'm a Label");
- GUI.EndScrollView();
- //14
- GUI.Window(0,Rect(200,129,100,100),funcwin,"window");
- }
- function funcwin(windowID:int)
- {
- GUI.DragWindow(Rect(0,0,10000,2000));
- }
2 JS调用DLL
- import System;
- import System.Runtime.InteropServices;
- @DllImport("user32.dll")
- public static function MessageBox(Hwnd : int,text : String,Caption : String,iType : int) : int {};
- function Start()
- {
- MessageBox(0, "API Message Box", "Win32 API", 64) ;
- }
- function Update () {
- }
3 物体标签
- var target : Transform; // Object that this label should follow
- var offset = Vector3.up; // Units in world space to offset; 1 unit above object by default
- var clampToScreen = false; // If true, label will be visible even if object is off screen
- var clampBorderSize = .05; // How much viewport space to leave at the borders when a label is being clamped
- var useMainCamera = true; // Use the camera tagged MainCamera
- var cameraToUse : Camera; // Only use this if useMainCamera is false
- private var cam : Camera;
- private var thisTransform : Transform;
- private var camTransform : Transform;
- function Start () {
- thisTransform = transform;
- if (useMainCamera)
- cam = Camera.main;
- else
- cam = cameraToUse;
- camTransform = cam.transform;
- }
- function Update () {
- if (clampToScreen) {
- var relativePosition = camTransform.InverseTransformPoint(target.position);
- relativePosition.z = Mathf.Max(relativePosition.z, 1.0);
- thisTransform.position = cam.WorldToViewportPoint(camTransform.TransformPoint(relativePosition + offset));
- thisTransform.position = Vector3(Mathf.Clamp(thisTransform.position.x, clampBorderSize, 1.0-clampBorderSize),
- Mathf.Clamp(thisTransform.position.y, clampBorderSize, 1.0-clampBorderSize),
- thisTransform.position.z);
- }
- else {
- thisTransform.position = cam.WorldToViewportPoint(target.position + offset);
- }
- }
- @script RequireComponent(GUIText)
4 unity3d读取保存xml文件
- import System;
- import System.Xml;
- import System.Xml.Serialization;
- import System.IO;
- import System.Text;
- class CeshiData{
- var Ceshi1 : String;
- var Ceshi2 : String;
- var Ceshi3 : float;
- var Ceshi4 : int;
- }
- class UserData
- {
- public var _iUser : CeshiData = new CeshiData();
- function UserData() { }
- }
- private var c1 : String;
- private var c2 : String;
- private var c3 : float;
- private var c4 : int;
- private var _FileLocation : String;
- private var _FileName : String = "CeshiData.xml";
- var myData : UserData[];
- private var tempData : UserData = new UserData();
- var i : int = 0;
- var GUISkin1 : GUISkin;
- var ShowData : int = 0;
- function Awake(){
- _Filelocation=Application.dataPath;
- }
- function Start(){
- FirstSave();
- }
- function FirstSave(){//初始化XML
- tempData._iUser.Ceshi1 = "?";
- tempData._iUser.Ceshi2 = "?";
- tempData._iUser.Ceshi3 = 0;
- tempData._iUser.Ceshi4 = 0;
- var writer : StreamWriter;
- var t : FileInfo = new FileInfo(_FileLocation+"/"+ _FileName);
- if(!t.Exists)
- {
- writer = t.CreateText();
- _data = SerializeObject(tempData);
- for(i=0;i<10;i++){
- writer.WriteLine(_data);
- }
- writer.Close();
- }
- }
- function Save(sc1 : String,sc2 : String,sc3 : float,sc4 : int){//保存数据到指定的XMl里
- tempData._iUser.Ceshi1 = sc1;
- tempData._iUser.Ceshi2 = sc2;
- tempData._iUser.Ceshi3 = sc3;
- tempData._iUser.Ceshi4 = sc4;
- var writer : StreamWriter;
- var t : FileInfo = new FileInfo(_FileLocation+"/"+ _FileName);
- t.Delete();
- writer = t.CreateText();
- _data = SerializeObject(tempData);
- for(i=0;i<10;i++){
- writer.WriteLine(_data);
- }
- writer.Close();
- }
- function Load(){//读取保存在XML里的数据
- var r : StreamReader = File.OpenText(_FileLocation+"/"+ _FileName);
- var _info : String ;
- for(i=0;i<10;i++){
- _info = r.ReadLine();
- _data=_info;
- myData[i] = DeserializeObject(_data);
- }
- r.Close();
- }
- function OnGUI() {
- GUI.skin = GUISkin1;
- if(GUI.Button(Rect(0,0,100,40),"save")){
- Save("ceshi1","ceshi2",1.23,50);//要显示中文需设定中文字体
- }
- if(GUI.Button(Rect(200,0,100,40),"load")){
- Load();
- ShowData = 1;
- }
- if(ShowData == 1){
- GUI.Label(Rect(170,170+53*0,150,50),myData[0]._iUser.Ceshi1);
- GUI.Label(Rect(370,170+53*0,150,50),myData[0]._iUser.Ceshi2);
- GUI.Label(Rect(550,170+53*0,150,50),myData[0]._iUser.Ceshi3 + "");
- GUI.Label(Rect(760,170+53*0,150,50),myData[0]._iUser.Ceshi4 + "");
- GUI.Label(Rect(170,170+53*1,150,50),myData[1]._iUser.Ceshi1);
- GUI.Label(Rect(370,170+53*2,150,50),myData[2]._iUser.Ceshi2);
- GUI.Label(Rect(550,170+53*3,150,50),myData[3]._iUser.Ceshi3 + "");
- GUI.Label(Rect(760,170+53*4,150,50),myData[4]._iUser.Ceshi4 + "");
- }
- }
- //================================================================================
- function UTF8ByteArrayToString(characters : byte[] )
- {
- var encoding : UTF8Encoding = new UTF8Encoding();
- var constructedString : String = encoding.GetString(characters);
- return (constructedString);
- }
- //byte[] StringToUTF8ByteArray(string pXmlString)
- function StringToUTF8ByteArray(pXmlString : String)
- {
- var encoding : UTF8Encoding = new UTF8Encoding();
- var byteArray : byte[] = encoding.GetBytes(pXmlString);
- return byteArray;
- }
- // Here we serialize our UserData object of myData
- //string SerializeObject(object pObject)
- function SerializeObject(pObject : Object)
- {
- var XmlizedString : String = null;
- var memoryStream : MemoryStream = new MemoryStream();
- var xs : XmlSerializer = new XmlSerializer(typeof(UserData));
- var xmlTextWriter : XmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
- xs.Serialize(xmlTextWriter, pObject);
- memoryStream = xmlTextWriter.BaseStream; // (MemoryStream)
- XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
- return XmlizedString;
- }
- // Here we deserialize it back into its original form
- //object DeserializeObject(string pXmlizedString)
- function DeserializeObject(pXmlizedString : String)
- {
- var xs : XmlSerializer = new XmlSerializer(typeof(UserData));
- var memoryStream : MemoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
- var xmlTextWriter : XmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
- return xs.Deserialize(memoryStream);
- }
5 单击物体弹出对话框
- static var WindowSwitch : boolean = false;
- var mySkin : GUISkin;
- var windowRect = Rect (200, 80, 240, 100);
- function OnGUI ()
- {
- if(WindowSwitch == true)
- {
- GUI.skin = mySkin;
- windowRect = GUI.Window (0, windowRect, WindowContain, "测试视窗");
- }
- }
- function WindowContain (windowID : int)
- {
- if (GUI.Button (Rect (70,40,100,20), "关闭视窗"))
- {
- WindowSwitch = false;
- }
- }
- function OnMouseEnter ()
- {
- renderer.material.color = Color.red;
- }
- function OnMouseDown ()
- {
- Func_GUIWindow.WindowSwitch = true;
- }
- function OnMouseExit ()
- {
- renderer.material.color = Color.white;
- }
6 读取txt文本
- using UnityEngine;
- using System.Collections;
- using System.IO;
- using System.Text;
- public class ReadTxt : MonoBehaviour {
- string path = "D:\\txtName.txt";
- StreamReader smRead = new StreamReader(path,
- Encoding.Default); //设置路径
- string line;
- void Update () {
- if ((line = smRead.ReadLine()) != null) {
- string[] arrStr = line.Split('|'); //分割符 "|"
- id1 = arrStr[0].ToString();
- name = arrStr[1].ToString();
- sfz = arrStr[2].ToString();
- }
- }
- }
7 截屏
- function OnMouseDown() {
- Application.CaptureScreenshot("Screenshot.png");
- }
8 下拉菜单
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- using System.Text.RegularExpressions;
- public class DropDownList : MonoBehaviour
- {
- private Rect DropDownRect; // Size and Location for drop down
- private Transform currentRoot; // selected object transform
- private Vector2 ListScrollPos; // scroll list position
- public string selectedItemCaption; // name of selected item
- private string lastCaption; // last selected item
- private int guiWidth; // width of drop list
- private int guiHight; // hight of drop list
- private bool textChanged; // if text in text box has changed look for item
- private bool clearDropList; // clear text box
- public bool DropdownVisible; // show drop down list
- public bool updateInfo; // update info window
- public Transform root; // top of the Hierarchy
- public GUISkin dropSkin; // GUISkin for drop down list
- public int itemtSelected; // index of selected item
- public bool targetChange; // text in text box was changed, update list
- public class GuiListItem //The class that contains our list items
- {
- public string Name; // name of the item
- public int GuiStyle; // current style to use
- public int UnSelectedStyle; // unselected GUI style
- public int SelectedStyle; // selected GUI style
- public int Depth; // depth in the Hierarchy
- public bool Selected; // if the item is selected
- public bool ToggleChildren; // show child objects in list
- // constructors
- public GuiListItem(bool mSelected, string mName, int iGuiStyle, bool childrenOn, int depth)
- {
- Selected = mSelected;
- Name = mName;
- GuiStyle = iGuiStyle;
- ToggleChildren = childrenOn;
- Depth = depth;
- UnSelectedStyle = 0;
- SelectedStyle = 0;
- }
- public GuiListItem(bool mSelected, string mName)
- {
- Selected = mSelected;
- Name = mName;
- GuiStyle = 0;
- ToggleChildren = true;
- Depth = 0;
- UnSelectedStyle = 0;
- SelectedStyle = 0;
- }
- public GuiListItem(string mName)
- {
- Selected = false;
- Name = mName;
- GuiStyle = 0;
- ToggleChildren = true;
- Depth = 0;
- UnSelectedStyle = 0;
- SelectedStyle = 0;
- }
- // Accessors
- public void enable()// don't show in list
- {
- Selected = true;
- }
- public void disable()// show in list
- {
- Selected = false;
- }
- public void setStlye(int stlye)
- {
- GuiStyle = stlye;
- }
- public void setToggleChildren(bool childrenOn)
- {
- ToggleChildren = childrenOn;
- }
- public void setDepth(int depth)
- {
- Depth = depth;
- }
- public void SetStyles(int unSelected, int selected)
- {
- UnSelectedStyle = unSelected;
- SelectedStyle = selected;
- }
- }
- //Declare our list of stuff
- public List MyListOfStuff;
- // Initialization
- void Start()
- {
- guiWidth = 400;
- guiHight = 28;
- // Manually position our list, because the dropdown will appear over other controls
- DropDownRect = new Rect(10, 10, guiWidth, guiHight);
- DropdownVisible = false;
- itemtSelected = -1;
- targetChange = false;
- lastCaption = selectedItemCaption = "Select a Part...";
- if (!root)
- root = gameObject.transform;
- MyListOfStuff = new List(); //Initialize our list of stuff
- // fill the list
- BuildList(root);
- // set GUI for each item in list
- SetupGUISetting();
- // fill the list
- FillList(root);
- }
- void OnGUI()
- {
- //Show the dropdown list if required (make sure any controls that should appear behind the list are before this block)
- if (DropdownVisible)
- {
- GUI.SetNextControlName("ScrollView");
- GUILayout.BeginArea(new Rect(DropDownRect.xMin, DropDownRect.yMin + DropDownRect.height, guiWidth, Screen.height * .25f), "", "box");
- ListScrollPos = GUILayout.BeginScrollView(ListScrollPos, dropSkin.scrollView);
- GUILayout.BeginVertical(GUILayout.Width(120));
- for (int i = 0; i < MyListOfStuff.Count; i++)
- {
- if (MyListOfStuff[i].Selected && GUILayout.Button(MyListOfStuff[i].Name, dropSkin.customStyles[MyListOfStuff[i].GuiStyle]))
- {
- HandleSelectedButton(i);
- }
- }
- GUILayout.EndVertical();
- GUILayout.EndScrollView();
- GUILayout.EndArea();
- }
- //Draw the dropdown control
- GUILayout.BeginArea(DropDownRect, "", "box");
- GUILayout.BeginHorizontal();
- string ButtonText = (DropdownVisible) ? "<<" : ">>";
- DropdownVisible = GUILayout.Toggle(DropdownVisible, ButtonText, "button", GUILayout.Width(32), GUILayout.Height(20));
- GUI.SetNextControlName("PartSelect");
- selectedItemCaption = GUILayout.TextField(selectedItemCaption);
- clearDropList = GUILayout.Toggle(clearDropList, "Clear", "button", GUILayout.Width(40), GUILayout.Height(20));
- GUILayout.EndHorizontal();
- GUILayout.EndArea();
- }
- void Update()
- {
- //check if text box info changed
- if (selectedItemCaption != lastCaption)
- {
- textChanged = true;
- }
- // if text box info changed look for part matching text
- if (textChanged)
- {
- lastCaption = selectedItemCaption;
- textChanged = false;
- // go though list to find item
- for (int i = 0; i < MyListOfStuff.Count; ++i)
- {
- if (MyListOfStuff[i].Name.StartsWith(selectedItemCaption, System.StringComparison.CurrentCultureIgnoreCase))
- {
- MyListOfStuff[i].enable();
- MyListOfStuff[i].ToggleChildren = false;
- MyListOfStuff[i].GuiStyle = MyListOfStuff[i].UnSelectedStyle;
- }
- else
- {
- MyListOfStuff[i].disable();
- MyListOfStuff[i].ToggleChildren = false;
- MyListOfStuff[i].GuiStyle = MyListOfStuff[i].UnSelectedStyle;
- }
- }
- for (int i = 0; i < MyListOfStuff.Count; ++i) { // check list for item int test = string.Compare(selectedItemCaption, MyListOfStuff[i].Name, true); if (test == 0) { itemtSelected = i; targetChange = true; break; // stop looking when found } } } // reset message if list closed and text box is empty if (selectedItemCaption == "" && !DropdownVisible) { lastCaption = selectedItemCaption = "Select a Part..."; ClearList(root); FillList(root); } // if Clear button pushed if (clearDropList) { clearDropList = false; selectedItemCaption = ""; } } public void HandleSelectedButton(int selection) { // do the stuff, camera etc itemtSelected = selection;//Set the index for our currently selected item updateInfo = true; selectedItemCaption = MyListOfStuff[selection].Name; currentRoot = GameObject.Find(MyListOfStuff[itemtSelected].Name).transform; // toggle item show child MyListOfStuff[selection].ToggleChildren = !MyListOfStuff[selection].ToggleChildren; lastCaption = selectedItemCaption; // fill my drop down list with the children of the current selected object if (!MyListOfStuff[selection].ToggleChildren) { if (currentRoot.childCount > 0)
- {
- MyListOfStuff[selection].GuiStyle = MyListOfStuff[selection].SelectedStyle;
- }
- FillList(currentRoot);
- }
- else
- {
- if (currentRoot.childCount > 0)
- {
- MyListOfStuff[selection].GuiStyle = MyListOfStuff[selection].UnSelectedStyle;
- }
- ClearList(currentRoot);
- }
- targetChange = true;
- }
- // show only items that are the root and its children
- public void FillList(Transform root)
- {
- foreach (Transform child in root)
- {
- for (int i = 0; i < MyListOfStuff.Count; ++i)
- {
- if (MyListOfStuff[i].Name == child.name)
- {
- MyListOfStuff[i].enable();
- MyListOfStuff[i].ToggleChildren = false;
- MyListOfStuff[i].GuiStyle = MyListOfStuff[i].UnSelectedStyle;
- }
- }
- }
- }
- // turn off children objects
- public void ClearList(Transform root)
- {
- //Debug.Log(root.name);
- Transform[] childs = root.GetComponentsInChildren();
- foreach (Transform child in childs)
- {
- for (int i = 0; i < MyListOfStuff.Count; ++i) { if (MyListOfStuff[i].Name == child.name && MyListOfStuff[i].Name != root.name) { MyListOfStuff[i].disable(); MyListOfStuff[i].ToggleChildren = false; MyListOfStuff[i].GuiStyle = MyListOfStuff[i].UnSelectedStyle; } } } } // recursively build the list so the hierarchy is in tact void BuildList(Transform root) { // for every object in the thing we are viewing foreach (Transform child in root) { // add the item MyListOfStuff.Add(new GuiListItem(false, child.name)); // if it has children add the children if (child.childCount > 0)
- {
- BuildList(child);
- }
- }
- }
- public void ResetDropDownList()
- {
- selectedItemCaption = "";
- ClearList(root);
- FillList(root);
- }
- public string RemoveNumbers(string key)
- {
- return Regex.Replace(key, @"\d", "");
- }
- // sets the drop list elements to use the correct GUI skin custom style
- private void SetupGUISetting()
- {
- // set drop down list gui
- int depth = 0;
- // check all the parts for hierarchy depth
- for (int i = 0; i < MyListOfStuff.Count; ++i) { GameObject currentObject = GameObject.Find(MyListOfStuff[i].Name); Transform currentTransform = currentObject.transform; depth = 0; if (currentObject.transform.parent == root) // if under root { if (currentObject.transform.childCount > 0)
- {
- MyListOfStuff[i].GuiStyle = depth;
- MyListOfStuff[i].UnSelectedStyle = depth;
- MyListOfStuff[i].SelectedStyle = depth + 2;
- }
- else
- {
- MyListOfStuff[i].GuiStyle = depth + 1;
- MyListOfStuff[i].UnSelectedStyle = depth + 1;
- MyListOfStuff[i].SelectedStyle = depth + 1;
- }
- MyListOfStuff[i].Depth = depth;
- }
- else // if not under root find depth
- {
- while (currentTransform.parent != root)
- {
- ++depth;
- currentTransform = currentTransform.parent;
- }
- MyListOfStuff[i].Depth = depth;
- // set gui basied on depth
- if (currentObject.transform.childCount > 0)
- {
- MyListOfStuff[i].GuiStyle = depth * 3;
- MyListOfStuff[i].UnSelectedStyle = depth * 3;
- MyListOfStuff[i].SelectedStyle = (depth * 3) + 2;
- }
- else
- {
- MyListOfStuff[i].GuiStyle = depth * 3 + 1;
- MyListOfStuff[i].UnSelectedStyle = depth * 3 + 1;
- MyListOfStuff[i].SelectedStyle = depth * 3 + 1;
- }
- }
- }
- }
- }