位置: 编程技术 - 正文

Unity3D中Javascript的基本使用与介绍详解

编辑:rootadmin
欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌。在Unity中脚本是必不可少的。因为他将定义你游戏的各种行为和规则。这个教程将介绍JavaScript的基本使用。1.目标在Unity中,脚本是用来界定用户在游戏中的行为或规则。Unity推荐使用的编程语言是JavaScript,同时也支持C#或Boo。2.前提本教程的重点是Unity脚本基础,前提是你已经熟悉了Unity的界面。3.命名规范开始前,先说下Unity的一些规范。变量 – 首写为小写字母。变量用来存储游戏状态中的任何信息。函数 – 首写为大写字母。函数是一个代码块,在需要的时候可以被重复调用。类 – 首写为大写字母。可以被认为是函数的库。当阅读范例时注意首写字母,将有助于你更好的理解对象之间的关系。4.用户输入我们第一个例子是在场景中实现一个简单的移动。1)设置场景:-启动Unity。创建一个用来移动的平面。GameObject->CreateOther->Plane。并且在Inspector面板中设置Position为”0,0,0″。如果当前页面没有Inspector面板,选择Window->Layouts->2by 3。建议熟悉各种布局以便开发需要。-创建一个Cube。GameObject->CreateOther->Cube。在Inspector面板中设置Position为”0,1,0″。-我们都知道现实世界里物体成像靠的是光反射,那么我们这里也是需要光线的。选择GameObject->CreateOther->PointLight。在Inspector面板中设置坐标为”0,5,0″。-保存当前场景。快捷键为Ctrl&#;s。2)新建脚本。我们打算移动用户的视线,这需要通过控制主相机的位置来实现。我们就要写一个脚本,然后把脚本和相机结合起来。-创建一个空脚本。Assets->Create->JavaScript并命名为”Move”。重命名快捷键为F2。-双击打开脚本Move。默认包含Update()函数。将我们的代码加入这个函数,他将在每一帧执行一次。我们需要用transform来改变相机的位置,用到Translate这个函数,他有x,y,z三个参数。我们加入以下代码:function Update(){ transform.Translate(Input.GetAxis("Horizontal"),0,Input.GetAxis("Vertical"));}Input.GetAxis()函数返回一个从-1到1之间的&#;,如横轴上左半轴为-1到0,右半轴为0到1。如果需要,我们可以通过Edit->ProjectSettings->Input中重定义按键映射。3)连接脚本脚本写完了,如何让他起作用呢?我们需要把脚本赋予物体才行。-点击希望应用脚本的物体对象。这里对我们而言就是相机。从Hierarchy面板中选中它。-在菜单中选择Components->Scripts->Move,这样我们便从Inspector面板中看到相机中添加了Move这个组件。(我们也可以用鼠标把脚本拖拽到物体对象上)点击运行,我们即可前后左右按键来控制相机移动了。注意一个关于DeltaTime的问题。放在Update()函数中的代码是按照帧来执行的。如果我们需要物体的移动按照时间秒来执行,我们需要将Input.GetAxis()函数的返回&#;乘以Time.deltaTime:var speed = 5;function Update(){ var x = Input.GetAxis("Horizontal")*Time.deltaTime*speed; var y = Input.GetAxis("Vertical")*Time.deltaTime*speed; transform.Translate(x, y, 0);}这样设置之后按下WASD便可以实现上下左右的视角移动了。这里的speed为显式变量,可以在Inspector面板中看到。我们可以在使用中随时调整它的&#;,很方便。5.连接变量Unity允许在界面上拖拽(drag and drop)的方式赋脚本。快捷方便。这里,我们将涉及连接变量的概念。-在场景中添加一个聚光灯。GameObject->CreateOther->SpotLight。Position为”0,5,0″,Rotation为”,0,0″。-创建一个JavaScript脚本,命名为”SpotLight”。我们想让聚光灯照向主相机。我们可以使用transform.LookAt()这个函数。如何使用这个函数呢?我们需要创建一个显式变量。在SporLight脚本中写入如下代码:var target : Transform; function Update(){ transform.LookAt(target);}-把脚本赋予聚光灯对象。要么在菜单栏Component中添加,要么鼠标拖放。之后,”target”变量就出现在Inspector面板里了。-将Hierarchy面板中的主相机对象拖放到Target变量上。如果我们想让聚光灯照向其他物体,我们也可以将其他物体拖放上去,只要是Transform类型的即可。-运行。你可以看到聚光灯一直照向主相机。6.访问组件一个游戏对象可能有多个脚本或其他组件。它将不可避免的要访问其他组件的函数或变量。Unity中通过GetComponent()函数来实现这个目的。我们现在要实现按下空&#;键后让聚光灯照向Cube。我们考虑一下这个步骤:1.监视空&#;键被按下。2.空&#;键按下后聚光灯照向Cube。由于SporLight脚本中有target变量,我们只需要为这个变量设定新的&#;就可以了。-创建一个脚本,命名为Switch,添加如下代码:var switchToTarget : Transform;function Update(){ if(Input.GetButtonDown("Jump")) GetComponent(SpotLight).target = switchToTarget;}注意GetComponent()的参数,它将返回一个参数给Switch脚本,我们就可以用它来访问”target”变量。这里的GetComponent获取的不是点光源,而是那个名为SpotLight的JS文件。-添加Switch脚本到聚光灯对象,并将Cube拖放到Inspector面板中的switchToTarge变量上。-运行。按下空&#;后,聚光灯将照向Cube。前面我们提到,可以通过写代码的方式指定变量(而不是通过Unity界面),如何做到呢?上面按下空&#;时告诉聚光灯聚焦到Cube上,我们是在SpotLight脚本中做一个显式的变量,将Cube拖放上去。而在代码中主要有2种方法去实现:1.使用对象的名称(name)2.使用对象的标签(tag)1.对象名称可以从Hierarchy面板上看到对象的名称。用GameObject.Find()函数来使这些名称作为参数。因此,我们可以这样写:function Update(){ if(Input.GetButtonDown("Jump")) { var newTarget = GameObject.Find("Cube").transform; GetComponent(SpotLight).target = newTarget; }}注意,以上没有出现显式的变量。2.对象标签对象标签是一个字符串,用来识别一个组件。在Inspector面板中点击Tag按钮查看内建的标签。我们也可以创建自己的标签。GameObject.FindWithTag()函数能通过具体的标签寻找组件并返回一个字符串作为参数。function Update(){ if(Input.GetButtonDown("Jump")) { var newTarget = GameObject.FindWithTag("fang").transform; GetComponent(SpotLight).target = newTarget; }}7.实例我们要在运行时创建(create)对象就要用到Instantiate函数。让我们来实现如何在每次按下开火按钮(鼠标左键或Ctrl键)后通过实例化一个新的对象。需要思考以下几点:1.哪个物体做我们的实例?2.在哪儿实例化?关于第一个问题,最好的办法就是显式变量。这样我们就可以随时通过拖放来改变我们的实例对象。至于在哪儿实例化,我们只要实现当按下开火键时,在用户的当前位置创建一个对象即可。实例化函数有3个参数:1.我们要建立的对象。2.对象的位置坐标。3.对象的旋转位置。完整的代码如下:var newObject : Transform;function Update(){     if(Input.GetButtonDown("Fire1")){         Instantiate(newObject, transform.position, transform.rotation);     }}要记住,transform、position、transform、rotation是附加这个脚本的物体的位置。我们这里假设为主相机。一般情况下,将要被实例化的对象设置为预设(prefab),我们现将Cube设置为预设。-首先,让我们创建一个预置。Assets->Create->Prefab。命名为Cube。-从Hierarchy面板中选取Cube拖放到Project面板的Cube上。-创建一个脚本并命名为Create,并把上面的代码加进去。-把这个脚本赋予相机,并将Cube预设赋予脚本变量。-运行。移动相机并按下开火键,你能看到新的Cube出现。8.调试调试是发现和修正你的代码中人为错误的技巧,Unity中提供了Debug类,我们现在看看Debug.Log()函数。Log()函数允许用户发送信息到Unity的控制台。这样做的原因可能包括:1.在运行时要验证某部分代码是否达成。2.报告变量的状态。我们现在使用Log()函数,当用户点击开火按钮时,发送一个消息到Unity控制台。-打开创建的脚本并在”Instantiate”代码内”if”处添加如下代码:Debug.Log("Cube created");-运行。点击开火键,我们能看到Unity界面下方显式”Cube created”。另外一个有用的功能是用于调试私有变量。这使得当Debug模式被选中时Inspector面板中的变量,但它不能被编辑。为了证明这一点,我们将显式一个私有变量作为Cube实例的计数器。我们在脚本中加入两行内容1.添加私有变量cubeCount。2.当一个cube实例创建后增加这个变量完整代码如下:var newObject : Transform;private var cubeCount = 0;function Update(){ if(Input.GetButtonDown("Fire1")) { Instantiate(newObject, transform.position, transform.rotation); Debug.Log("Cube created"); cubeCount&#;&#;; Debug.Log(cubeCount); }}9.常见脚本类型//在这个函数体中的代码每隔固定的间隔执行。它通常在Rigibody中有力的作用的时候被用到。如:// Apply a upwards force to the rigibody every framefunction FixedUpdate(){ rigidbody.AddForce(Vector3.up);}//这里的代码将被用作初始化。Awake(){}//这个函数在Update()之前,但在Awake()之后执行。//Start()函数和Awake()函数的不同点在于Start()函数仅在脚本启用时候执行(Inspector面板中的复选框被选中)。Start(){}//当游戏对象的碰撞脚本与另一个游戏对象碰撞时执行这个函数内的代码。OnCollisionEnter(){}//当鼠标在一个载有GUI元素(GUIElement)或碰撞器(Collider)的游戏对象里按下时执行该函数体内的代码。// Loads the level named "SomeLevel" as a response// to the user clicking on the objectfunction OnMouseDown(){ Application.LoadLevel("SomeLevel");}//当鼠标悬停在一个GUI元素或碰撞器的对象上时,执行该函数体内的代码。如:// Fades the red component of the material to zero// while the mouse is over the meshfunction OnMouseOver(){ renderer.material.color.r -= 0.1 * Time.deltaTime;}更多精彩请点击

推荐整理分享Unity3D中Javascript的基本使用与介绍详解,希望有所帮助,仅作参考,欢迎阅读内容。

Unity3D中Javascript的基本使用与介绍详解

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

Unity3D游戏开发最佳实践技巧(二) 欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d

Unity3D如何使用脚本实现跳跃的效果 欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d

unity3d游戏开发之如何快速接入渠道SDK 欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d

标签: Unity3D中Javascript的基本使用与介绍详解

本文链接地址:https://www.jiuchutong.com/biancheng/372928.html 转载请保留说明!

上一篇:Unity3D使物体运动的程序脚本的使用与说明实现详解(unity物体移动速度怎么设置)

下一篇:Unity3D游戏开发最佳实践20技巧(二)(Unity3D游戏开发标准教程)

  • 进项税额转出完整会计分录怎么做 案例
  • 税前扣除凭证按照用途分为哪些
  • 锐捷财税怎么样
  • 实缴时间不能超过申请时间怎么办
  • 深圳重工业企业有哪些
  • 固定资产停止使用转入更新改造的会计处理
  • 研发机构认定条件
  • 房产税房产原值包括地价吗
  • 增值税专用发票电子版
  • 工程分包开具发票怎么开
  • 计提房租的会计科目
  • 留抵税额注销时,会计分录
  • 汇总缴纳增值税附加税如何缴纳
  • 发票票种核定怎么提交
  • 安置房视同销售需要缴纳所得税吗?
  • 财务软件里凭证打印如何设置不打印三级科目
  • 小规纳税人租金可以记入成本吗
  • 不动产进项抵扣新政策2022
  • 管理费用没发票能入账吗
  • win10j截图
  • hp tpn-c120笔记本
  • 增值税转出未交增值税是什么意思
  • 超市一般纳税人账务处理
  • 稳增长促转型
  • 局域网游戏电脑
  • 固定资产出租需交什么税
  • php destruct
  • 发票红冲是什么意思需要给钱吗
  • oauth认证流程
  • 瑞士伯尔尼小镇
  • Chrome谷歌浏览器网页
  • 固定资产没有发票可以计提折旧吗
  • 待抵扣进项税额借贷方向
  • 阿尔萨斯葡萄园
  • win11的截屏
  • chkconfig命令参数
  • extrim命令详解
  • 异地工程预缴税款时间
  • 开了银行对公账户要多久
  • 征税对象的具体项目
  • 改造后的固定资产入账价值
  • mysql用中文字段
  • 进项税额转出是借方科目还是贷方科目
  • 工会经费在哪儿申报
  • 劳务派遣的公司值得去吗
  • 溢价发行债券取得的收益应如何处理
  • 开的发票超过了限额会怎样,怎么办?
  • 企业收到委托开具发票
  • 金税盘显示已到锁死期
  • 港口建设费收费标准
  • 旅游业餐饮业
  • 委托设置什么意思
  • 在linux系统中安装软件
  • sqlserver删除重复
  • mac硬盘挂载软件
  • Win10 64位正式版系统安装方法全过程图解(U大师)
  • win8停止服务
  • 000.exe病毒
  • windows8安装密钥永久
  • Linux基础与应用开发指南pdf百度云
  • windows10如何设置windows7开始菜单
  • Apache 2.0.55 for Linux 下载
  • linux克隆虚拟机
  • shell exec重定向
  • 批处理获取文件夹内文件名
  • androidserviceslibrary停用
  • javascript如何
  • nodejs获取异步请求返回值
  • Android Study Day 3 --Android File Read And Write
  • ubuntu创建虚拟网卡
  • javascript中array数组对象的含义及常用方法
  • New AssetBundle build system in Unity 5.0
  • javascript学习指南
  • Javascript字符串对象函数
  • android开发从入门到精通(项目案例版)
  • 税收分类分级管理是什么
  • 东莞医保缴费凭证怎么下载
  • 广东省电子税务局app下载官网
  • 财税2016年47号文件中的劳务派遣
  • 2021年下半年财务部工作计划
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设