分类: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&amp;nbsp;shell笔记1&amp;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. HashSet,TreeSet和LinkedHashSet的区别

    Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用eq ...

  2. SQLServer学习笔记&lt;&gt; 表连接查询----交叉连接、内连接、左连接、右连接

    (1)交叉连接(cross join)即我们所说的笛卡尔积.查询出满足两张表所有的记录数,A(3条记录),B(9条记录),A*B(27条记录). 比如:雇员表(HR.employees)和货运公司(S ...

  3. Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column is set to 0.

      1: /// <summary> 2: /// Write an algorithm such that if an element in an MxN matrix is 0, it ...

  4. 为什么设计模式在C++社区没有Java社区流行?

    我们发现设计模式在Java社区很流行,但是在C++社区却没有那么被关注,甚至有点被排斥,究竟是什么原因造成这个差异的呢?    昨天和同事讨论这个问题,最后得出几点原因:     (1)C++内存需要 ...

  5. DrawerLayout学习笔记

    基本步骤: 1>在XML中将DrawerLayout作为根视图 2>根视图中放两个View,第一个是主视图,即DrawerLayout隐藏的时候的视图,第二是就DrawerLayout的视 ...

  6. SpringCloud学习中遇到的一些bug

    There was a problem with the instance info replicator 错误原因: 该服务尝试将自己作为客服端注册 解决办法: 在application.yml配置 ...

  7. 解决刷新页面vuex store中数据丢失的问题

    **问题背景:**页面刷新后,vuex中的数据丢失.这是因为:js代码是运行在内存中的,代码运行时的所有变量.函数也都是保存在内存中的.进行刷新页面的操作,以前申请的内存被释放,重新加载脚本代码,变量 ...

  8. SELinux 是什么?

    一.SELinux的历史 SELinux全称是Security Enhanced Linux,由美国国家安全部(National Security Agency)领导开发的GPL项目,它拥有一个灵活而 ...

  9. poj2752seek the name, seek the fame【kmp】

    The little cat is so famous, that many couples tramp over hill and dale to Byteland, and asked the l ...

  10. mysql 给用户赋值权限

    解决办法 grant all privileges on *.* to joe@localhost identified by '1'; flush privileges; 拿 joe 1 登陆 附: ...