unity3d脚本控制移动怎么控制模型移动

程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之脚本实现模型的平移与旋转(六)
Unity3D研究院之脚本实现模型的平移与旋转(六)
围观60648次
编辑日期: 字体:
这一章MOMO带大家讨论一下Unity3D中使用的脚本,脚本的最大特点就是用少量的代码实现繁多的功能,避免大量的代码。Untiy3D这一块可以使用脚本做很多东西,那么我们开始学习脚本吧。
有关Unity3D 脚本的API所有文档盆友们都可以去这里查阅。
官方API 文档:
Scripting inside Unity consists of attaching custom script objects called behaviours to game objects. Different functions inside the script objects are called on certain events. The most used ones being the following:
This function is called before rendering a frame. This is where most game behaviour code goes, except physics code.
FixedUpdate:
This function is called once every physics time step. This is the place to do physics-based game behaviour.
Code outside any function:
Code outside functions is run when the object is loaded. This can be used to initialise the state of the script.
Note: Sections of this document assume you are using Javascript, but see Writing scripts in C# & Boo for information about how to use C# or Boo scripts.
大概意思是介绍三个重要的脚本函数
Update:这个函数在渲染帧之前被调用,大部分的游戏行为代码都在这里执行,除 物理代码。
FixedUpdate:这个函数在每进行一次物理时间步调时被调用,它是基于物理的游戏行为。
Code outside any function:这类函数在对象加载时被调用,它可以用来脚本的初始化工作。
本章我们着重讨论Update 这个函数,创建脚本与绑定脚本的方法在第二章中已经介绍过了不会的盆友请去那里阅读。虽然官方推荐脚本使用JavaScript编辑,但是其实C#更符合Unity3D的编程思想,推荐新人先使用JavaScript,然后在学习C#,因为JavaScript更容易上手一些。
在三维世界中创建两个矩形,然后在添加两个脚本分别绑定在这两个箱子上,脚本的名称暂时命名为 js0 、js1。
在Project 页面中打开刚刚创建的js0,发现Unity3D 已经将Update 函数添加在脚本中了。
模型的移动
Translate方法中的三个参数分别标示,模型在三维世界中X 、Y、Z 轴移动的单位距离。
123456789101112
function Update () {&//模型x轴,移动一个单位transform.Translate(1,0,0);&//模型y轴,移动一个单位transform.Translate(0,1,0);&//模型z轴,移动一个单位transform.Translate(0,0,1);&}
执行代码发现参数为1速度居然移动的着么快,怎么能修改移动的速度呢?
Time.deltaTime:标示上一次调用Update一秒为标示每帧执行所消耗的时间。
有了这个参数,我们就可以根据它修改方向移动的速度了。
1234567891011
function Update () {&&&&&//设置移动的范围&&&&var translation : float = Time.deltaTime * 10;&&&&&//移动的方向&&&&transform.Translate (translation, 0, 0);&&&&transform.Translate (0, translation, 0);&&&&transform.Translate (0, 0, translation);&}
模型的平移可以选择一个参照物,下面代码第二个参数设置模型移动参照物,这里设置成摄像机。那么模型将以相对与摄像机进行移动。
123456789101112131415
function Update () {&&&&&//设置移动范围&&&&var translation : float = Time.deltaTime * 10;& //相对于摄像机,模型向右移动。 transform.Translate(Vector3.right * translation, Camera.main.transform);& // 相对于摄像机,模型向上移动。 transform.Translate(Vector3.up * translation, Camera.main.transform);& // 相对于摄像机,模型向左移动。 transform.Translate(Vector3.left * translation, Camera.main.transform);& }
模型的旋转
Rotate方法中的三个参数分别标示,模型在三维世界中X 、Y、Z 轴旋转的单位距离。
1234567891011
function Update () {&&& //以模型X轴旋转,单位为2.&& transform.Rotate(2, 0, 0);&&& //以模型Y轴旋转,单位为2.&& transform.Rotate(0, 2, 0);&&& //以模型Z轴旋转,单位为2.&& transform.Rotate(0, 0, 2);}
模型的旋转可以选择一个参照物,下面代码第二个参数设置模型移动参照物,这里设置成3D世界。那么模型将以相对与整个3D世界进行旋转。
12345678910111213141516
function Update () {&&& //设置旋转的范围&&&&var rotate : float = Time.deltaTime * 100;&&&&&//旋转的方向&&&&&//相对于世界坐标中心向右旋转物体&&&&transform.Rotate(Vector3.right * rotate, Space.World);&&&&& //相对于世界坐标中心向上旋转物体&&&&transform.Rotate(Vector3.up * rotate, Space.World);&&&&& //相对于世界坐标中心向左旋转物体&&&&transform.Rotate(Vector3.left * rotate, Space.World);}
如下图所示,给出一个小例子,在脚本中移动箱子的坐标,在屏幕中记录模型移动的位置,并且显示在游戏视图中。效果很不错吧,嘻嘻~~
123456789101112131415161718192021222324252627282930313233343536
//X轴移动位置var posX : float;//Y轴移动位置var posY : float;//Z轴移动位置var posZ : float;&function Update () {&&&//设置移动的范围&&&&var x : float = Time.deltaTime * 10;&&&&var y : float = Time.deltaTime * 8;&&&&var z : float = Time.deltaTime * 5;&&&&&//移动的方向X轴&&&&transform.Translate (x, 0, 0);&&&&&//移动的方向Y轴&&&&transform.Translate (0, y, 0);&&&&//移动的方向Z轴&&&&transform.Translate (0, 0, z);&&&&&//赋值计算模型在三维坐标系中的位置&&&& posX += x; &&&& posY += y; &&&& posZ += z; }&function OnGUI () {&&&&&//将坐标信息显示在3D屏幕中&&GUI.Label(Rect(50, 100,200,20),"x pos is" + posX +"float");&&&&GUI.Label(Rect(50, 120,200,20),"y pos is" + posY +"float");&&&&GUI.Label(Rect(50, 140,200,20),"z pos is" + posZ +"float");&&&}
Unity3D 的世界中脚本还可以做很多事情,以后我在慢慢向各位道来~ 欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,哇咔咔~~~
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&25165人阅读
& & 在unity3d中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position。
2.&通过Transform组件移动物体
& & Transform 组件用于描述物体在空间中的状态,它包括 位置(position), 旋转(rotation)和 缩放(scale)。 其实所有的移动都会导致position的改变,这里所说的通过Transform组件来移动物体,指的是直接操作Transform来控制物体的位置(position)。
2.1 Transform.Translate
& & & &该方法可以将物体从当前位置,移动到指定位置,并且可以选择参照的坐标系。 当需要进行坐标系转换时,可以考虑使用该方法以省去转换坐标系的步骤。
& & & &public function Translate(translation: Vector3, relativeTo: Space = Space.Self):
2.2 Vector3.Lerp, Vector3.Slerp, Vector3.MoveTowards
& & & Vector3 既可以表示三维空间中的一个点,也可以表示一个向量。这三个方法均为插&#20540;方法, Lerp为线性插&#20540;,Slerp为球形插&#20540;, MoveTowards在Lerp的基础上增加了限制最大速度功能。 当需要从指定A点移动到B点时,可以考虑时候这些方法。
2.3 Vector3.SmoothDamp
& & & 该方法是可以平滑的从A逐渐移动到B点,并且可以控制速度,最常见的用法是相机跟随目标。
2.4 Transform.position
& & & &有时重新赋&#20540;position能更快实现我们的目标。
3. 通过Rigidbody组件移动物体
& & Rigidbody组件用于模拟物体的物理状态,比如物体受重力影响,物体被碰撞后的击飞等等。
& & 注意:关于Rigidbody的调用均应放在FixedUpdate方法中,该方法会在每一次执行物理模拟前被调用。
3.1 Rigidbody.velocity
& & &设置刚体速度可以让物体运动并且忽略静摩擦力,这会让物体快速从静止状态进入运动状态。
3.2 Rigidbody.AddForce
& & & 给刚体添加一个方向的力,这种方式适合模拟物体在外力的作用下的运动状态。
3.3 Rigidbody.MovePosition
& & & 刚体受到物理约束的情况下,移动到指定点。
4. 通过CharacterController组件移动物体
& & &CharacterController用于控制第一人称或第三人称角色的运动,使用这种方式可以模拟人的一些行为,比如限制角色爬坡的最大斜度,步伐的高度等。
4.1 CharacterController.SimpleMove
& & &用于模拟简单运动,并且自动应用重力,返回&#20540;表示角色当前是否着地。
4.2 CharacterController.Move
& & &模拟更复杂的运动,重力需要通过代码实现,返回&#20540;表示角色与周围的碰撞信息。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2450941次
积分:24634
积分:24634
排名:第189名
原创:286篇
转载:183篇
评论:355条
(4)(2)(7)(16)(5)(10)(14)(14)(5)(2)(2)(4)(3)(2)(5)(4)(10)(3)(4)(3)(1)(3)(6)(1)(2)(6)(5)(5)(8)(7)(7)(19)(18)(5)(14)(4)(3)(1)(12)(12)(31)(21)(12)(14)(10)(11)(7)(4)(15)(10)(8)(56)(19)unity手机控制物体移动 - Unity3d技术 - 泰课在线 - 国内专业的Unity在线学习平台|Unity3d培训|Unity教程|Unity教程 Unreal 虚幻 AR|移动开发|美术CG|UI平面设计|前端开发 - Powered By EduSoho
unity手机控制物体移动
今天主要来说下unity手机控制物体移动的方法和步骤,主要是上次的项目做的就是这方面的内容,所以现在就把它拿出来给大家分享一下,如何去做,怎么才能把它做好,下面就开始来说下详细的步骤:
一、创建Unity项目
& & & &打开Unity游戏编辑器界面,在导航菜单栏中选择File ---& &New Project菜单项,在弹出界面中选择Create new Project页面,将项目名命名为MobilityModel,然后再点击Create Project,完成项目的创建。
& & & &然后点击保存(Ctrl+S)保存场景。
二、构建模型
& & & &在Hierarchy视图中分别创建游戏对象Plane(面板)、Cube(立方体)、Sphere(球体)、Cylinder(圆柱体)、Capsule(胶囊体),然后鼠标拖动创建的游戏对象将他们摆放在合适的位置。
& & & &接下来在游戏中添加一个光源,在Hierarchy视图中选择Create---&Directional light菜单项,光源是游戏中非常重要的一个属性,一定要在游戏场景中设置它,如果不设置光源对象,Game视图会非常暗,严重影响游戏的效果。
三、添加脚本
& & & &在Project视图中点击Create---&JavaScript菜单项创建一个游戏脚本,将其命名为MobilityModelScript.js,在脚本上编写如下代码:
Mobilitymodelscript.js代码
//模型移动速度 &
var TranslateSpeed = 10; &
//模型旋转速度 &
var RotateSpeed = 1000; &
//绘制UI界面 &
function OnGUI(){ &
& & //设置GUI背景色 &
& & GUI.backgroundColor = Color. &
& & if(GUI.Button(Rect(10,10,70,30),"向左旋转")){ &
& & & & //向左旋转 &
& & & & transform.Rotate(Vector3.up * Time.deltaTime * (-RotateSpeed)); &
& & if(GUI.Button(Rect(90,10,70,30),"向前移动")){ &
& & & & //向前移动 &
& & & & transform.Translate(Vector3.forward * Time.deltaTime * TranslateSpeed); &
& & if(GUI.Button(Rect(170,10,70,30),"向右旋转")){ &
& & & & //向右旋转 &
& & & & transform.Rotate(Vector3.up * Time.deltaTime * RotateSpeed); &
& & if(GUI.Button(Rect(90,50,70,30),"向后移动")){ &
& & & & //向后移动 &
& & & & transform.Translate(Vector3.forward * Time.deltaTime * (-TranslateSpeed)); &
& & if(GUI.Button(Rect(10,50,70,30),"向左移动")){ &
& & & & //向左移动 &
& & & & transform.Translate(Vector3.right * Time.deltaTime * (-TranslateSpeed)); &
& & if(GUI.Button(Rect(10,50,70,30),"向右移动")){ &
& & & & //向右移动 &
& & & & transform.Translate(Vector3.right * Time.deltaTime * TranslateSpeed); &
& & //显示模型位置信息 &
& & GUI.Label(Rect(250,10,200,30),"模型位置"+transform.position); &
& & //显示模型旋转信息 &
& & GUI.Label(Rect(250,50,200,30),"模型旋转"+transform.rotation); &
上述代码中重要方法和属性如下:
& & & OnGUI()方法用来绘制GUI界面组件。
& & & GUI.Button():设置一个按钮,返回true时表示该按钮被按下。
& & & GUI.Label():设置一个文本框。
& & & transform:为当前绑定模型的变换对象。
& & & transform.Rotate():设置模型旋转。
& & & transform.Translate():设置模型平移。
& & & Time.deltaTime:该数值为一个只读属性,不可修改,表示完成最后一帧的事件,单位为秒。
& & & Vector3:标志一个模型移动或者旋转的方法。
& & & Rect:规定一个矩形区域,用于显示控件。
& & & 将编写好的脚本对象,将其从Project视图拖拽到Hierarchy视图中的立方体(Cube)对象上,如果没有提示错误,表示脚本绑定成功,运行游戏后该游戏对象将执行该脚本中的内容。
& & & &目前立方体对象与其他模型对象之间是不存在碰撞的,但是运行游戏后,可以控制立方体(Cube)直接穿越另一个模型对象。为了让模型对象之间具有物理的碰撞,需要给模型对象添加一个刚体(Rigidbody)属性,添加方式:首先在Hierarchy视图中选中立方体对象,在Uinty导航菜单栏中选择Component --& Physics&
--&Rigidbody菜单项即可。
四、测试运行
& & & &点击运行按钮就能看到结果,可以点击显示的六个按钮对象,可以移动Cube(立方体)的位置和旋转。
你还没有登录,请先或!
Unity3D技术交流1群
泰课Unity3D公开课
工作时间:9:00 - 18:30
北京客服:010 -
广州客服:020 -关于Unity 3D 使用脚本控制模型移动的问题_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:56,793贴子:
关于Unity 3D 使用脚本控制模型移动的问题收藏
现在在看书自学
买的是MOMO宣雨松的书
但上面的代码有些的有错
我有自己在网上找
可都是这个代码
出错详情看图
火星时代unity3d,争当游戏大触,月薪过万小意思,手绘技能,概念设计,商业应用一步到位,你与u3d游戏特效设计师只差一步,赶快点击吧!
比较基本 出错就是那个rotatespeed 我网上和unity一起检索关键词找不到 估计是有问题 还请大家帮忙
QQ截图保存再把图片上传吧,看都看不清楚
脚本加载到cube上,参数设为浮点数。
这个过时了吧。。
有张图大小写确实错了…5.0版本旋转我一般都用 rigidbody 的 angularVelocity 比较好控制…
GUI lz可以试着用unity5自带的ugui~挺好用的!
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 unity3d脚本控制移动 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信