1,什么是游戏引擎
游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、Mac OS X、微软Windows。游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。
引擎并不是什么玄乎的东西,无论是2D游戏还是3D游戏,无论是角色扮演游戏、即时策略游戏、冒险解谜游戏或是动作射击游戏,哪怕是一个只有1兆的小游戏,都有这样一段起控制作用的代码。经过不断的进化,如今的游戏引擎已经发展为一套由多个子系统共同构成的复杂系统,从建模、动画到光影、粒子特效,从物理系统、碰撞检测到文件管理、网络特性,还有专业的编辑工具和插件,几乎涵盖了开发过程中的所有重要环节。
对引擎的一些关键部件的简单介绍如下:
首先是光影效果,即场景中的光源对处于其中的人和物的影响方式。游戏的光影效果完全是由引擎控制的,折射、反射等基本的光学原理以及动态光源、彩色光源等高级效果都是通过引擎的不同编程技术实现的。
其次是动画,游戏所采用的动画系统可以分为两种:一是骨骼动画系统,一是模型动画系统,前者用内置的骨骼带动物体产生运动,比较常见,后者则是在模型的基础上直接进行变形。引擎把这两种动画系统预先植入游戏,方便动画师为角色设计丰富的动作造型。
引擎的另一重要功能是提供物理系统,这可以使物体的运动遵循固定的规律,例如,当角色跳起的时候,系统内定的重力值将决定他能跳多高,以及他下落的速度有多快,子弹的飞行轨迹、车辆的颠簸方式也都是由物理系统决定的。
碰撞探测是物理系统的核心部分,它可以探测游戏中各物体的物理边缘。当两个3D物体撞在一起的时候,这种技术可以防止它们相互穿过,这就确保了当你撞在墙上的时候,不会穿墙而过,也不会把墙撞倒,因为碰撞探测会根据你和墙之间的特性确定两者的位置和相互的作用关系。
渲染是引擎最重要的功能之一,当3D模型制作完毕之后,美工会按照不同的面把材质贴图赋予模型,这相当于为骨骼蒙上皮肤,最后再通过渲染引擎把模型、动画、光影、特效等所有效果实时计算出来并展示在屏幕上。渲染引擎在引擎的所有部件当中是最复杂的,它的强大与否直接决定着最终的输出质量。
引擎还有一个重要的职责就是负责玩家与电脑之间的沟通,处理来自键盘、鼠标、摇杆和其它外设的信号。如果游戏支持联网特性的话,网络代码也会被集成在引擎中,用于管理客户端与服务器之间的通信。
通过上面这些枯燥的介绍我们至少可以了解到一点:引擎相当于游戏的框架,框架搭好后,关卡设计师、建模师、动画师等只要往里填充内容就可以了。
2,Unity中的常用组件有哪些,举五个以上例子,并阐述刚体组件的作用。
常用的组件有刚体组件(Rigidbody)、渲染体组件(Renderer)、盒子碰撞体(Box Collider)、脚本组件、Transform组件。
刚体组件的作用:刚体组件包括八个属性作用如下
Mass:质量。
Drag:阻力。
Angular Drag:角阻力。
Use Gravity:是否使用重力。
Is Kinematic:是否受物理的影响。
Interpolate:设置图像差值。
Collision Detection:碰撞检测。
Constraints:冻结。停止某个轴感应物理引擎的效果。
Freeze Position:冻结X轴、Y轴、Z轴方向。
Freeze Rotation:冻结X轴、Y轴、Z轴旋转。
3,如何通过代码方式创建一个游戏对象,并给它上色,以及改变它的坐标位置。
代码如下:(创建一个胶囊并设为青色)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class createobj : MonoBehaviour
{
void Start()
{
GameObject obj=GameObject.CreatePrimitive(PrimitiveType.Capsule);
obj.GetComponent().material.color=Color.cyan;
Obj.transform.position=new Vector3(0.0f,2.0f,0.0f);
}
void Update()
{}}
4,如何创建Prefab,并简述其作用。
创建一个小球预制体代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class createobj : MonoBehaviour
{
Public GameObject ballPrefab //声明变量
void Start()
{
If(Input.GetMouseButtonDown(1))
{Instantiate(this.ballPrefab);} //如果条件满足就将预制体小球实例化
}
void Update()
{}}
创建预制体的作用:通过预制体可以创建多个具有相同结构的游戏对象,实现对一个游戏对象的重复使用。
5,物体发生碰撞的必要条件是什么。
两个游戏对象都必须带有Collider组件,且至少其中一个对象带有Rigidbody组件。