当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > unity3D中的C#编程入门

unity3D中的C#编程入门 时间:2018-09-28      来源:未知

第一:Unity3D中的C#脚本与.net中的C#写法的区别

1. Inherit from MonoBehaviour

继承自MonoBehaviour

所有的行为脚本必须从MonoBehaviour继承(直接的或间接的).在JavaScript 中这个是自动完成的,但是在C#或Boo中,必须显示注明.如果你通过Asset -> Create -> C Sharp/Boo Script创建脚本,系统模版已经包含了必要的定义.

public class NewBehaviourScript : MonoBehaviour {...} // C#

class NewBehaviourScript (MonoBehaviour): ... # Boo

2. Use the Awake or Start function to do initialisation.

使用Awake或Start函数初始化.

Awake和Start的不同之处在于,Awake是在加载场景时运行,Start是在第一次调用Update或FixedUpdate函数之前被调用,Awake函数运行在所有Start函数之前.

3. The class name must match the file name.

类名字必须匹配文件名.

JavaScript中类名被隐式的设置为脚本的文件名(不包含文件扩展名).在C#和Boo中必须手工编写.

4. Coroutines have a different syntax in C#.

C#中协同程序有不同的句法规则.

Coroutines必须是IEnumerator返回类型,并且yield用yield return替代.

using System.Collections;

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

// C# coroutine // C# 协同程序

IEnumerator SomeCoroutine () {

// Wait for one frame // 等一帧

yield return 0;

// Wait for two seconds // 等两秒

yield return new WaitForSeconds (2);

}

}

5. Don't use namespaces.

不要使用命名空间

目前Unity暂不支持命名空间.或许未来版本会有.

6. Only member variables are serialized and are shown in the Inspector.

只有序列化的成员变量才能显示在检视面板

私有和保护变量只能在专家模式中显示.属性不被序列化或显示在检视面板.

7. Avoid using the constructor.

避免使用构造函数

Unity3D C#脚本初始化不要放到构造函数中,而是放到Start()方法中。

不要在构造函数中初始化任何变量.要用Awake或Start函数来实现.即便是在编辑模式,Unity仍会自动调用构造函数.这通常是在一个脚本编译之后,因为需要调用脚本的构造函数来取回脚本的默认值.我们无法预计何时调用构造函数,它或许会被预置体或未激活的游戏对象所调用.

单一模式使用构造函数可能会导致严重后果,会带来类似随机的空参数异常.

因此,如果你想实现单一模式不要用构造函数,要用Awake函数.事实上,你没必要在继承自MonoBehaviour的类的构造函数中写任何代码. Unity3D C#脚本 get/set写法属性不被识别,直接public字段就能当属性用,private或者不写修饰符就是私有字段。

8 .脚本中文问题:代码中有中文的话会有乱码问题。到资源管理器中打开项目的Assets文件夹(或点右键Show In Explorer),用unity3d目录下的Editor\Data\Tools\UniSciTE下的UniSciTE.exe打开cs文件,File→Encoding改为UTF-8 with BOM,敲个空格造成修改,然后保存即可(可以修改cs文件打开方式更简单)。好一开始就修改编码,否则会很麻烦。

完整的代码:

第二:这里基本讲解一下当打开一个脚本自带的两个函数Start、和Update的用法和意思

1.Start

对于这个函数我想不用多讲,大家从字面意思就能理解,程序开始执行时调用的函数。上面提到Unity3D中初始化不能放在构造函数中要放到Start函数中。从某种意义上讲可以理解为Unity3D把传统的构造函数用这里的Start来替换了(这里完全属于个人理解如果不理解不正确希望大神指出)。所以我们把Start理解为构造函数自然就容易理解为什么初始化要放到Start中了。这个函数主要用于对一些游戏资源的初始化用的。我相信这个函数大家容易理解,这里都不多讲了。 重点看下面一个。

2.Update

这个函数可以说是一个核心函数。这里先问一下?您知道什么是帧的概念吗?如果处理过视频、弄过ps、flash之类的做动态的视频或者动画的朋友可能对这个帧比较了解。我这里简单描述一下帧的概念。大家先回想一下很久以前的那种电影是怎么做的?

没错就是你看到的这样一张一张连接而成的,然后快速浏览每一张就形成了动画。我们现在看到的视频、Gif等等一些都是类这种电影的胶片一张一个图像一个图像拼接的,然后每秒播放不低于多少张就会形成动画。讲了这么多那什么是帧呢?帧就可以形象的理解为这电影胶卷的每一个图片。

我这里引用一下百度百科

帧——就是影像动画中小单位的单幅影像画面,相当于电影胶片上的每一格镜头。 一帧就是一副静止的画面,连续的帧就形成动画,如电视图象等。

你这时就会问讲这么多废话,Update到底是怎么回事还没说呢?先别忙,如果您对帧这个概念不熟悉那么你对这个函数的理解就会还停留在.net中的事件驱动的那个机制。从字面理解Update就是刷新、更新的意思,那它刷新什么更新什么呢?我们用的Unity3d程序可以看作就是一个电影,当你一运行它,他就开始一帧一帧开始放映,每播放一帧就会调用一下这个Update函数。还有另一个函数fixupdate 是固定时间反复刷新,固定时间可以在Edit-> Project Settings ->Time进行设置。

Debug.Log()函数可以在程序中增加打印,在Console面板可以看打印输出,方便程序定位。

上一篇:Unity3D基础—基本物体和基本组件介绍

下一篇:javascript闭包阐述

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部