在unity中,游戏物体的行为是通过组件来驱动的,我们可以通过内建的组件来给我们的游戏物体组合各种能力,尽管如此,要知道我们的需求永远是动态的,很快我们就会发现,内建的组件功能已经无法满足我们的需求,这时就需要我们使用脚本来创建新的组件。通过脚本的形式,我们就可以自定义组件的属性及其相应方式。

在新版本的Unity中(笔者当前版本Unity2017.3f)仅原生支持C#,至于这个语言的特性,我们在C#基础篇中已经有过详细的介绍,这里便不再赘述。

当然出了添加这种“.cs”后缀的脚本文件作为组件的方式外,我们还可以使用以”.DLL”为后缀的动态链接库文件来作为组件,当然前提是该dll符合Unity的限制规范,比如在2017.3版本中,我们可以使用.Net3.5版本的dll,也可以使用.Net4.6版本的dll(该功能还处于实验阶段,选择后会提示你重启Unity)。如下图

设置兼容版本为.Net 4.6

创建脚本:

至于.Net 3.5和.Net 4.6有什么区别,如何创建dll等,我们将后续再做深入的探究。我们接着说如何创建一个脚本,不同于其他需要外部导入的资源,脚本文件我们可以直接在unity内部创建,在顶部的菜单栏中依次选择assets-create-c# script,在project面板就可以看到刚才创建的新脚本文件:NewBehaviourScript。刚创建时,脚本的名称呈高亮选中状态,这时是可以直接修改脚本名称的,修改后脚本的类名也会同步更改,我们将名称改为:MyTest

除了上面这种方式创建脚本文件,我们还可以直接在project面板下直接右键:create-c# script,或者在project页签下的create-c# script,一样可以实现脚本的创建。

剖析脚本:

我们双击打开刚创建的脚本,因为我们之前设置关联了VisualStudio(以下简称VS),因此我们的脚本将会默认使用VS打开。脚本的初始内容如下:

using UnityEngine;
public class MyTest : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}

语句using UnityEngine; 引用了UnityEngine的命名空间,这样我们才可以使用Unity引擎的内建类和方法。

MonoBehaviour属于引擎的内建类,我们新建的类继承于它,这样这个新建类就拥有了Unity引擎的一些特性能力,比如可以让这个脚本作为一个组件挂载到一个游戏对象上。需要注意的是,创建时的脚本名和类名必须一致,这样才能让这个脚本挂载到游戏对象上。

当然我们可以进一步剖析,鼠标点击Monobehaviour,右键转到定义(或者直接按键盘的F12键,在Mac系统上的VS是花键加D,这是一个最常用的功能,以后会频繁用到),这样我们就可以追溯这个类的结构。

进入MonoBehaviour类后我们可以发现这个类是由Behaviour派生而来,同样,我们可以F12继续追溯,Behaviour是有Component派生而来,这就很好的说明了为什么这个Monobehaviour类也是一个组件了。继续追溯,Component是由Object派生而来,而Object之上就没法继续追溯了,我们知道,在C#的同一类型系统中,Object就是造物主,所有类型(预定义类型,用户定义类型,引用类型和值类型)都是直接或者间接从Object继承的。关系图如下:

第8-15行,这里有两个函数:Start()和Update(),这俩也是unity引擎的内建函数,当然这里还涉及到一个周期函数的知识点,我们后面会详细剖析。在这两函数中我们可以添加自己的代码,比如在Start()方法中我们添加程序的一些初始化代码,像一些赋值操作,读取历史数据等等,在Update()方法中添加游戏对象每一帧的移动逻辑以及响应用户的输入等。

使用脚本:

我们上面创建的脚本在挂载到游戏对象上之前是不会有任何作用的,这时如果按下运行,什么也不会发生。如果我们希望脚本能驱动游戏对象来做点什么,那么我们就需要把这个脚本挂载到游戏对象上,我们可以将这个脚本挂载到Hierachy面板中的Main Camera上,将脚本直接拖放到Main Camera对象上,或者选中Main Camera然后点击insperctor面板的最底部Add Component按钮进行添加。如下图:

添加完成后,若此时我们运行程序,也是没有任何反应的,因为我们代码里并没有让unity做点什么。双击打开我们创建的那个脚本,然后在start()方法中,我们添加这样一句:Debug.Log(“Hello,world !”);并保存,Update我们用不到,就先删除它(注意,如果脚本中有没用到的空的update函数请及时清理掉,因为unity的机制会让它消耗一定的额外开销,即使很小,但是如果你的项目很大,你创建了成千上万个的时候,就不是一回事了,总之需要注意下这些小细节)。

using UnityEngine;
public class MyTest : MonoBehaviour {
void Start () {

Debug.Log("Hello,world !");

}
}

Debug.Log();方法可以让Unity的Console上打印出我们约定的消息。如果这时我们按下运行,我们就可以在最底部的Console上看到:Hello world !如果没看到Console,我们可以在顶部的菜单栏:Window-Console来呼出Console。

使用Debug类:
Debug类也是unity的内建类,当然这个类的作用不能等同于vs的断点debug,这是两码事。使用debug.log可以灵活的在任意我们想要的地方打印出日志,特别是在运行时可以实时输出我们想要的信息,在做一些简单的调试时,使用debug.log可以大大提高效率。下面列出一些基本的用法:
1.直接打印字符串:
Debug.Log("这是一条普通的Log信息");

2.字符串和变量组合:
int speed = 10;
Debug.Log("当前速度为:" + speed);

3.给字符串添加颜色标示:
Debug.Log("<color=red> 这是红色的Log </color>");

4.打印警示:
Debug.LogWarning("这是一个警告Log!");

5.标示错误警告。这里需要说明的是,尽管打印了错误警告,但是并不会影响程序的运行,因为这个只是一个日志信息而已。
Debug.LogError("这是一个ERROR警告!");

属性面板 脚本_3.1 创建和使用脚本相关推荐

  1. python创建脚本文件_python创建文件备份的脚本

    制作文件备份 打开原文件 old_f_name = input("请输入备份的文件路径:") old_f = open(old_f_name, "r") 打开新 ...

  2. shell脚本给mysql创建表_shell脚本:实现MySQL创建数据库和删除数据库的脚本

    OS操作系统:CentOS release 6.8 (Final) [root@sky9896chapter11]# vi createdatabase.sh #批量创建数据库 #!/bin/sh P ...

  3. python调用脚本_3种python调用其他脚本的方法

    1.用python调用python脚本 #!/usr/local/bin/python3.7 import time import os count = 0 str = ('python b.py') ...

  4. Unity编辑器扩展 自定义脚本属性面板--基础篇

    开发中,如果使用插件会发现插件的组件,在属性面板上的设计非常方便,看着很高大上,他们是怎么做到的呢 基础 在Editor文件夹下,创建我们的属性面板编辑脚本 using UnityEditor的命名空 ...

  5. Inspector a ProgressBar(定制属性面板)

    一.定制进度条 这篇文章主要学习如何在Unity的Inspector中使用ProgressBar 普通属性面板预览 通常我们的属性面板如下 定制属性面板预览 而通过扩展成ProcessBar后 二.内 ...

  6. 用chrome的snippets片段功能创建页面js外挂程序,从控制台创建js小脚本

    用chrome的snippets片段功能创建页面js外挂程序,从控制台创建js小脚本 Chrome的snippets是小脚本,还可以创作并在Chrome DevTools的来源面板中执行. 可以访问和 ...

  7. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十四)制作主角属性面板及加点器

    游戏中会使用大量的菜单面板,而这些面板往往都带有选项卡.如果用Silverlight工具中的TabControl,则需要通过复杂的xaml重写模板来实现自定义样式,这一点时常让开发者头疼,毕竟界面的东 ...

  8. 普歌-允异团队-【Java实例】一起做一个简单的王者荣耀RPG吧!从设计思路到代码实现一条龙!-登录与注册(IO流)/记录时间/属性面板呈现

    [Java实例]-王者荣耀RPG-从设计思路到代码实现 前言 一.案例分析 1. 设计理念 2. 功能设计 (1)登录与注册 (2)游戏时间记录 (3)选择游戏模式 (4)游戏地图 (5)生物属性 二 ...

  9. ss一键搭建php,#二次更新# 基于宝塔面板开发SSPANEL魔改V3一键脚本

    二次更新说明,支持宝塔6.0版本.优化安装逻辑,提高安装成功率. 具体更新说明如下: 宝塔6.0添加网站默认地址进行了变动,例如添加域名 4ker.cc,默认站点名字变为了4ker_cc,如图所示: ...

最新文章

  1. R语言splines包构建基于logistic回归的自然样条分析:南非心脏病数据集、非线性:基函数展开和样条分析、你简单分析的不重要特征,可能只是线性不显著、而非线性是显著的
  2. numpy是python标准库吗_python – 找出Numpy是否使用了哪个BLAS库
  3. 5.3多线程条件变量
  4. 如何保存一个函数_如何表达一个“分段函数”之学习Matlab Function模块
  5. 注解配置声明式事务控制解析
  6. 40-400-035-运维-优化-pt-variable-advisor优化工具
  7. 源码生成网站,开发帮助网站
  8. AntColony 磁力搜索BT引擎的核心
  9. 新西兰计算机预科学费多少钱,去新西兰读预科需要多少费用?
  10. “三只猫,三分钟,捉三只老鼠,多少只猫,一百分钟,捉一百只老鼠”有感
  11. SOME/IP开源库Vsomeip分析
  12. luckysheet 只读模式和编辑模式
  13. 使用CSS设置重叠层次
  14. MongoDB 常见问题 - 解决找不到 mongo、mongod 命令的问题
  15. JAVA sleep函数如何用_转载:java中Thread.sleep()函数使用
  16. 在c程序语言中aph,C 语言试题
  17. 【力扣周赛】第346场周赛
  18. 韩国AI团队抄袭震动学界!1个导师带51个学生,还是抄袭惯犯
  19. VC正则表达式的使用(《VC知识库》)
  20. 截取字符串,含有汉字和字母,不能截半个汉字

热门文章

  1. java 简化判断_简化Java内存分析
  2. Java 8:默认方法解析规则
  3. jsf组件不显示_JSF组件库–质量不只是零缺陷
  4. coherence安装_在Oracle Coherence中分发Spring Bean
  5. 休眠身份,序列和表(序列)生成器
  6. TestNG:在一个测试类中使用@DataProvider依次运行测试
  7. 使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务
  8. 可搜索的文件? 是的你可以。 选择AsciiDoc的另一个原因
  9. Hadoop如何工作? HDFS案例研究
  10. Java 7中对String.substring的更改