[原]Unity3D深入浅出 - 脚本开发基础(Scripts)

常用脚本事件:

Update:每帧调用一次

Start:在第一次Update执行前调用

Awake:脚本实例在创建时调用

FixedUpdate:每个固定物理时间间隔调用一次

LateUpdate:每帧调用一次,在Update之后

MonoBehaviour类:

MonoBehaviour类是uniyt中非常重要的类,定义了基本的脚本行为,所有脚本类均需要从它直接或间接继承。MonoBehaviour还定义了对各种特定事件的响应函数,这些函数名均以On作为开头,下面是一些常用的事件响应函数。

OnMouseEnter:鼠标移入GUI控件或碰撞体时调用

OnMouseOver:鼠标停留~~~

OnMouseExit:鼠标移除~~~

OnMouseDown:鼠标按下~~~~

OnMouseUp:鼠标释放~~~

OnTriggerEnter:当其他碰撞体进入触发器时调用

OnTriggerExit:~~~~~~~~离开~~~~~~~~

OnTriggerStay:~~~~~~~停留~~~~~~~~~

OnCollisionEnter:当碰撞体或者刚体与其他碰撞体或者刚体接触时调用

OnCollisionExit:~~~~~~~~~~~~~~~~~~~~~~~~离开时~~~

OnCollisionStay:~~~~~~~~~~~~~~~~~~~~~~~~保持接触时~~~

OnControllerColliderHit:当控制器移动时与碰撞体发生碰撞时调用

OnBecameVisible:对于任意一个相机可见时调用

OnBecameInvisible:对于任意一个相机不可见时调用

OnEnable:对象启用或者激活时调用

OnDisable:对象禁用或者取消激活时调用

OnDestory:脚本销毁时调用

OnGUI:渲染GUI和处理GUI消息时调用

脚本和组件交互:

一个对象由若干个组件组成,通常需要利用脚本来访问对象的各种组件并设置组件的参数。对于系统内置的常用组建,Unity提供了非常便利的访问方式,只需要在脚本里访问组件对应的成员变量即可,这些成员变量定义在MonoBehaviour中并被脚本继承了下来。

常用组件以及对应的变量如下。

组件名称 变量名 组件作用
Tranform tranform 设置对象的位置,旋转,缩放
Rigidbody rigidbody 设置物理引擎的刚体属性
Renderer renderer 渲染物体模型
Light light 设置灯光属性
Camera camera 设置相机属性
Collider collider 设置碰撞体属性
Animation animation 设置动画属性
Audio audio 设置声音属性

注意:如果对象上不存在某组件,则返回null。

访问不属于商标中列出的组件,或者是访问对象上的脚本(脚本属于自定义组件),通过如下方式访问来得到组件的引用:

GetComponent :得到组件

GetComponents:得到组件列表

GetComponentlnChildren:得到对象或对象子物体上的组件

GetComponentsInChildren:得到对象或对象子物体上的组件列表

注意:这几个函数都比较耗时,因此一般不要在Update函数中使用,应该在外部定一个接受组件引用的对象,在Start函数中使用GetComponent函数来获取组件引用。

示例:在一个cube里有一个move.cs脚本,在move.cs脚本中获cube的Tranform组件

Tranform c_tranform;
Move move;
void Start(){
  //第一种方式
  c_tranform = tranform;
  //第二种方式
  c_tranform = GetComponent<Transform>();

   move = GetComponent<Move>();
 }

void Update{
}

访问场景中的对象:

在unity3d开发中,脚本不但需要访问脚本所在对象的组件,还经常需要访问其他的对象:

1.通过名称来查找:使用函数GameObject.Find,如果场景中存在指定名称的对象,则返回该对象的引用,否则返回null,如果存在多个同名的对象,则返回第一个对象的引用。

GameObject cube = GameObject.Find("MyCube");

2.通过标签来查找:GameObject.FindWithTag,如果场景中存在指定标签的对象,则返回该对象的引用,否则返回null,如果多个对象使用同一个标签,则返回第一个对象的引用。

注意:与GetComponent一样,GameObject.Find和GameObject.FindWithTag也是比较耗时的参数,因此不建议在update函数中调用它们,而是在初始化中查找一次后保存在变量中。

协同程序(Coroutine):

Coroutine也成为协同程序协程,可以和主程并行运行,和多线程类似,但是在任一制定时刻只会有一个协同程序在运行,别的协同程序则会挂起。可以用来实现让一段程序等待一段时间后继续运行的效果。

协同程序(Coroutine)的相关函数如下:

  • StartCoroutine:启动一个协同程序
  • StopCoroutine:停止一个协同程序
  • StopAllCoroutine:终止所有协同程序
  • WaitForSeconds:等待若干秒。
  • WaitForFixedUpdate:等待知道下一次FiexdUpdate调用。

javascript示例:

function Start()
{
    print("starting "+Time.time);
    yield WaitAndPrint();//启用一个协同程序
    print("done "+Time.time)
}

function WaitAndPrint()
{
    yield WitForSeconds(5);//等待5s
    print("waitandprint "+Time.time)

}

C#示例:

IEnumerator Start () {
        Debug.Log("等待5s "+Time.time);
        yield return StartCoroutine(WaitMethod());
}

IEnumerator WaitMethod()
{
        yield return new WaitForSeconds(5f);
        Debug.Log("已经等待5s "+Time.time);
}

这里注意,C#中的协同函数的返回类型必须为IEnumerator,yield要用yield return来替代,并且启动协程用StartCoroutine()函数。

时间: 2024-08-09 10:48:27

[原]Unity3D深入浅出 - 脚本开发基础(Scripts)的相关文章

[原]Unity3D深入浅出 - 认识开发环境中的自带的Package资源包

Character Controller:角色控制器 Glass Refraction(pro only):玻璃反射资源包 Image Effects :图像效果资源包 Light Cookies:光效资源包 Light Flares:光晕资源包 Particles:粒子效果资源包 Physic Materials:物理材质资源包 Projectors:幻灯机效果资源包 Scripts:脚本资源包 Skyboxes:天空盒资源包 Standard Assets(Mobile):标准资源包 Ter

[原]Unity3D深入浅出 - 认识开发环境中的Layers面板

Layers(分层)下拉列表:用来控制Scene视图中游戏对象的显示,在下拉菜单中为勾选状态的物体将显示在Scene视图中. Everything:显示所有的游戏对象 Nothing:不显示任何游戏对象 Default:显示没有任何控制的游戏对象 TransparentFX:显示透明的游戏对象 Igonore Raycast:显示不处理投射事件的游戏对象 Water:显示水对象 EditLayers:编辑层 尊重他人劳动成功,转载请注明出处:http://www.cnblogs.com/tong

[原]Unity3D深入浅出 - 认识开发环境中的RenderSettings面板

Fog:在Scene中开启雾效果 Fog Color:雾的颜色 Fog Mode:雾效果的模式,Linear(线性雾效果) Exponential(均匀分布的雾效果)  Exp2(越远越看不清楚)三种类型 Fog Density:雾效果的密度 Linear For Start:雾的起始距离 Linear For End:雾的结束距离 Ambient Light:环境光设置 Scybox Material:天空盒材质 Halo Strength:光晕的强度 Flare Strength:耀斑强度

[原]Unity3D深入浅出 - 认识开发环境中的Project面板

前面几个是用来创建脚步的,从Prefab说起: Prefab:预设物体,若一个Object在Scene中多处用到,即可选择为改对象创建一个Prefab.创建一个Prefab后,将源Object拖拽置新建的Prefab下,即可在场景中多处使用,且在修改任意一处,Apply后即可修改所有的形态. Material:材质,可自己设定贴图等. Animation:可新建一个动画剪辑 Cubemap:立方体贴图 Lens Flare:可用来模拟太阳光晕效果,可拖置光源的Flare属性下. Custom F

[原]Unity3D深入浅出 - 认识开发环境中的GameObject菜单栏

Create Empty:创建空对象 Create Other:创建其他对象 Particle System:创建粒子系统 Camera:创建相机 GUI Text:GUI文本 GUI Texture:创建GUI贴图 3D Text:创建3D文本 Directional Light 方向光(太阳光) Point Light 点光源(灯泡) Spot Light 聚光灯(手电筒) Area Light  Pro版才有 只能用来烘培Lightmap Cube:创建正方体 Sphere:创建球体 Ca

[原]Unity3D深入浅出 - 认识开发环境中的Component(组件)菜单

Component(组件)是用来添加到GameObject对象上的一组相关属性,本质上每个组件都是一个实例,比如在Cube上添加一个Mesh网格,即面向对象的思维方式可以理解成Cube对象里包含了一个Mesh对象. Component主要包含以下组件:  Mesh:添加网格类型的组件 Mesh Filter:网格过滤器 Text Mesh:文本网格 Mesh Renderer:网格渲染器 Effects:添加特效类型组件 Particle System:粒子系统 Trail Renderer:拖

[原]Unity3D深入浅出 - 之碰撞体(Colliders)

通常Colliders会与Rigidbody一起使用,没有添加碰撞体的刚体会彼此相互穿过. 常用碰撞体有以下几种: Box Collider:盒子碰撞体,是一个立方体外形的碰撞体,可调整为不同大小的长方体,一般可用作门,墙及平台等,也可用于交通工具的外壳.最适合的是使用在盒子和箱子上. Is Trigger:触发器,勾选后可用于触发事件,且将被物理引擎锁忽略. Material:材质,采用不同的Physics Material决定了碰撞体与其他对象的交互形式. Center:碰撞体在对象局部坐标

[原]Unity3D深入浅出 - 粒子系统(Particle System)

粒子系统是在三维控件渲染出来的二维图像,主要用于烟,火,水滴,落叶等效果.一个粒子系统由例子发射器.粒子动画器和粒子渲染器三个独立的部分组成. Unity中自带了一些粒子效果,在Assets>ImportPackage>Particles,即可将Prticles.UnityPackage导入到项目中,这些粒子效果包括:Dust(沙尘).Fire(火焰).Water(水).Smoke(烟雾).Sparkles(闪光),还有一些粒子资源 Sources.Misc(杂项),如下图 随便拖出来几个 接

[原]Unity3D深入浅出 - 光源组件(Light)

Unity中提供了四种光源: Directional light: 方向光,类似太阳的日照效果. Point light: 点光源,类似蜡烛. Spotlight: 聚光灯,类似手电筒. Area Light:区域光,无法用作实时光照,一般用于光照贴图烘培. 接下来介绍光源的参数:如下图 Type:可以选择以上介绍的四种光源类型 Range:设置光源范围的大小,从光源对象的中心发射的距离.只有Point和Spotlight有该参数. Color:光源的颜色 Instensity:光源的强度 Co