Unity3D的基础概括1

坐标系统

坐标系统在Unity3D开发过程中具有非常重要的作用,是游戏对象定位、移动、缩放、旋转等操作的基础。坐标系统包含以下基本概念:

  • 三维向量(Vector3):
  • 用于表示三维坐标空间的向量和点,可进行向量运算。
  • 世界坐标(World Space):
  • 相对于整个世界空间建立坐标系,使用全局坐标(通过Transform.position获取)。其X轴正方向指向屏幕右侧,Y轴正方向背离观察者,Z轴正方向指向屏幕上方。
  • 视口坐标(ViewPort Space):
  • 坐标点被归一化,并且相对于相机建立坐标系。以相机左下角为(0,0)点,右上角为(1,1)点,Z轴使用相机的世界坐标单位。其X轴正方向指向屏幕右侧,Y轴正方向指向屏幕上方,Z轴正方向指向观察者。
  • 屏幕坐标(Screen Space):
  • 坐标点使用像素点进行定义,并且相对于屏幕建立坐标系。以屏幕左下角为(0,0)点,右上角为(pixelWidth,pixelHeight)点,Z轴使用相机的世界坐标单位。其各轴方向与视口坐标相同。屏幕坐标的本质是激活的视口坐标(相机有多个,每个相机有自己的视口坐标,屏幕对应于被激活相机的视口,因此屏幕坐标是被激活相机的视口坐标)。鼠标位置坐标属于屏幕坐标。
  • 局部坐标(Local Space):使用所选择对象的坐标系统。一个对象的局部坐标来自它的枢轴点(Pivot Point),坐标原点即该对象的枢轴点(对象的局部中心),坐标方向与枢轴点方向相同。可以在层级面板中调整一个对象的局部坐标位置和方向。
  • 绘制GUI界面的坐标系:这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。

    要了解GUI元素的界面坐标系统的具体请看如下的地址:

    世界坐标→本地坐标:

    transform.InverseTransformDirection(Vector3.forward);     相反的转换函数是:Transform.TransformDirection。

    cam.InverseTransformPoint(transform.position);   相反的转换函数是:Transform.TransformPoint。

    世界坐标→屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标转换为屏幕坐标。其中camera为场景中的camera对象。

    屏幕坐标→视口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕坐标转换为视口坐标。其中camera为场景中的camera对象。

    视口坐标→屏幕坐标:camera.ViewportToScreenPoint();

    视口坐标→世界坐标:camera.ViewportToWorldPoint();

资源元素

网格、材质、纹理、贴图和动画是资源模型中非常重要的元素,直接决定了资源在场景中的外观和行为表现。

  • 网格(Mesh):是一种将物体模型的顶点、纹理、材质等信息存储在一个外部文件中的3D物体模型。
  • 材质(Material):物体表面最基础的材料,如木质、塑料、金属或者玻璃等。
  • 纹理(Texture):物体表面呈现的线形纹路,是在材质基础上的丰富细节呈现。
  • 贴图(Map):一种将图片信息投影到曲面的方法。

Unity3D没有创建网格的工具,但是可以在常用的三维建模软件(如Maya、3ds Max等)中创建模型,然后导入到Unity3D中形成资源,这些资源可以被场景直接使用。

Unity3D支持读取fbx、dae、3ds、dxf和obj格式的文件,因此所有可以导出这些格式的软件都适用于Unity3D。

脚本交互

Unity3D脚本支持JavaScript、C#与Boo(.Net平台中与Python语法相似的一种静态语言),官方推荐使用JavaScript,但考虑到C#的面向对象支持程度与强大的类库,在大型游戏项目开发时建议使用C#。

前文提到过,脚本也是组件的一种,可以挂载到游戏对象中。游戏框架在脚本生命周期的流程节点处或特定事件发生时调用相应方法,实现游戏业务逻辑。因此,脚本开发最为重要的是明确其生命周期的关键流程环节,这些流程环节所关联的脚本方法和它们的执行时机,从而在合适的脚本方法中编写所需的业务逻辑代码。

下图描述了脚本生命周期的脚本方法调用流程与时机。

图中内容可简化为这样的方法执行次序:Awake --> Start --> Update --> FixedUpdate --> LateUpdate --> OnGUI --> Reset -->  OnDestory

  • Awake:用于在游戏开始之前初始化变量或游戏状态,在脚本整个生命周期内仅被执行一次。Awake在所有游戏对象初始化之后执行,因此可以在方法中安全地与游戏对象进行通信。
  • Start:仅在所有脚本的Update方法第一次被调用前执行,且仅在脚本实例被启用时执行。Start在所有脚本的Awake方法全部执行完成后才执行。
  • Update:在每次渲染新的一帧时执行。由于该方法调用的频率与设备性能、被渲染对象有关,导致同一游戏在不同机器的效果不一致(因为Update方法的执行时间间隔不一致)。
  • FixedUpdate:在固定的时间间隔执行,不受游戏帧率的影响。所以处理RigidBody时最好用FixedUpdate。FixedUpdate的时间间隔可在工程设置中更改(Edit
    --> Project Setting --> Time)。
  • LateUpdate:所有脚本的Update方法调用后执行。例如相机跟随即是在LateUpdate方法中实现。
  • OnGUI:在渲染和处理GUI事件时执行。
  • Reset:用户点击属性监视面板(Inspector)的Reset按钮或首次添加该组件时执行,仅在编辑模式下执行。
  • OnDestroy:当游戏对象将被销毁时执行。

需要注意的是,必须所有脚本的Awake方法均执行完毕后才会开始执行这些脚本中的Start方法,而各脚本的Awake方法的调用顺序是随机的。因此,对象的创建可在Awake方法中实现,而对象的获取可在Start方法中实现,保证调用先后次序。

相机操作

相机是为玩家捕捉和显示世界的一种装置。在一个场景中你可以有数量不限的相机,它们可以被设置为任何顺序渲染,在屏幕上的任何地方渲染,或仅渲染屏幕的一部分。

相机可以被定制,被脚本化,或被子类化。对于益智游戏,相机通常处于静态显示全部视角。对于第一人称射击游戏,相机通常作为玩家角色的子对象,并将其放置在与玩家角色的眼睛等高的水平。对于赛车游戏,相机通常会跟随玩家角色所控制的车辆。

坐标系统的案例:

案例1——在鼠标点击的位置上绘制一张图片出来(关于绘制GUI界面坐标系与屏幕坐标系之间的关系)。

using UnityEngine;

using System.Collections;

public class test : MonoBehaviour   {

//图片

public Texture img;

//储存鼠标的位置坐标

private Vector2 pos;

void OnGUI()

{

//鼠标左击,获取当前鼠标的位置

if (Input.GetMouseButton(0))

{

pos = Input.mousePosition;

}

//绘制图片

GUI.DrawTexture(new Rect(pos.x,Screen.height - pos.y,100,100), img);

}

}

案例2——坐标显示和坐标转换(这个是触摸方面的。如果没有触摸屏,那就将那个if去掉吧!)

using UnityEngine;

using System.Collections;

public class test: MonoBehaviour   {

//场景的相机,拖放进来

public Camera camera;

//场景的物体

private GameObject obj;

void Start()

{

//初始化

obj = GameObject.Find("Plane");

}

void Update ()

{

//有触摸

if (Input.touchCount > 0)

{

print("世界坐标" + obj.transform.position);

print("屏幕坐标" + Input.GetTouch(0).position);

print("世界坐标→屏幕坐标" + camera.WorldToScreenPoint(obj.transform.position));

print("屏幕坐标→视口坐标" + camera.ScreenToViewportPoint(Input.GetTouch(0).position));

print("世界坐标→视口坐标" + camera.WorldToViewportPoint(obj.transform.position));

}

}

}

Unity3D的基础概括1

时间: 2024-09-29 01:43:00

Unity3D的基础概括1的相关文章

Android - Android基础概括

Android基础概括 本文地址: http://blog.csdn.net/caroline_wendy 1. 定义 为移动设备设计的第一个真正开发的综合平台,包含操作系统.用户界面.和应用程序,所有软件都能运行在手机上,从而消除了阻碍移动创新的障碍. 2. 主要部分 硬件:基于位置的服务硬件(如GPS).摄像头.音频.网络连接.Wi-Fi.蓝牙.传感器(包括加速计).NFC.触摸屏和电源管理. 位置服务:地图.地理编码器(geocoder)[地理编码(geocoding).地理逆编码(rev

Unity3D ShaderLab 基础的高光实现

Unity3D ShaderLab 基础的高光实现 关于高光: 在一个物体表面的高光属性就是为了描述它是如何表现光泽.这种类型的效果在着色器的世界中通常称为视点相关效果. 之所以这样说,是因为为了实现着色器逼真的镜面效果,我们需要考虑相机或者观察者面向物体表面的方向,然而高光还需要一个元素来实现视觉的真实效果---光的入射方向! 通过结合2个方向,我们可以在物体的表面得到一个热点或者说亮点,它位于视角方向和光源方向中间位置.这种中间位置的方向可以成为半角矢量,我们通过他可以实现高光效果和镜面等.

Unity3D开发基础组件提取总结

在游戏开发过程中,除了逻辑功能的开发之外,还有非常多基础的模块.这些模块,对大部分手机网络游戏来说都是一样的.所以,在上个游戏已经上线运营大半年之际,我认为有必要将这些模块整理出来.让后面其它游戏的开发,能够不用从0開始.该游戏client採用Unity3D开发,那么我们这里抽取的基础组件也就是针对Unity3D引擎来的. 简单的梳理之后,我发现主要有下面一些模块,能够独立抽取出来,当然各个模块之间也有一个依赖关系.比方日志模块,差点儿是全部模块都须要依赖的. 1.日志模块 游戏开发中,我们避免

Unity3d学习 基础-关于MonoBehaviour的生命周期

其实在刚接触Unity3D,会有一个疑问,关于Unity3D游戏运行的初始入口在哪?不像Cocos2dx还有个AppDelegate文件可以去理解.而且在刚开始就接触Unity3D时,看到所有脚本中编写的类 几乎都继承了MonoBehaviour这个父类,那么MonoBehaviour这个类是干什么的? 首先我们看一关于MonoBehavior这个类的继承关系: 从上图可以看出,MonoBehaviour是间接继承自Component,说明继承自MonoBehaviour的脚本充当的角色是组件的

OSGI基础概括(一)

研究了两天的OSGI,对于这两天的学习进行一个简短的总结. OSGi是什么 OSGi--Open Service Gateway Initiative 字面上的意思是一个公共的服务平台.OSGi亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构. 简单说,它是是一个动态模块化框架的规范,提供了插件化.面向服务和插件扩展三大功能.这个规范体现非常重要的2点:"模块化"和"动态". OSGi容器已有多家开源实现,比如 Knoflerfish.Equ

unity3d 射弹基础案例

小白本来想学cocos2dx的,然而c++难学就算了,cocos2dx对新手来说简直坑爹,于是乎转战unity3d学习js,在写出第一个游戏后兴致高多了哎. 回顾一下编辑的过程:1.建立一个cube作为地面,地面不具有rigibody刚体.2.建立cube方块,cube有default-material彩纸球属性,通过给彩纸球附彩纸给cube附图案,让cube具有rigibody可以停在cube地面上.3.camera相机,对于相机的位置和视野范围不是很理解,可以通过gameobject.ali

Unity3D入门基础之游戏对象 (GameObject) 和组件 (Component) 的关系

原文出处:http://edu.china.unity3d.com/learning_document/getData?file=/Manual/TheGameObject-ComponentRelationship.html 我们在使用Unity的时候,会常常创建一个游戏对象(GameObject).使用快捷键 ctrl + shift + N创建一个空的游戏对象时.你会发现该游戏对象默认加入了一个transforme component( 变换组件).以下来介绍下变换组件. 变换组件 (Tr

游戏世界之Unity3D的基础认识

1.写在前面 Unity3D是由Unity Technologies开发的一个让你轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎.Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows.Mac.Wii.iPhone.Win

Unity3D图形基础笔记(1)

1.坐标系 (1).Unity 世界空间坐标系为左手系,Y正向向上的左手系.这一点在需要从3ds max里导入模型到Unity时需要注意,3ds max使用的是以Z正向朝上的右手系.根据坐标系手系和坐标基朝向的不同,可以很容易推导出所需要做的坐标变换. 3DS Max -> Unity 的坐标变换为:绕着x轴旋转90度,直接使用四元数变换如下: 1 public Vector3 MaxToUnity(Vector3 v) 2 { 3 return Quaternion.Euler(90.0f,0