Unity3D常用代码总结

1 GUI汇总

function OnGUI() {
https://www.360docs.net/doc/0812810538.html,bel(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));
https://www.360docs.net/doc/0812810538.html,bel(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 RequireCo

mponent(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){
https://www.360docs.net/doc/0812810538.html,bel(Rect(170,170+53*0,150,50),myData[0]._iUser.Ceshi1);
https://www.360docs.net/doc/0812810538.html,bel(Rect(370,170+53*0,150,50),myData[0]._iUser.Ceshi2);


https://www.360docs.net/doc/0812810538.html,bel(Rect(550,170+53*0,150,50),myData[0]._iUser.Ceshi3 + "");
https://www.360docs.net/doc/0812810538.html,bel(Rect(760,170+53*0,150,50),myData[0]._iUser.Ceshi4 + "");

https://www.360docs.net/doc/0812810538.html,bel(Rect(170,170+53*1,150,50),myData[1]._iUser.Ceshi1);

https://www.360docs.net/doc/0812810538.html,bel(Rect(370,170+53*2,150,50),myData[2]._iUser.Ceshi2);

https://www.360docs.net/doc/0812810538.html,bel(Rect(550,170+53*3,150,50),myData[3]._iUser.Ceshi3 + "");

https://www.360docs.net/doc/0812810538.html,bel(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 = mN

ame;
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 = https://www.360docs.net/doc/0812810538.html,pare(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 == https://www.360docs.net/doc/0812810538.html,)
{
MyListOfStuff[i].enable();
MyListOfStuff[i].ToggleChildren = false;
MyListOfStuff[i].GuiStyle = MyListOfStuff[i].UnSelectedStyle;
}
}
}
}
// turn off children objects
public void ClearList(Transform root)
{
//Debug.Log(https://www.360docs.net/doc/0812810538.html,);
Transform[] childs = root.GetComponentsInChildren();
foreach (Transform child in childs)
{
for (int i = 0; i < MyListOfStuff.Count; ++i)
{
if (MyListOfStuff[i].Name == https://www.360docs.net/doc/0812810538.html, && MyListOfStuff[i].Name != https://www.360docs.net/doc/0812810538.html,)
{
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, https://www.360docs.net/doc/0812810538.html,));
// 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;
}
}
}
}
}


相关主题
相关文档
最新文档