分类:Unity、C#、VS2015

创建日期:2016-04-16

一、简介

1、常用的C#数据类型

这里简单介绍用Unity开发游戏时,最常用的一些数据类型。

(1)基本类型

int、float、string、bool

(2)数组

public string[ ] familyMembers = new string[ ]{"Greg", "Kate", "Adam",

"Mia"} ;

public GameObject[ ] carsInTheScene = GameObject.FindGameObjectsWithTag("car");

(3)List泛型列表

public List<string> list=new List<string>();

……

list.Add("a1");

2、其他数据类型说明

(1)ArrayList

优点是可存储任意类型的数据列表,缺点是其效率没有List泛型列表效率高。

public ArrayList arraylist=new ArrayList();

……

arrayList.Add(10);

arrayList.Add("abc");

(2)Hashtable

注意:即使将其声明为public,在Unity的检视器中也不可见。所以如果使用它,一般将其声明为private,供脚本内部使用。

private Hashtable h=new Hashtable();

……

h.Add("playerName","aa");

h.Add("gender","male");

h.Add("age",20);

3、变量声明时注意的问题

(1)声明为public的变量才能在检视器(Inspector)中可见。

(2)声明为public的变量会在检视器(Inspector)中自动变为属性名。

(3)避免使用含义不明确的变量名。例如:name、speed、score最好改为用playerName,carSpeed,opponentScore来代替,因为name看不出是谁的名字,玩家的?敌人的?如果是多个玩家、多个敌人更不明白是谁的名字了。

二、初学者容易犯迷糊的问题

1、应该将脚本文件添加到哪

可将脚本文件添加到任何游戏对象(GameObject)中。

GameObject是其他游戏对象的基类(GameObject继承自Object类)。换言之,Unity中除了Object以外的所有其他组件,都是从GameObject继承的。

2、脚本执行的顺序

Start():开始运行游戏时调用一次,此时还没有调用Update()。

Update():每一帧都会调用一次,一般利用它更新场景参数。

LateUpdate():每一帧调用Update()后都会调用一次,一般利用它更新相机参数。

FixedUpdate():每经过一个固定的物理时间间隔都会调用一次,一般利用它更新成绩、能量等参数。

Awake():开始运行游戏时,在Start()之前调用一次。一般利用它初始化参数。

3、怎么知道会自动调用哪些方法

在VS2015的脚本编辑状态下,鼠标右击选择【Implement MonoBehabious】:

然后在弹出的窗口中勾选要添加的方法(这些都是Unity自动调用的方法):

也可以一次选择多个方法,选择后单击【OK】,VS2015就会自动生成相关的代码。

4、哪种写法好

下面举例解释,虽然例子简单到没有任何意义,但是能让你很快明白,特别是获取组件时更是如此。

功能需求:定义并修改某个值(初始化),修改以后,后面一直都使用这个值。

笨的写法(效率非常低):

public void Update()

{

int age = 25;

}

“笨”的原因:这样每一帧都会执行一次定义并赋值,导致效率很低。

应该是(只执行1次):

private int age;

public void Start()

{

age = 25;

}

三、MonoBehaviour类

MonoBehaviour是Unity中一个非常重要的类,它定义了基本的脚本行为,所有的脚本类均需要从它直接或间接地继承,脚本必然事件就是从MonoBehaviour继承而来。

在VS2015中鼠标右击MonoBehaviour类,然后选择【转到定义】可观察该类的细节。

1、针对特定事件的响应函数

除了必然事件以外,MonoBehaviour还定义了对各种特定事件(例如鼠标在模型上单击,模型碰撞等)的响应函数,这些函数名称均以On作为开头。

下面是常用的针对特定事件的响应函数:

2、通过变量访问组件

编写脚本的目的是用来定义游戏对象(GameObject)的行为,因此会经常需要访问继承自游戏对象(GameObject)的各种组件并设置组件参数。对于系统内置的常用组件,Unity提供了非常便利的访问方式,只需要在脚本里直接访问组件对应的成员变量即可,这些成员变量定义在MonoBehaviur中并被脚本继承了下来。

下面是常用的组件及其对应的变量:

注意:如果对象不存在对应的组件,则该组件对应的变量值为null。

四、利用调试模式寻找合适的初始值

在调试模式下(即:按播放按钮)运行时,可直接在检视器(Inspector)中修改属性的值,调试结束后(即:再次按播放按钮)这些属性的值会自动还原为原来的值。

通过这种方式,不必每次都编译运行,就可以方便地给脚本中的变量找到合适的初始值。找到后结束调试,然后再修改脚本中变量的初始值就行了。

【Unity】6.1 Unity中的C#脚本基础知识的更多相关文章

  1. bash&nbsp;shell笔记1&nbsp;脚本基础知识

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/505644 * ...

  2. 什么是Shell?Shell脚本基础知识详细介绍

    这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...

  3. Java中实现异常处理的基础知识

    Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...

  4. shell 脚本基础知识详细介绍(二)

    SimonSu 博客 评论墙 读者墙 链接 关于 linux中的sh脚本语法 玩linux都知道sh脚本的方便,但如何编写sh脚本却是像我这样的新手和菜鸟的难题.能不能编写得出来是一回事,了不了解又是 ...

  5. shell脚本基础知识以及变量

    一.基础知识 1.shell脚本的格式注意事项 第一行(一般必须写明):指定脚本使用的shell(若不写明也不影响脚本的执行,系统会自动以sh解析脚本)."#!/bin/bash" ...

  6. 守护线程在logback中的使用 - 论基础知识的重要性

    守护线程在logback中的使用 先说问题,在java应用中,logback的异步Appender是怎么在主线程结束后,停下来的? 复盘 我在一个logback的测试用例中,写了这样的代码和logba ...

  7. shell脚本基础知识

    虽然现在能在Linux系统下生存,但是自觉效率太低,和高手有很大的差距. 这就是关于Linux的知识太过匮乏,有很多事情知道该怎么做,但是就是没法在Linux下实现,为了提升工作效率,必须要接触Lin ...

  8. Linux运维之shell脚本基础知识

    1.bash中的算术运算 let运算符 [root@:vg_adn_tidbCkhsTest ~/tidb-bench/sysbench]#echo $i [root@:vg_adn_tidbCkhs ...

  9. Shell脚本基础知识详细介绍(一)

    Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种 ...

随机推荐

  1. sparkmllib矩阵向量

    Spark MLlib底层的向量.矩阵运算使用了Breeze库,Breeze库提供了Vector/Matrix的实现以及相应计算的接口(Linalg).但是在MLlib里面同时也提供了Vector和L ...

  2. sshd服务分析

    00.阐述 sshd 服务 基本上,所有的 ssh 相关设定都放在 /etc/ssh/sshd_config 里面!不过,每个 Linux distribution 的预设设定都不太相同, 所以我们有 ...

  3. 高效编写微信小程序

    原文:https://isux.tencent.com/high-performance-wechat-app-development.html 前言 微信小程序是一个工程,就和盖房子一样,打好了地基 ...

  4. Receiver not registered.

    1. 在MessageListActivity中出现异常:Receiver not registered. 07-16 11:15:47.881: E/AndroidRuntime(32361): F ...

  5. hihocoder第196周

    此题解法:动态规划,倒骑毛驴. 在使用动态规划的时候,如果正着求难求,可以考虑倒着来. 这道题坑不少,自己代码能力太弱了,写代码的过程中总是容易犯细节错误.虽然大的方向是对的,但是小坑非常致命! 比如 ...

  6. Java爬虫框架调研

    Python中大的爬虫框架有scrapy(风格类似django),pyspider(国产python爬虫框架). 除了Python,Java中也有许多爬虫框架. nutch apache下的开源爬虫程 ...

  7. 重写Checkbox 改写选择框的大小

    /* 作者:Starts_2000 * 日期:2009-07-30 * 网站:http://www.csharpwin.com CS 程序员之窗. * 你可以免费使用或修改以下代码,但请保留版权信息. ...

  8. is-a,has-a,like-a是什么 sql server中,N''表示什么意思? 关于SQL SERVER的N前缀的理解

    https://blog.csdn.net/ooppookid/article/details/51174122#commentBox 1.is-a,has-a,like-a是什么 在面向对象设计的领 ...

  9. error nr.1045 access denied for user 'root'@'localhost' (using passwd:no)

    在windows上卸载了mysql,再次重新安装的时候运行失败,并报以下错误: 解决办法: 1.服务里面停止Mysql服务. 2.卸载Mysql,删除MySQL的安装目录. 3.此外还要删除以下目录的 ...

  10. proguard的简单配置说明

    #需要转换的jar文件路径-injars 'D:\fs-np.jar'#转换后的jar文件名称-outjars 'D:\fs-np-sec.jar' #关联的第三方jar-libraryjars 'C ...