`
stephen830
  • 浏览: 3011620 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

 
阅读更多

 

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

 

转载自 http://www.xuanyusong.com/archives/501

 

 

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

 



 

 

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

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

模型的移动

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

 

function Update () {

//模型x轴,移动一个单位
transform.Translate(1,0,0);

//模型y轴,移动一个单位
transform.Translate(0,1,0);

//模型z轴,移动一个单位
transform.Translate(0,0,1);

}
 

 

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

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

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

 

function Update () {

    //设置移动的范围
    var translation : float = Time.deltaTime * 10;

    //移动的方向
    transform.Translate (translation, 0, 0);
    transform.Translate (0, translation, 0);
    transform.Translate (0, 0, translation);

}
 

 

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

 

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 轴旋转的单位距离。

 

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世界进行旋转。

 

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);
}
 

 

 

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

 



 

 

完整代码

 

//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游戏开发,哇咔咔~~~

 

  • 大小: 261.5 KB
  • 大小: 185.7 KB
分享到:
评论

相关推荐

    雨松MOMO程序研究院

    FingerGestures研究院之初探Unity手势操作(一) iTween研究院之学习笔记Move移动篇(一) Android研究院之应用程序...Unity3D研究院之构建游戏框架与导出IOS项目(一) Unity3D视频开发教程之开始学习Unity(一)

    MOMO雨松的unity3d游戏开发

    "MOMO雨松的unity3d游戏开发"可能是一个教程系列或者是一位开发者分享的游戏开发经验集合。 在Unity3D中,游戏开发涵盖了许多关键知识点: 1. **场景构建**:Unity使用场景(Scene)来组织游戏环境,每个场景包含...

    Unity3D游戏引擎-雨松MOMO原创文章

    Unity3D游戏引擎-雨松MOMO原创文章

    Unity3D 游戏引擎之IOS触摸屏手势控制镜头旋转与缩放

    雨松MOMO Unity3D 游戏开发系列博文之Unity3D 游戏引擎之IOS触摸屏手势控制镜头旋转与缩放,欢迎大家下载阅读,哇咔咔~~

    Unity3D游戏引擎教程-雨松MOMO原创文章

    关于Unity3D游戏引擎构建方面的知识,文章涵盖了游戏框架的构建、多点触摸、游戏世界的简单构建、3D游戏地形与基本元素的构建、脚本控制模型移动旋转与碰撞检测、iOS触摸屏手势控制、高级界面消息的发送与接收、...

    Unity3D游戏引擎-雨松MOMO原创

    Unity3D是一款由Unity Technologies开发的跨平台游戏引擎,广泛应用于2D、3D游戏、建筑可视化、实时模拟等领域。它支持各种游戏平台的开发,包括但不限于PC、移动设备、网页和游戏机。在本文中,我们将详细探讨Unity...

    Unity3D游戏引擎教程(雨松MOMO原创文章)

    - **脚本实现模型的平移与旋转**: - 使用C#或JavaScript编写脚本来控制3D模型的动作。 - 实现模型的基础运动,如平移、旋转等。 - **控制模型移动旋转与碰撞**: - 通过编写物理相关的脚本来控制模型的动态行为...

    Unity3D脚本中文教程

    这个“Unity3D脚本中文教程”旨在帮助中文学习者掌握Unity3D中的脚本编写技术,更好地理解和应用Unity3D API。 教程可能包含以下几个关键知识点: 1. **Unity基础知识**:首先,教程可能会介绍Unity的工作环境,...

    雨松MOMO安卓博客课程

    《雨松MOMO安卓博客课程》是一份精心整理的Android开发学习资源,包含了雨松MOMO博主的32篇文章精华。这个合集旨在为Android开发者,尤其是初学者提供一条系统化的学习路径,帮助他们深入理解Android开发的核心概念...

    Unity3D 游戏引擎之FBX模型的载入与人物行走动画的播放

    雨松MOMO Unity3D 游戏开发系列博文之Unity3D Unity3D 游戏引擎之FBX模型的载入与人物行走动画的播放,欢迎大家下载阅读,哇咔咔~~

    雨松MOMO安卓博客课程.rar

    《雨松MOMO安卓博客课程》是一套专注于Android开发的学习资源,旨在帮助开发者深入理解和掌握Android应用开发的各项技能。该课程可能包含了从基础到高级的各个层面,适合初学者和有一定经验的开发者进行自我提升。 ...

    【雨松MOMO】Android开发系列博文大合集总汇

    雨松MOMO游戏与软件开发大讲堂 大汇集 博文第一篇到博文第三十二篇所有Android开发博文大合集,以及所有博文中附带的源代码,一共将近50M,Android开发资源 ,给力推荐 。欢迎大家下载阅读,持续给力~~哇咔咔~~

    MOMO-雨松-安卓博客课程打包

    《MOMO-雨松-安卓博客课程打包》是一份集合了安卓开发基础知识与实践的珍贵资源包。这个压缩文件由“MOMO-雨松”这位在安卓开发领域有一定影响力的博主精心整理,旨在帮助学习者系统地掌握安卓应用开发的各项技能。...

    Unity3d心得

    - **iTween & HOTween**: 补间动画插件,支持平移、旋转和缩放等多种动画效果。HOTween相较于iTween更为强大,支持复合动画。 - **iTweenPath & CameraPath**: 用于创建复杂的运动路径,尤其适用于镜头移动或角色...

    Unity3D 游戏引擎之Unity3D回馈IOS高级界面消息

    首先,Unity3D引擎提供了UnityPlayer类,它是Unity与iOS原生代码之间的桥梁。通过UnityPlayer,开发者可以调用Objective-C或Swift的方法,实现与iOS系统的深度集成。例如,你可以使用UnityPlayer的CallFunction或...

    Unity3D 游戏引擎之IOS高级界面发送消息与Unity3D消息的接收

    雨松MOMO Unity3D 游戏开发系列博文之Unity3D 游戏引擎之IOS高级界面发送消息与Unity3D消息的接收,欢迎大家下载阅读,哇咔咔~~ 转与缩放,欢迎大家下载阅读,哇咔咔~~

    51CTO下载-雨松MOMO安卓博客课程.rar

    《雨松MOMO安卓博客课程》是一份珍贵的学习资源,专为Android开发者设计,尤其适合初学者和希望深入理解游戏开发的程序员。这个压缩包集合了雨松MOMO在其博客中的各种教程和示例代码,涵盖了Android应用开发和游戏...

    Unity3D 游戏引擎之平面小球重力感应详解

    《Unity3D游戏引擎之平面小球重力感应详解》 Unity3D是一款强大的跨平台游戏开发工具,广泛应用于手机游戏、桌面游戏以及虚拟现实应用的制作。在本教程中,我们将深入探讨如何利用Unity3D实现平面小球的重力感应...

Global site tag (gtag.js) - Google Analytics