属性面板 脚本_3.1 创建和使用脚本

8dae9174e5712076b534b21cb2d2228f.png

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

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

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

d3d8963cba9ae0d5a758ba2f7d2b3bb7.png
设置兼容版本为.Net 4.6

创建脚本:

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

bb67af76116ce7328caa3fe06685f853.png

除了上面这种方式创建脚本文件,我们还可以直接在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,这是一个最常用的功能,以后会频繁用到),这样我们就可以追溯这个类的结构。

db00b111dba2c0281bdb5cdf922d8882.png

进入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按钮进行添加。如下图:

f5a7d54afd2e255b20aa4930da03407a.png

添加完成后,若此时我们运行程序,也是没有任何反应的,因为我们代码里并没有让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。

ab99ff3b50ed87f0c68947bd648b3913.png


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

c7e4d114a9005910d79f284f063f7088.png


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

999a2f1e52244a9065dd961ead624502.png


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

d5b99cce70a6c35f83413d01aff2d543.png


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

85068905b77ce18871e5b0e30ab53248.png


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

383b9ee7d30c24757b5e66b79f60b74e.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue加跨域代理静态文件404_解决vue本地环境跨域请求正常,版本打包后跨域代理不起作用,请求不到数据的方法——针对vue2.0...

问题&#xff1a;在本地使用了proxyTable代理可以正常跨域请求后台数据&#xff0c;打包上传后就无法获得后台的json文件。查看了相关资料可以用nginx进行解决。还可以使用命名环境变量&#xff0c;请求的时候进行判断&#xff0c;话不多说上干货module.exports merge(prodEnv…

tomee_使用Vysper,TomEE和PrimeFaces将XMPP服务器嵌入JSF Web应用程序内部

tomee我有一个需要在完成某些工作时通知用户的应用程序。 它使用JSF和Primefaces&#xff0c;因此可以使用大气 &#xff08;也称为Push&#xff09;来实现这种通知。 但是另一个有趣的方法是使用嵌入在Java Web应用程序中的XMPP服务器。 好的&#xff0c;好的&#xff0c;您不…

板框导入_板框结构导入有问题?这几个问题最常见,附解决方法!

对于一些比较复杂的结构&#xff0c;Altium的处理能力有限&#xff0c;通常采用AutoCAD来进行设计&#xff0c;然后在Altium中执行菜单栏中“文件”→“导入”→DWG/DXF命令&#xff0c;选择需要导入的DXF文件即可。如果导入过程中出现了乱码&#xff0c;报错等问题要如何解决呢…

您如何使用硒来计算自动化测试的投资回报率?

跨浏览器测试是一种测试&#xff0c;需要大量的精力和时间。 通过不同的浏览器&#xff0c;操作系统&#xff0c;设备&#xff0c;屏幕分辨率测试Web应用程序&#xff0c;以评估针对各种受众的Web内容呈现的过程是一项活动。 特别是如果手动处理。 使用Selenium进行的自动跨浏览…

流量复制_详解Linux系统流量复制--gor、tcpcopy、nginx模块流量复制等

概述对于一些有并发要求的业务&#xff0c;特别是对接外部流量时&#xff0c;产品上线前一定要做的就是压力测试&#xff0c;但是常规的压力测试并不能覆盖所有情况。以gemeter、ab,、webbench、http_load为例&#xff0c;这些通过模拟请求的压测工具&#xff0c;只能发送特定的…

C语言天才!想法奇异?还是逼格满满?一份国外C语言写的传奇简历

C语言天才&#xff01;想法奇异&#xff1f;还是逼格满满&#xff1f;一份国外C语言写的传奇简历作者用代码更新了自己的简历&#xff0c;是不是很接地气&#xff0c;特符合程序员的逼格。这是一份可读可执行的语言源文件&#xff0c;也是作者编码风格的体现。C语言源码&#x…

hash值 更改git_Git切换版本

Git切换版本有三种方式&#xff1a;1.基于哈希值切换》基于哈希值切换(推荐)&#xff0c;命令&#xff1a;git reset --hard 哈希值&#xff0c;哈希值从哪来&#xff0c;git reflog查看下就知道了&#xff0c;切换版本后&#xff0c;git reflog会发现有两个HEAD&#xff0c;别…

fedora mysql_Fedora server 安装Mysql8

导读MySQL是一种关系数据库管理系统(RDBMS)&#xff0c;作为服务器运行&#xff0c;提供对多个数据库的多用户访问。 这是指导&#xff0c;如何在Fedora 28/27/26&#xff0c;CentOS 7.5 / 6.10和Red Hat(RHEL)7.5 / 6.10上安装或升级MySQL社区服务器最新版本8.0(8.0.12)/5.7(5…

lombok 生成代码_使用Project Lombok减少Java应用程序中的样板代码

lombok 生成代码对Java编程语言最常提出的批评之一是它需要大量的样板代码 。 对于简单的类尤其如此&#xff0c;该类只需要存储一些值就可以。 您需要这些值的getter和setter方法&#xff0c;也许您还需要一个构造函数&#xff0c;覆盖equals&#xff08;&#xff09;和 hash…

让C/C++程序员告诉你什么叫浪漫,表白黑科技,炫酷多彩求爱利器

前言缘是美丽的邂逅&#xff0c;爱是心跳的感觉&#xff0c;情是心灵的交会&#xff0c;恋是甜蜜的思念&#xff0c;走在爱与被爱的边缘&#xff0c;你见或者不见&#xff0c;爱你的心始终不改变&#xff01;C语言诠释爱——为TA写下心中情&#xff0c;生成程序传给TA&#xff…

Java十六进制浮点文字

我如何遇到十六进制浮点数 我正在Java :: Geci中开发一种新功能&#xff0c;以减少代码重新格式化的可能性。 如果重新格式化&#xff0c;当前版本的代码将覆盖原本相同的代码。 这很烦人&#xff0c;因为按下重新格式化键的快捷键相当容易&#xff0c;而且许多项目甚至要求开发…

C语言对电脑做的事儿啊,总有那么一丝恐怖,C语言操盘电脑两例

C语言对自己电脑做的事儿啊&#xff0c;总有那么一丝恐怖&#xff0c;C语言与电脑两例开场先抱歉&#xff0c;偷懒好多天了。今天分享给大家的l两例比较短小精悍&#xff0c;都是针对于计算机屏幕处理的两例&#xff0c;有兴趣的可以放到自己电脑上运行哦。绝对无害&#xff0c…

servlets_jQuery Ajax – Servlets集成:构建完整的应用程序

servlets网上有很多教程&#xff0c;它们解释了有关使用servlet和JSP页面进行Java Web开发的一些知识&#xff0c;但是&#xff0c;我从未找到对于初学者来说足够简洁的教程。 这样的教程应该解释创建一个简单的Web应用程序的整个过程&#xff0c;包括前端&#xff0c;后端&…

mysql分库分表的缺点_MySQL分库分表会带来哪些问题?

分库分表能有效的环节单机和单库带来的性能瓶颈和压力&#xff0c;突破网络IO、硬件资源、连接数的瓶颈&#xff0c;同时也带来了一些问题。下面将描述这些技术挑战以及对应的解决思路。1、事务一致性问题分布式事务当更新内容同时分布在不同库中&#xff0c;不可避免会带来跨库…

C语言的恶趣味,胆小者莫入,以免入门到放弃,C语言夺命题十例!

前言这些问题测试了C语言的高级知识&#xff0c;包括一些很少使用的特性。有效的C编程需要对诸如未定义的行为&#xff0c;递归和指针算术等概念有深入的理解&#xff0c;但是这些故意复杂的例子并不代表现实世界的代码&#xff0c;当然也不会为了清晰和可维护性而获得任何奖励…

java学习里程碑_记录您的里程和社区运行情况:Java EE 7真实体验

java学习里程碑miles2run.org是跟踪跑步活动并与亲朋好友共享的简便方法。 可以创建然后跟踪基于天或基于距离的目标。 它还允许创建社区运行目标&#xff0c;并使多个跑步者参与并跟踪他们朝着该目标的活动。 您还可以找出本地跑步者并与他们联系。 该项目已开始&#xff0c;…

遇C语言条件编译就犯怵,不知什么意思,c语言头文件中的宏定义

前言看见头文件中的条件编译就犯怵&#xff0c;不知什么意思&#xff0c;但是&#xff0c;你老师说&#xff1a;”就得那么写“&#xff0c;你照做&#xff0c;但是知其然而不知其所以然。今天分享下是自己的理解~~~纯属个人献丑&#xff0c;新手可阅&#xff0c;老鸟绕道。代码…

pcie3.0一条通道带宽_小技巧|内存双通道提升性能

今天给大家分享一个小技巧&#xff0c;如果你的电脑有两条或以上的内存条&#xff0c;不同的内存插法也是会影响性能的哦&#xff0c;也就是内存双通道。什么是双通道&#xff1f;双通道内存说白了是两条内存由串联方式改良为并联方式&#xff0c;以得到更大的内存带宽&#xf…

C++简介源码讲解精辟版,C++入门级C++学习,C++与C的区别值得知晓

C简介源码讲解精辟版,C入门级C学习&#xff0c;C与C的区别值得知晓C语言和C基础区别C标准输入和输出命名空1.命名空间的定义 &#xff1a;namespace 标识符{ } 例&#xff1a;namespace my{int a1;}命名空间中的成员访问&#xff1a;作用域分辨符&#xff1a;&#xff1a; 例&a…

jbpm 和 drools_Drools和jBPM KIE A​​pps平台

jbpm 和 drools随着Drools和jBPM&#xff08;KIE&#xff09;6系列出现了一个新的工作台&#xff0c;并有望最终实现用户的可扩展性。 我终于有了一些预告片&#xff0c;以显示此工作原理以及所存储的内容。 确保选择1080p并全屏显示它们的最佳状态。 &#xff08;点击放大&am…