调试:

在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的更多相关文章

  1. javascript基础02

    javascript基础02 1.数据类型 数据类型的描述在上篇的扩展中有写到链接 由于ECMAScript数据类型具有动态性,因此的确没有再定义其他数据类型的必要.这句话很重要. 如果以后再数据类型 ...

  2. javaSE基础02

    javaSE基础02 一.javac命令和java命令做什么事情? javac:负责编译,当执行javac时,会启动java的编译程序,对指定扩展名的.java文件进行编译,生成了jvm可以识别的字节 ...

  3. 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...

  4. java基础学习05(面向对象基础02)

    面向对象基础02 实现的目标 1.String类的使用2.掌握this关键字的使用3.掌握static关键字的使用4.了解内部类 String类 实例化String对象一个字符串就是一个String类 ...

  5. 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用

    085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...

  6. 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字

    084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...

  7. 083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法

    083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法 本文知识点:构造方法-带参构造方法 说明:因为时间紧张, ...

  8. 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法

    082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...

  9. day32-线程基础02

    线程基础02 3.继承Thread和实现Runnable的区别 从java的设计来看,通过继承Thread或者实现Runnable接口本身来创建线程本质上没有区别,从jdk帮助文档我们可以看到Thre ...

随机推荐

  1. 【转】 C++ map的基本操作和使用

    1.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 2.map的功能 自 ...

  2. 【转】 C++ vector用法

    在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<in ...

  3. controller 监控Unix性能信息

    linux系统需要有RPC(Remote Procedure Call Protocol),远程过程调用协议,通过安装rpc.rstatd程序,启动其服务,就可以给远程机器提供信息,即Lr可以获取到该 ...

  4. mysql查询优化(持续更新中)

    1.        索引不会包含有NULL值的列 (1)   应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描 (2)   数据库设计时不要让字段的默认值 ...

  5. 文件I/O

    Linux顶层目录结构: /              根目录├── bin     存放用户二进制文件├── boot    存放内核引导配置文件├── dev     存放设备文件├── etc  ...

  6. 求平均排序MATLAB code

    A0=R(:,1:2:end); for i=1:17 A1=A0(i,:); p=sort(unique(A1)); for j=1:length(p) Rank0(A1==p(j))=j; end ...

  7. Play Framework介绍:主要概念(转)

    Play Framework是一个Rails风格的Full-stack Java Web框架. MVC模型 Play应用遵循Web架构使用的MVC架构模式. 它将应用分离到不同的层中:表现层(Pres ...

  8. PHP超级全局变量——Session 变量

    PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置.Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用. PHP Session 变量 当您运行一个 ...

  9. 利用ODBC从SQLServer向Oracle中导数据

    1.首先要在Oracle数据库中建对应的表,Oracle数据库中的字段类型和Sql Server 有所不同,Oracle中常用的有varchar2.integer.nchar.date,Sql Ser ...

  10. [转]Web开发的发展史

    之所以转这篇文章是因为它可以对web请求有大致的理解. 以下内容转自:http://www.open-open.com/news/view/19ed96a 英文原文: Full stack web d ...