unity3d基础02
调试:
在MonoDevelop里可以断点调试,注意绑定unity进程
使用Debug.Log()打印信息
创建游戏对象:
GameObject test = GameObject.CreatePrimitive(PrimitiveType.Cube);
GameObject t1 = instantiate(Resources.Load(“test”)) as GameObject;
移动:
test.transform.position = new Vector3(0,0,0);
float translation = Time.deltaTime * 10; //使用这个移动的会慢一些
transform.Translate(translation,0,0); // 不指定的,移动的就是脚本绑定的游戏对象
test = GameObject.Find ("Sphere");
test.transform.Translate(translation,0,0); //移动的就是那个球了
获取游戏对象:
GameObject.Find(“testname”);
获取一组:
public GameObject[] test; //先声明,此处不能实例化
test = GameObject.FindGameObjectsWithTag ("try"); //tag名可以自定义,在u3d里加好
//此时获取的是一组,可以写在Start()里面
test[1].transform.Translate(translation,0,0); //之后就可以使用了,如在update里
获取一个:
GameObject.FindGameObjectWithTag ("try");
数组:(声明--数组实例化--数组元素实例化)
声明: private Skill[] _skill;
数组实例化:_skill=new Skill[Enum.GetValues(typeof(SkillName)).Length];
元素实例化:for (int cnt = 0; cnt < _skill.Length; cnt++)
_skill[cnt] = new Skill();
①另外可以声明数组后,利用函数返回值进行数组实例化,而且此时
GameObject[] go = GameObject.FindGameObjectsWithTag("Enemy");
②使用方式可以如:
foreach (GameObject enemy in go) { }
③数组属于Array类,本身也有一些属性,如_skill.Length;
④函数传递数组时,形参用(Skill[] new_skill)即可(内部用new_skill.Length获取长度)。改变函数内形参的值,实参数组也会跟着改变。
2.无论是数组还是容器亦或者其它变量,都可以在MonoBehaviour子类中以public权限声明后,不在脚本内实例化,而是在Unity3D软件的检视面板中赋值实现实例化。
对于GameObject,Texture2D等类型的变量(或数组以及容器),一般都是在检视面板赋值。(但GO类型也可以用寻找GO等函数实例化,Texture2D类型则可以用C#硬盘读取图片的方式赋值)
gameObject.GetComponent<组件名>(); //获取组件
gameObject.AddComonpent("组件名"); //添加组件
消息传递:
//cube1是cube的子对象
//cube的脚本里有void sayHi (string str) {Debug.Log(str + "@@@@");}
//cube1的脚本里有void sayHello(string str) {Debug.Log(str + "!!!!");}
①向上发消息:
cube1.SendMessageUpwards ("sayHi","hello"); //函数名+参数
②向自己的脚本里的函数发消息:
cube1.SendMessage ("sayHello","Hello");
③向下发消息:
temp.BroadcastMessage ("sayHello","Hello"); //temp是cube,这个写在cube脚本中
//向GameObject发送一条消息,则该GameObject上挂载的所有脚本都会接收到该条消息
预设prefab:
是一种资源类型,可被重复使用的游戏对象。它可以被置入多个场景中,又或者能够在一个场景中被多次置入。当你在一个场景中增加一个Prefabs,你就实例化了一个Prefabs。所有Prefabs实例都是Prefab的克隆,只要Prefabs原型发生改变,所有的Prefabs实例都会产生变化。
创建:
将Hierarchy中的游戏对象拖到Asset下;在project点create,然后再拖对象过来。
EG:
//脚本绑定在cube上,为cube添加Box collider,Is trigger指接受碰撞,为小球Sphere增//加Rigidbody,使能够下落,然后增加Sphere Collider.如果此时将cube勾去Mesh Render,//即会变透明,下面的代码即可显示:小球下落,碰撞,重回原处,下落。
//注意:碰撞双方不能都是Mesh Collider,会检测不到碰撞,如果一定要,勾选其中一个的Convex
public GameObject prefab;
void OnTriggerEnter(Collider col) {
//注意此处第一个小球的名字为Sphere,而后来克隆的小球名字都为Sphere(Clone)
if (col.gameObject.name == "Sphere" || col.gameObject.name == "Sphere(Clone)"){
Destroy(col.gameObject);//销毁小球
}
prefab = Instantiate (Resources.Load("Sphere")) as GameObject;
}//实例化小球预设,我们从resources文件夹下载入预设
Unity 内置GUI的特点:将控件显示,事件响应都放在OnGUI函数中
实际,这种方式不够灵活且执行效率低,一般是采用第3方的NGUI插件来制作游戏界面
GUI.Label://没有框的
GUI.Label(new Rect(300,40,40,40),"你好");//X,Y,width,height,第2个参数显示文本内容
GUI.Button:
if (GUI.Button(new Rect(300,40,40,40),"你好")){...}
//通过在OnGUI里面判断GUI.Button是否返回true,显示是否按下
GUI.TetxField:
txt=GUI.TextField(new Rect(300,40,40,40),txt,10);
//第2个参数表示输入框显示的内容,最后一个参数表示最大字符数
控件:
public float a,b,c,d;
void OnGUI() {
a = GUI.VerticalSlider (new Rect(0,50,200,200),a,0f,100f); //可以滑动的。a表示当前
b = GUI.HorizontalSlider (new Rect(500,60,200,200),b,0f,100f);//最小和最大
c = GUI.VerticalScrollbar (new Rect(0,100,200,200),c,100f,0f,100f);//第三个是size
d = GUI.HorizontalScrollbar (new Rect(500,100,200,200),b,100f,0f,100f);//不能滑
}
//大部分GUI控件都可以通过GUILayout绘制,自动计算位置
GUILayout.Button ("wooo");
脚本控制对象的变换:
①obj.transfrom.position = new Vector3(x,x,x) //这个是移动到指定位置
② obj.transform.Rotate(new Vector3(x,x,x))
③obj.transform.Translate(new Vector3(x,x,x)) //这个是平移
④obj.transform.localScale = new Vector3(x,x,x) //改变大小
注意:Vector3是指三维空间的向量,方向:
Vector3.left,Vector3.right x轴方向Vector3.up,Vector3.down y轴方向
Vector3.forward,Vector3.back z轴方向
常用工具类:
Time类:Time.time:
游戏开始到现在的游戏时间:Time.deltaTime:
update方法中完成上一帧消耗的时间:
Time.fixedTime: FixedUpdate方法中固定消耗时间的综合(可以通过Edit->project setting->Time去设置)
Random.Range(min,max):
返回最大和最小之间的一个数(包括最小值,不包括最大值)
Mathf类:Mathf.abs,Mathf.Sin()....
unity3d基础02的更多相关文章
- javascript基础02
javascript基础02 1.数据类型 数据类型的描述在上篇的扩展中有写到链接 由于ECMAScript数据类型具有动态性,因此的确没有再定义其他数据类型的必要.这句话很重要. 如果以后再数据类型 ...
- javaSE基础02
javaSE基础02 一.javac命令和java命令做什么事情? javac:负责编译,当执行javac时,会启动java的编译程序,对指定扩展名的.java文件进行编译,生成了jvm可以识别的字节 ...
- 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...
- java基础学习05(面向对象基础02)
面向对象基础02 实现的目标 1.String类的使用2.掌握this关键字的使用3.掌握static关键字的使用4.了解内部类 String类 实例化String对象一个字符串就是一个String类 ...
- 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用
085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...
- 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字
084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...
- 083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法
083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法 本文知识点:构造方法-带参构造方法 说明:因为时间紧张, ...
- 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法
082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...
- day32-线程基础02
线程基础02 3.继承Thread和实现Runnable的区别 从java的设计来看,通过继承Thread或者实现Runnable接口本身来创建线程本质上没有区别,从jdk帮助文档我们可以看到Thre ...
随机推荐
- ubuntu 64位android项目报错的解决方案,打开64位 Ubuntu 的32位支持功能
ubuntu的64位下的android环境,说实话,还真得费点精力了,解决一个问题,又出来一个新问题. 小编昨天刚好不容易将android的环境搭建好了,这不,刚建了个项目,直接就报错,下面是罗列出的 ...
- JavaScript基础知识(1)
表单的确认 : 客户端确认 --减少服务器负载 --缩短用户等待时间 --兼容性难 服务器端确认: ----统一确认 ----兼容性强 ----服务器负载重 JavaScript基本的写法: ...
- 非常好的Java反射例子
1.Java反射的概念 反射含义:可以获取正在运行的Java对象. 2.Java反射的功能 1)可以判断运行时对象所属的类 2)可以判断运行时对象所具有的成员变量和方法 3)通过反射甚至可以调用到pr ...
- input覆盖select实现select可写可选择
1.有时需要一个select选择框,但是对select选择框希望是既可以选择也可以进行输入.下边的代码就是在select选择框上放了一个input框,覆盖在select上面.实现伪装的select效果 ...
- comboBox的多选框之疑难杂症——逗号篇
提笔写正文之前,首先要再次提醒一下自己,因为总是记不住,以至大神同事们都开始用“嫌弃”的眼光看自己了——遇到问题,自己去解决,没有什么问题是解决不掉的,不要在没认真努力思考之前就去麻烦大神同事,切记切 ...
- 用js实现返回上一页
<a href="javascript :;" onClick="javascript :history.back(-1);">返回上一页</ ...
- PDF 补丁丁 0.4.1.804 测试版发布:合并文件夹的图片和PDF文件,自由生成多层次书签
新的测试版增强了合并文件的功能,可以合并文件夹内的图片和PDF文件,还可以在合并文件列表上直接指定与合并文件对应的PDF书签标题.通过拖放文件项目生成多层次的PDF书签.如下图所示: 另外,新的测试版 ...
- Java: constructor 构造代码块
构造器与类同名 每个类可以有1一个以上的构造器 构造器可以有0个,1个或者多个参数 构造器没有返回值,不可以写return 构造器总是伴随着new操作一起调用 构造函数的作用:可以用于给对象进行初始化 ...
- qml json 解析到 ListView
https://github.com/kromain/qml-utils/tree/master/JSONListModel 非常棒!! 实现的原理如下文: http://goessner.net/a ...
- git 安装或者更新
1. 安装编译git时需要的包 # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel # yum in ...