调试:

在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. jQuery clone()方法绑定事件

    先看如下代码: (function ($) { var div = $("<div></div>").css({width: "100px&quo ...

  2. Python顺序集合之 List

    Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ['Jen ...

  3. cf--------(div1)1A. Theatre Square

    A. Theatre Square time limit per test 2 seconds memory limit per test 64 megabytes input standard in ...

  4. Ajax请求中带有IPv6地址后的百分号的问题

    IPv6地址后的百分号: 对于连入网络但没有IPv6路由器或DHCPv6服务器的IPv6客户端,它们始终使用fe80::/64链路本地网络地址.如果运行Windows的计算机中有多个网络适配器连接到不 ...

  5. IO流 总结一

    字符流: FileReader FileWriter BufferedReader BufferedWriter readLine(); 字节流: FileInputReader FileOutput ...

  6. hadoop2.0 和1.0的区别

    1. Hadoop 1.0中的资源管理方案Hadoop 1.0指的是版本为Apache Hadoop 0.20.x.1.x或者CDH3系列的Hadoop,内核主要由HDFS和MapReduce两个系统 ...

  7. easyui numberbox不可编辑

    今天又遇到了给easyui中numberbox设置不可编辑的功能,在(http://www.jeasyuicn.com/api/docTtml/index.htm)API中找到了一个方法:

  8. 在浏览器中将表格导入到本地的EXCEL文件,注意控制内存

    if ($export_flag == 1) { $rr = $this->mdl->test($test); header("Content-Type: application ...

  9. linux shell中,单引号、 双引号,反引号(``),$()的区别

    一.单引号和双引号 首先,单引号和双引号,都是为了解决中间有空格的问题. 空格在linux中时作为一个很典型的分隔符,比如 string1=this is a string,这样执行会报错.为了避免这 ...

  10. Error initializing endpoint java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í??

    2010-5-18 22:00:38 org.apache.catalina.core.AprLifecycleListener lifecycleEvent 信息: The Apache Tomca ...