调试:

在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. SpringMVC--xxx.xml配置

    <!--configure the setting of springmvcDispatcherServlet and configure the mapping--> <servl ...

  2. NodeJS几个值得学习的开源框架

    1.Primus Primus,是Transformer的创造者,并且也被称为通用包装器实时框架.Primus里包含了大量的用于Node.js的实时框架,并 且它们都拥有各种不同的实时功能.此外,Pr ...

  3. [saiku] 连接 mondrain 数据源出错-空指针错误

    我的个亲娘,这个问题查半天终于查出来了. 一开始以为是配置的mysql的location连接有问题,各种修改啊各种尝试,还是不行. 好死不死报了空指针错误,让人无法下手. 后来发现是这样子的: 生成s ...

  4. PHP 高并发、抢票、秒杀 解决方案

    对于抢票.秒杀这种业务,我说说自己对这种高并发的理解吧,这里提出个人认为比较可行的几个方案:方案一:使用队列来实现可以基于例如MemcacheQ等这样的消息队列,具体的实现方案这么表述吧比如有100张 ...

  5. hdu----(5056)Boring count(贪心)

    Boring count Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  6. 循环语句for

    循环语句for 格式: for(int i=1/*初始条件*/;i<=100/*循环条件*/;i++/*状态改变*/) { //循环体,执行代码:(break:跳出循环体) } 给出初始条件,先 ...

  7. JSONP的学习(收集整理)

    JSONP和JSON之间有什么联系吗? JSON(JavaScript Object Notation) 是一种轻量级.可读的基于文本的的数据交换格式.,是一种轻量的数据交换开放标准.源于JavsSc ...

  8. QQ输入法评价

    用户界面: 用户可以通过登录QQ展现自己的QQ头像,可以点击头像显示用户信息,可以中英文切换,全半角切换,打开属性设置,以为软键盘 记住用户选择: 当用户使用QQ输入法时,QQ输入法可以记住用户当前的 ...

  9. 8种NOsql

    虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举. 但是NoSQL数据库之间的不同,远超过两 SQ ...

  10. linux apache 自动监护脚本

    1 首先安装curl yum install curl 2 编写shell vi restart_apache.sh 写入一下内容 #!/bin/bashURL="http://127.0. ...