首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之脚本实现模型的平移与旋转(六)
2012
05-01

Unity3D研究院之脚本实现模型的平移与旋转(六)

这一章MOMO带大家讨论一下Unity3D中使用的脚本,脚本的最大特点就是用少量的代码实现繁多的功能,避免大量的代码。Untiy3D这一块可以使用脚本做很多东西,那么我们开始学习脚本吧。
有关Unity3D 脚本的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:

Update:
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更容易上手一些。

 

Unity3D研究院之脚本实现模型的平移与旋转(六) - 雨松MOMO程序研究院 - 1

 

在三维世界中创建两个矩形,然后在添加两个脚本分别绑定在这两个箱子上,脚本的名称暂时命名为 js0 、js1。

在Project 页面中打开刚刚创建的js0,发现Unity3D 已经将Update 函数添加在脚本中了。

模型的移动

Translate方法中的三个参数分别标示,模型在三维世界中X 、Y、Z 轴移动的单位距离。

 

 

执行代码发现参数为1速度居然移动的着么快,怎么能修改移动的速度呢?

Time.deltaTime:标示上一次调用Update一秒为标示每帧执行所消耗的时间。

有了这个参数,我们就可以根据它修改方向移动的速度了。

 

 

模型的平移可以选择一个参照物,下面代码第二个参数设置模型移动参照物,这里设置成摄像机。那么模型将以相对与摄像机进行移动。

 

 

模型的旋转

Rotate方法中的三个参数分别标示,模型在三维世界中X 、Y、Z 轴旋转的单位距离。

 

 

模型的旋转可以选择一个参照物,下面代码第二个参数设置模型移动参照物,这里设置成3D世界。那么模型将以相对与整个3D世界进行旋转。

 

如下图所示,给出一个小例子,在脚本中移动箱子的坐标,在屏幕中记录模型移动的位置,并且显示在游戏视图中。效果很不错吧,嘻嘻~~

 

Unity3D研究院之脚本实现模型的平移与旋转(六) - 雨松MOMO程序研究院 - 2

 

完整代码

 

 Unity3D 的世界中脚本还可以做很多事情,以后我在慢慢向各位道来~ 欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,哇咔咔~~~

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. 求教一下,刚刚接触unity,在做这个练习,问一下我把“var translation : float = Time.deltaTime * 10”放在update函数之外,为什么没法实现效果?这个Time.deltaTime只能在update里使用吗?

  2. 怎么解决让物体移动指定的距离呢?我只想到下面的方法。有没有更好的呢?请教了。是初學者,js寫的。var move :Vector3 ;function Start ( ) { move = gameObject.transform.position; }function Update ( ) { var speed :float =2 ;//speed移動速度 if(gameObject.transform.position.y <= move.y){ transform.Translate(move.up*Time.deltaTime*speed ); } }function OnGUI( ){ if(GUILayout.Button(“up”,GUILayout.Width(50),GUILayout.Height(50))) { move.y = move.y + 10; } //指定移動距離為10現在的必須滿足以下條件,否則被移動的物體會出現抖動不止問題。!!(初始位置的y值+10)必須是整數且能被speed整除!!求教有沒有更容易的方法來解決抖動問題或更精簡的語句可以節省資源。謝謝。

  3. 怎么解决让物体移动指定的距离呢?我只想到下面的方法。有没有更好的呢?请教了。是初學者,js寫的。var move :Vector3 ;function Start ( ) { move = gameObject.transform.position; }function Update ( ) { var speed :float =2 ;//speed移動速度 if(gameObject.transform.position.y <= move.y){ transform.Translate(move.up*Time.deltaTime*speed ); } }function OnGUI( ){ if(GUILayout.Button(“up”,GUILayout.Width(50),GUILayout.Height(50))) { move.y = move.y + 10; } //指定移動距離為10現在的必須滿足以下條件,否則被移動的物體會出現抖動不止問題。!!(初始位置的y值+10)必須是整數且能被speed整除!!求教有沒有更容易的方法來解決抖動問題或更精簡的語句可以節省資源。謝謝。

  4. 参照物怎么理解?我做了一个测试,两个cube速度v大小相当方向相反,然后其中一个cube1已cube2为参照物,我的理解是此时cube1相对于cube2以V速度运动,cube1 相对于本地空间是静止的.但是结果不是这样子

  5. Pingback: viagra

  6. 你好,雨松momo,我是个新手,我想请教下怎么实现人物模型的手臂来模拟真人手臂的运动?

  7. 你好,我是大四的学生在做关于黄金矿工的毕业设计 我遇到一个问题 看了你写的书也没法解决,就是 那个钩子怎么让它旋转绕着一个固定的点旋转起来,我是用GUI做的,2d游戏。

    • using UnityEngine;using System.Collections;public class NewBehaviourScript : MonoBehaviour {public Texture2D image ;public float rotSpeed =100.0f;private float rotAngle ;void Update(){ rotAngle += Time.deltaTime * rotSpeed;}void OnGUI(){ Matrix4x4 _matrix = GUI.matrix; GUIUtility.RotateAroundPivot (rotAngle, new Vector2(100,100)); GUI.DrawTexture (new Rect(50 , 50 , 100 , 100),image,ScaleMode.StretchToFill); GUI.matrix = _matrix;}}用这段代码就可以旋转你的贴图了。不果我还是不建议你用GUI来做, 因为效率不好。。

  8. 你好,雨松,我是个新手,因为最近需要去做一个小的unity游戏,才开始学习了,买了本你写的书,才开始看,也有很多东西不懂,关于游戏的输入问题想请教下,现在时通过一个外部的光学检测设备来作为游戏输入(主要就是控制人物的行动方向速度),这个怎么处理呀,

  9. 雨松,有个问题请教你,在C#中像这样的语句transform.position.x=x是通不过编译的,只能使用transform.position = new Vector3(xxx,xxx,xxx);来写,而js中可以使用前一种复制方法,在C#中每次用一次position都要使用一次new,这样太麻烦啊,有方法解决吗?