Unity3D常用代码总结
unity 常用函数
unity 常用函数
1. Start(): 游戏对象被创建时初始化的函数
2. Update(): 每一帧都会执行的函数
3. FixedUpdate(): 每个固定帧都会执行的函数
4. LateUpdate(): 在Update()函数执行后执行的函数
5. Awake(): 比Start()更早调用,用于提前加载对象
6. OnEnable(): 对象被启用时调用
7. OnDisable(): 对象被禁用时调用
8. OnDestroy(): 对象被销毁时调用
9. OnCollisionEnter(): 碰撞发生时调用
10. OnCollisionExit(): 离开碰撞时调用
11. OnTriggerStay(): 点在触发器内时持续调用
12. OnTriggerExit(): 离开触发器时调用
13. Instantiate(): 创建对象实例
14. Destroy(): 销毁对象
15. Debug.Log(): 输出调试信息
16. GetComponent(): 获取组件
17. GetComponentInChildren(): 在子对象中获取组件
18. GetComponentInParent(): 在父对象中获取组件
19. transform.Translate(): 移动对象
20. transform.Rotate(): 旋转对象
unity3d怎么控制对象移动涉及的知识点
标题:u ni ty3d怎么控制对象移动涉及的知识点
Unity3D怎么控制对象移动涉及的知识点
一、引言
在U ni ty3D游戏开发中,对象的移动是一个非常基础和重要的功能。
掌握控制对象移动的知识点,对于游戏开发者而言是至关重要的。本文将介绍Un it y3D中控制对象移动涉及的一些关键知识点,并提供详细的解
释和示例代码。
二、T r a n s f o r m组件与移动
在U ni ty3D中,对象的移动与T ra ns fo r m组件密切相关。
T r an sf or m组件定义了对象的位置、旋转和缩放等信息。下面介绍一些
常用的控制对象移动的方法:
1.T r a n s l a t e方法
T r an sl at e方法可以实现对象的平移移动。它接受一个表示移动量的
V e ct or3参数,通过改变对象的位置来实现移动。下面是一个示例代码:
```c sh ar p
v o id Up da te()
{
i f(I np ut.G et Ke yDo w n(Ke yC od e.W))
{
t r an sf or m.Tr an sla t e(Ve ct or3.fo r wa r d*Ti me.d el ta Tim e*s pe e d);
}
i f(I np ut.G et Ke yDo w n(Ke yC od e.A))
{
t r an sf or m.Tr an sla t e(Ve ct or3.le ft*T im e.de lt aT im e*s p ee d);
}
//其他方向的移动代码...
unity常用表达式
在Unity中,有一些常用的表达式和语法,用于实现游戏开发中的各种功能。以下是一些常见的Unity表达式和语法:
1.GameObject查找:
–GameObject.Find("ObjectName"): 通过对象名称查找游戏对象。
–GameObject.FindWithTag("TagName"): 通过标签查找游戏对象。
2.组件获取:
–GetComponent<Type>(): 获取游戏对象上的指定类型的组件。
3.Transform属性:
–transform.position: 游戏对象的位置。
–transform.rotation: 游戏对象的旋转。
–transform.localScale: 游戏对象的缩放。
4.Input系统:
–Input.GetKey(KeyCode.Space): 检测是否按下空格键。
–Input.GetMouseButtonDown(0): 检测是否按下鼠标左键。
5.时间相关:
–Time.deltaTime: 上一帧到当前帧的时间间隔,用于平滑处理运动。
6.协程(Coroutine):
–StartCoroutine(MyCoroutine()): 启动协程。
–yield return null;: 在协程中等待一帧。
7.动画系统:
–Animator: Unity中的动画控制器组件。
–animator.SetBool("IsRunning", true);: 设置动画参数。
8.物理系统:
–Rigidbody: 刚体组件,用于处理物体的物理运动。
Unity 3D 三款游戏完整(入门+进阶必备)代码
Destroy(other.gameObject);//销毁子弹
}
if(other.tag=="player") //飞机与陨石的碰撞检测
{
lives--;
if(lives==0){ //如果玩家飞机生命值为零,转换进入输家场景
if(RockController.score>PlayerPrefs.GetInt("HighScore")){
public staticintlives=3; //定义玩家生命
public staticinthighScore=0; //设置最高分的存储变量
// Use this for inLeabharlann Baidutialization
void Start () {
highScore=PlayerPrefs.GetInt("HighScore"); //调用PlayerPrefs类中GetInt()方法读取保存在本地的变量highScore
public TextureloseTexture;
// Use this for initialization
void Start () {
RockController.score=0;
RockController.lives=3;
Unity3D开发标准教程-Unity脚本程序基础知识
//重写Update方法
5 transform.Translate(1, 0, 0);
//沿x轴移动一个单位
6 GetComponent<Transform>().Translate(1, 0, 0); //沿x轴移动一个单位
7 }}
第9页
2.3 Unity脚本的基础语法
2.3.4 访问其它游戏对象 1、通过属性查看器指定参数 2、确定对象的层次关系 3、通过名字或标签获取游戏对象 4、通过组件名称获取游戏对象
第18页
2.3 Unity脚本的基础语法
2.3.8 协同程序和中断
1 using UnityEngine;
2 using System.Collections;
//引入系统包
3 public class BNUCoroutine : MonoBehaviour{ //声明类
4 IEnumerator Start(){
//重写Start方法
5 StartCoroutine("DoSomething", 2.0F);
//开启协同程序
6 yield return new WaitForSeconds(1);
//等待1s
7 StopCoroutine(“DoSomething”); }
//引入系统包 //声明类 //声明一个公有Transform组件 //声明一个私有Transform组件 //重新Start方法 //为priTrans赋值
unity 常用函数
unity 常用函数
Unity常用函数是Unity开发中不可或缺的一部分,掌握这些函数对于开发者来说是至关重要的。在本篇文章中,我们将介绍一些常用的Unity函数。
1. Start()函数
Start()函数是Unity中最常用的函数之一。这个函数会在游戏对象被创建后执行一次,并且只执行一次。它通常被用来初始化游戏对象的一些属性或者变量。
2. Update()函数
Update()函数是Unity中最常用的函数之一。这个函数会在每一帧渲染之前被调用一次。它通常被用来更新游戏对象的状态,比如位置、旋转等。
3. FixedUpdate()函数
FixedUpdate()函数是Unity中另一个非常常用的函数。这个函数会在每一帧渲染之前被调用一次,但是它的调用时间是固定的,不会受到帧率的影响。这个函数通常被用来更新游戏对象的物理状态,比如速度、加速度等。
4. OnTriggerEnter()函数
OnTriggerEnter()函数是Unity中用来处理物体之间碰撞事件的函数。当一个物体进入另一个物体的碰撞区域时,这个函数会被调用。可以在这个函数中实现游戏对象的一些行为,比如触发音效、特效等。
5. OnCollisionEnter()函数
OnCollisionEnter()函数是Unity中另一个用来处理物体之间碰撞事件的函数。当一个物体和另一个物体发生碰撞时,这个函数会被调用。可以在这个函数中实现游戏对象的一些行为,比如减少生命值、摧毁物体等。
6. Instantiate()函数
Instantiate()函数是Unity中用来创建游戏对象的函数。可以通过这个函数在运行时动态创建游戏对象,并且可以指定其位置、旋转等属性。
Unity3D常用代码
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));
rate = Screen.width / screenSize.x;
} else if (scaleType == ScreenScaleType.Full) {
rate = Screen.height / screenSize.y;
}
} else {
if (scaleType == ScreenScaleType.Fit) {
function Start () {
thisTransform = transform;
if (useMainCamera)
cam = Camera.main;
else
cam = cameraToUse;
camTransform = cam.transform;
}
functioБайду номын сангаас Update () {
if (clampToScreen) {
Unity3D常用代码集合
Unity3D常用代码集合
1、基本碰撞检测代码
2、检测输入
3、销毁对象
4、实例来创建对象
建立JAVA,把代码拖入到空GameJect上,然后把Prefab拖入到公共变量上。
5、简易定时器
6、物体在屏幕上移动
7、钢体向目标处移动
8、碰撞然后转到下一场景
floor---被动碰撞的的纲体
把代码拉到主动纲体上,然后场景设置:file----build seting----对话框,然后把当前场景拖里,然后把下一场景拖里,测试OK!
Unity3D基础文档
1,在U3D里,创建一个cube 物体,x,y,z 的比例缩放为5, 0.1, 5,把这个物体重命名为Plane,位置就世界坐标中心。
2,再创建一个cube 物体,位置在1里创建的上面,如图所示,重命名为Cube1 。
3,创建个点光源point light,移动到物体上面即可。
4,开始我们的第一个脚本编写,Assets->Create->Javascript ,创建一个空的JS脚本文件,重命名为Move1 。
5,双击Move1,开始编写
function Update () {
transform.Translate(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
}
来介绍下transform是物体的基本属性,包含位置,旋转,缩放等,
transform.Translate就是物体的位置信息,transform.Translate(x轴数值,y轴数值,zx轴数值) Input.GetAxis("Horizontal")这个值来自Input这个输入里的Horizontal返回值,GetAxis()返回的值是-1到1
关于输入的设置,可以进入
Edit->Project Settings->Input
里面名称为Horizontal的,快捷键是A和D,或者是小键盘左右键
Input.GetAxis("Vertical")是Z轴的返回值,同上,也是在INPUT里设置
6,将Move1.js拖到Main Camera上,即在Main Camera的属性菜单就已经加载了,Move1.js 7,运行,用键盘的W,S,A,D控制相机Main Camera的前后左右位移。
Unity3D计时器的实现代码(三种写法总结)
Unity3D计时器的实现代码(三种写法总结)
1、每帧检查
定义⼀个时间变量 timer,每帧将此时间减去帧间隔时间 Time.deltaTime,如果⼩于或者等于零,说明定时器到了,执⾏相应功能代码,将此定时器重置,代码如下:
public float timer = 1.0f;
// Update is called once per frame
void Update() {
timer -= Time.deltaTime;
if (timer <= 0) {
Debug.Log(string.Format("Timer1 is up time=${0}", Time.time));
timer = 1.0f;
}
}
2、利⽤协程
在协程中返回需要等待的时间,直接看代码便明⽩:
// Use this for initialization
void Start() {
StartCoroutine(Timer());
}
IEnumerator Timer() {
while (true) {
yield return new WaitForSeconds(1.0f);
Debug.Log(string.Format("Timer2 is up time=${0}", Time.time));
}
}
3、延迟调⽤
使⽤ MonoBehaviour.Invoke,两个参数,分别是要调⽤的⽅法名和延时调⽤的时间。代码如下:
// Use this for initialization
void Start() {
Invoke("Timer", 1.0f);
unity3D代码规范及项目目录结构
unity3D代码规范及项目目录结构
Unity3D 是一种用于创建游戏和应用程序的跨平台开发引擎。为了使
团队能够更好地合作开发,提高代码的可读性和可维护性,采用一套统一
的代码规范和项目目录结构是很重要的。下面是关于Unity3D代码规范和
项目目录结构的一些建议。
代码规范:
1. 命名规范:在Unity3D中的命名应该采用驼峰命名法(CamelCase),并且尽量使用有意义的英文单词来命名。同时,应该遵
循C#语言的命名规范,类名使用大写开头,变量和函数名使用小写开头。
2.注释:在代码中应该加入适当的注释,解释代码的用途和功能。注
释应该是清晰、简洁和易于理解的。
3. 缩进和格式化:代码应该使用适当的缩进和格式化,以增加可读性。可以使用Tab符号或者空格进行缩进,并且根据约定使用适当的换行
符和空格。
4.使用有意义的变量和函数名:变量和函数名应该尽量使用有意义的
词汇描述其用途,以便于其他开发人员理解代码逻辑。
5. 使用编码规约工具检查:使用工具如StyleCop或ReSharper来检
查代码是否符合规范。
项目目录结构:
一个良好的项目目录结构可以使开发人员更好地管理和组织代码文件。以下是一个常用的Unity3D项目目录结构:
1. Assets:该目录下存放所有的资源文件,包括场景文件、模型、
纹理、音频等。按照类型和功能进行分类存放,如Scripts、Textures等。
2. Editor:该目录下存放自定义的Editor脚本,用于自动化和定制
开发流程。
3. Plugins:该目录下存放用于Unity3D的插件,如第三方库和工具。
Unity3d基本类型及基本运算解析
1、数据类型:整形:int浮点型:float double布尔类型:bool字符型:char引用类型:string object。
2、变量的命名规则:
3、变量的声明和赋值:
如int age;//声明变量;age=20;//变量赋值
4、变量和常量的区别:
常量:不可在改变的
5、类型转换:
int->float->double(这是从大到小排列)
例子:int a=2;float b=3.14;b=a;
(这样赋值是允许的),反过来赋值是不正确的
强制转换:float转换int需要强制转换
例如:int age;age=20;float a=3.5把a转换成age必须这样写:age=(int);//强制转换,只要整数部分
字符串转换成其它类型:int age;age=20;float
a=3.5string money=“5000”;需要调用parse所以得
age=int.parse(money);//字符串转换成整数。
任意类型之间的转换:
把任何的数值转换为字符串都可以用双引号(“”);
运算符和表达式:3/2=1整数除整数,结果还是整数,小数对大数求余结果为小数
++(自增)和--(自减)例如int a=1;a++print(a)结果a=2 a++加号在后,先赋值后运算,++a加号在前,先运算后赋值。
Unity3d 脚本参考大全
一、脚本概览
这是一个关于Unity内部脚本如何工作的简单概览。
Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的。在脚本对象内部不同的函数被特定的事件调用,最常用的列在下面:
Update:
这个函数在渲染一帧之前被调用。这里是大部分游戏行为代码被执行的地方,除了物理代码。
FixUpdate:
这个函数在每个物理时间步被调用一次。这是处理基于物理游戏行为的地方。
在任何函数之外的代码:
在任何函数之外的代码在物体被加载的时候运行。这个可以用来初始化脚本状态。
注意:文档的这个部分假设你是用Javascript,参考用C#编写脚本获取如何使用C#和Boo编写脚本的信息。
你也能定义时间句柄。他们的名称都以On开始,(例如OnCollisionEnter).为了查看完整的预定义时间的列表,请参考MonoBehaviour文档。
概览:常用操作
大多数游戏物体的操作是通过游戏物体的Transform和/或Rigidbody来做的。在行为脚本内部他们可以分别通过transform和rigidbody访问,因此如果你想绕着Y轴每帧旋转5度,你可以如下写:
function Update(){
transform.Rotate(0,5,0);
}
如果你想向前移动一个物体,你应该如下写:
function Update(){
transform.Transtate(0,0,2);
}
概览:跟踪时间
Time类包含一个非常重要的类变量,成为deltaTime.这个变量包含从上一次调用Update或FixedUpdate(根据你是在Update函数还是在FixedUpdate函数中)到现在的时间量。
Unity3d 常用代码集
1、将相同类型对象(名字不同)Tag改为一致,查找group
[csharp]view plain copy
1. public GameObject[] customerArray;
2.
3.void Awake () {
4. customerArray = GameObject.Find
GameObjectsWithTag("Customer");
5. Debug.LogError("长度=" +customerArray.Length);
6.foreach(GameObject c in customerArray){
7. Debug.LogWarning();
8. }
9.
2、对象动态添加脚本组件
[csharp]view plain copy
1.// WaiterID 脚本名称
2.customer.AddComponent();
3、延时执行
HideLevelImage()方法名,DelayTime 延迟时间2f
[csharp]view plain copy
1.Invoke("HideLevelImage", DelayTime);
4、不销毁
[csharp]view plain copy
1.//Sets this to not be destroyed when reloading scene
2. DontDestroyOnLoad(gameObject);
5、添加引用脚本组件
[csharp]view plain copy
1.//Store a reference to our BoardManager which will set up the level. [csharp]view plain copy
Unity3D编程规范总结
Unity3D编程规范总结
Unity3D 个人编程规范总结
[摘要:若是脚本是继承MonoBehaviour
1.变量名应用大写开首定名。如CanOpen。
2.组件工具定名应用组件大写缩写称号开首_.如Go_Button。
3.函数的参数应用小写字母开首定名。如messageData。
4.函数的参]
如果脚本是继承MonoBehaviour
1.变量名使用大写开头命名。如CanOpen。
2.组件对象命名使用组件大写缩写名称开头+_.如Go_Button。
3.函数的参数使用小写字母开头命名。如messageData。
4.函数的参数如果是组件对象,使用组件缩写小写字母+_+ 名称。如go_myMj。
5.函数中新创建的临时变量使用_开头+小写字母开头,如_dataString。
6.函数中新创建的组件对象使用_+组件缩写小写字母+_+名称命名。如_mtrl_loginPanel。
7.场景中如果使用是UI界面的组件,命名方式参照第二条。
如果脚本不是继承MonoBehaviour
8.a)类
9.【规则1-1】使用Pascal规则命名类名,即首字母要大写。
10.【规则1-2】使用能够反映类功能的名词或名词短语命名类。
11.【规则1-3】不要使用“I”、“C”、“_”等特定含义前缀。
12.【规则1-4】自定义异常类应以Exception结尾。
13.【规则1-5】文件名要能反映类的内容,最好是和类同名。
14.b) 类字段
15.【规则2-1】用camel规则来命名类成员变量名称,即首单词(或单词缩写)小写。
16.【规则2-2】类字段变量名前可加“_”前缀。
Unity3D重要知识点总结
Unity3D重要知识点总结
学习Untiy3d过程中,你需要知道数据结构和算法很重,要图形学很重要,大的游戏公司看重个人基础,综合能力小公司就看你实际工作能力,看你的Demo做的如何。那么今天我们来看一下Unity3d学习中的重要知识点有哪些。
1.什么是渲染管道?
是指在显示器上为了显示出图像而经过的一系列必要操作。渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。
主要步骤有:
本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化。
2.如何优化内存?
有很多种方式,例如
1.压缩自带类库;
2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;
3.释放AssetBundle占用的资源;
4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;
5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。
3.动态加载资源的方式?
1.Resources.Load();
2.AssetBundle
1.通过Resources模块,调用它的load函数:可以直接load并返回某个类型的Object,前提是要把这个资源放在Resource命名的文件夹下,Unity不关有没有场景引用,都会将其全部打入到安装包中。Resources.Load();
2.通过bundle的形式:即将资源打成asset bundle 放在服务器或本地磁盘,然后使用WWW模块get 下来,然后从这个bundle中load某个object。AssetBundle
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 GUI汇总
function OnGUI() {
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));
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){
bel(Rect(170,170+53*0,150,50),myData[0]._iUser.Ceshi1);
bel(Rect(370,170+53*0,150,50),myData[0]._iUser.Ceshi2);
bel(Rect(550,170+53*0,150,50),myData[0]._iUser.Ceshi3 + "");
bel(Rect(760,170+53*0,150,50),myData[0]._iUser.Ceshi4 + "");
bel(Rect(170,170+53*1,150,50),myData[1]._iUser.Ceshi1);
bel(Rect(370,170+53*2,150,50),myData[2]._iUser.Ceshi2);
bel(Rect(550,170+53*3,150,50),myData[3]._iUser.Ceshi3 + "");
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
// 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
// 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 = 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 == )
{
MyListOfStuff[i].enable();
MyListOfStuff[i].ToggleChildren = false;
MyListOfStuff[i].GuiStyle = MyListOfStuff[i].UnSelectedStyle;
}
}
}
}
// turn off children objects
public void ClearList(Transform root)
{
//Debug.Log();
Transform[] childs = root.GetComponentsInChildren
foreach (Transform child in childs)
{
for (int i = 0; i < MyListOfStuff.Count; ++i)
{
if (MyListOfStuff[i].Name == && MyListOfStuff[i].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, ));
// 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;
}
}
}
}
}