Mono Develop脚本编辑器介绍

来源:互联网 发布:adobe ps mac 破解版 编辑:程序博客网 时间:2024/06/12 21:27

Mono Develop脚本编辑器介绍


Unity 自带脚本编辑器)


     1Unity3d目前支持三种语言的脚本程序,包括c#JavaScriptboo;其中使用最多为c#

 

     2、注意:

       (1)项目运行过程中的修改不会保存

       (2)脚本只能依附于游戏对象或由其他脚本调用才能运行

       (3)一个脚本可以放在多个游戏对象上面,是多个实例

       (4)一个脚本的多个实例和其他脚本之间互不干扰

 

     3、初始化不要放在构造函数中,而是放在start()方法中。

 

    4、放到游戏对象中的脚本(实例化)可以在Inspector中修改属性,get/set写法属性不被识别,直接public字段就能当属性用,不写修饰符就是私有private


创建、克隆、销毁游戏对象


程序(动态)创建游戏对象 

 

 eg: 

 GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); 

 cube.name = "cube1";//设定名字 

 cube.renderer.material.color = Color.red; 

 

程序(动态)克隆对象 

 eg:

 GameObject obj = (GameObject)Instantiate(cube); 

 

程序(动态)销毁对象 

 eg: 

 Destroy(obj,1); 


特点


1、动态创建出来的对象运行时在Hierarchy中可以看到。

2、克隆游戏对象产生复制对象的效率高,调用instantiate来生成对象,Destroyobj)是立即销毁游戏对象。

3、动态添加脚本的方法:只要把脚本名称传给AddComponen即可


给游戏对象添加名称、刚体、碰撞器


1给游戏物体添加名为FoobarScript的脚本

    GameObject.AddComponent ("FoobarScript");

2给游戏物体添加刚体

    Rigidbody  rb = GameObject.AddComponent ("Rigidbody"); 

3给游戏物体添加球体碰撞器

    SphereCollider  sc = GameObject.AddComponent ("SphereCollider");

 


常用核心类


GameObject

 

GameObjectUnity中一个很重要的角色。对GameObject学习能够让我们更好的进行Unity开发,今天我们就来学习一下GameObject这个概念——

 

在我们的Unity游戏中每一个对象都是一个GameObject,但是没有我们的指示,这些GameObject对象不会自己做任何事情。GameObject就像一个可以由我们自己定义的容器,我们让它包含什么样的属性,它就是一种什么样的GameObject——一个角色或者一个特效等等。

 

好的,这里就有一个问题了,既然游戏中的每个对象都是一个GameObject,我们又是如何来区分它们呢?

 

前面我们已经说过,GameObject就是一个容器。在这个空箱子中放不同的东西(属性),就组成了不同的对象类型。也就是说,游戏中需要什么的元素,我们都可以通过向GameObject中添加组件(Component)的方式来实现,当然,我们还可以通过脚本(Script)来创建自定义的组件。

 

本类包括了游戏对象所需要的属性和方法。 

 例如 :

 属性:transformrenderer、 isStatic 等。 

 方法:Find()FindWithTag()FindGameObejctWithTag()GetComponent()AddComponent()方法等。


获取游戏对象:

 

1)通过名称来查找游戏对象:

      GameObject  player = new GameObject("Player");

      GameObject  go=GameObject.Find(Player);

 

2)通过tag标签获取单个游戏对象:

    GameObject  go=GameObject.FindWithTag(Player);

 GameObject go=GameObject..FindGameObjectWithTag (Player);

 

3)通过游戏标签获取多组游戏对象:

GameObject[]  go=GameObject.FindGameObjectsWithTag (Player);

//这个操作比较耗时,把此操作放到Start()

 

Time

属性: deltaTime 

 

说明: 

 方法Update(): 受当前渲染效率的影响,有时快有时慢,帧率会变化,Update被调用的时间间隔就发生变化,Time. deltaTime获得自上次Update一来经历的时间,只应该在Update()中使用deltaTime OnGUIFiexedUpdate等里面不要用。 

 

示例:

using UnityEngine;

using System.Collections;

 

public class Time1 : MonoBehaviour {

float a=5.0f;

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

if (a>=0) {

a -= Time.deltaTime;

print(a);

}

}

}

 

Yield


Yield语句是一种特殊类型的Return(返回)语句,它可以确保函数在下一次被执行时,不是从头开始,而是从Yield语句处开始。

可以实现将一段程序延迟执行或者将其各个部分分布在一个时间段内连续执行。

 

示例:

void Start () {

     print("Start开始");

     StartCoroutine(Do());

     print("Do调用后");

}

 

 IEnumerator Do()

{

     print("Do开始");

     yield return  new WaitForSeconds(3.0f);

     print("暂停3秒后");

 }

 

 

消息传递函数


Message相关有3条指令:

SendMessage ("函数名",参数,SendMessageOptions) //GameObject自身的Script

BroadcastMessage ("函数名",参数,SendMessageOptions)  //自身和子ObjectScript

SendMessageUpwards ("函数名",参数,SendMessageOptions)  //自身和父ObjectScript

用于向某个GameObject发送一条信息,让它完成特定功能。

其实本质是调用那个GameObject里面的Script里面的函数,可以跨语言的,例如Javascript可以调用C#的函数,我已实验成功。

另外,如果GameObject本身有两个脚本,例如“move1”和“move2”,两个脚本内有同名函数例如“moveMe()”,会两个函数都执行一次。


更多精彩请点击 http://www.gopedu.com/article

0 0
原创粉丝点击