位置: 编程技术 - 正文

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游戏开发标准教程)

  • 企业所得税中资产折旧调整明细表中提示折旧年限
  • 单位人民币卡账户可以支取现金吗
  • 企业所得税成本没有发票怎么处理
  • 融资租入固定资产的入账价值
  • 金蝶怎么反结账上月的凭证
  • 带息负债融资成本
  • 负债表内容
  • 公司买车可以抵扣哪些税
  • 住宿发票专票可抵扣吗
  • 预缴税款的完税证明单
  • 出口收入没有及时申报怎么处罚
  • 购买成品入库并结转成本会计分录怎么写?
  • 主营业务税金及附加包括印花税吗
  • 增值税税率征收率变化时间节点
  • 哪些进项税不能转出
  • 投资者减除费用可以填0吗
  • 实收资本的会计处理
  • 承兑汇票重复背书
  • 不申报税务登记被注销
  • 宣告分派现金股利影响所有者权益变动吗
  • 房地产行业规定
  • 差旅费税务要求比例
  • 垃圾清运工程师
  • 支付工程款需要什么财务手续
  • php string
  • 招待客户住宿的句子
  • 油费餐费入什么科目
  • 销售返利如何做账
  • 追加投资会增加实收资本吗
  • johnny kim宇航员
  • 微信公众平号平台
  • 税收筹划的税种
  • 一般纳税人收到小规模专票怎么抵扣
  • 浦东森林村
  • 实战到底究竟是什么意思啊
  • 投资担保公司的钱都去哪了
  • 注意力机制的作用
  • js let用法
  • yolo v4 v5
  • 帝国cms模板文件在哪
  • 存货非正常损失的会计处理
  • 可行性研究报告合同属于什么合同
  • 库存周转率会大于1吗
  • java强制类型转换有哪些
  • sql 临时表格
  • 农民专业合作组织法律制度的类型包括哪些?
  • 供热管道属于什么结构类型
  • 向银行申请银行汇票
  • db2 798
  • 资产负债表应收账款期末余额公式
  • 营业税改增值税时间
  • 一个人可以有两张同一个银行的卡吗
  • 银行承兑个人可以用吗
  • 网上银行可以取款吗
  • 认缴资金可以增加吗
  • 存货管理的类型
  • 境外企业向境内企业提供劳务
  • 农产品收购单怎么做会计分录
  • 企业转让固定资产发生的费用
  • 购入固定资产中的增值税
  • 税款滞纳金征收比率怎么算
  • 服务业收入的会计分录
  • 企业会计准则第4号固定资产
  • mySQL中in查询与exists查询的区别小结
  • 电脑开机显示xp后无反应
  • ubuntu18 ssh
  • Centos安装dig命令
  • win8驱动在哪个文件夹
  • win8显示隐藏文件夹
  • win7鼠标右键菜单不显示
  • 用python写网页
  • 查询同一网段下的其他ip
  • jquery的认识和使用
  • 手机端apk反编译工具_android反编译工具
  • js响应事件的过程
  • js eval
  • 美股印花税如何收取
  • 季度企业所得税分录
  • 农机作业服务费用 如何开发票
  • 化妆品关税怎么算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设