GDPU unity游戏开发 一天速成

目录

复习提纲拿住

一.游戏引擎入门

二.引擎基础知识

三.界面交互设计

四.物理引擎

五.光照材质地形系统

六.音视频动画特效系统

七.寻路系统

小题

简答题

名词解释 

程序填空


“我游戏都玩不明白,还让我做游戏o(≧口≦)o”

还在为课程烦恼嘛,本文重点在于,一学期摸鱼必过指南。

复习提纲拿住

 注:该栏目转载请写明出处。

温馨提示:代码题gameObject类跟transform类是内置的,其它实例调用均需初始化操作。然后一定一定一定要注意大小写命名规范,c#的函数名跟java的方法名命名是不一样的,java大佬别太飘,c#的第一个字母也要大写。

组件类对应的是GetComponent的泛型,直接搬。

 NavMeshAgent agent = this.GetComponent<NavMeshAgent>();

实例化Vector3

Vector3 movement = new Vector3(0, 0, move);

再把常用的内置函数名背一遍,如周期函数、碰撞触发检测等

一.游戏引擎入门

1.Unity编辑器基本窗口及其功能

场景视图Scene窗口:用于编辑和观察场景中的游戏对象,支持对象的移动、旋转和缩放,以及设置光照和摄像机等操作

游戏视图Game窗口:显示实际游戏运行时的画面,用于查看游戏效果。

项目视图Project窗口:管理项目中的所有资源文件,如脚本、材质、纹理等,支持创建、导入和删除文件。

层次视图Hierarchy窗口:显示当前场景中所有游戏对象的层次结构,用于查找和管理对象,调整它们的父子关系。

检视器视图Inspector窗口:显示当前选定游戏对象的所有属性和组件,支持编辑变换信息、组件属性和自定义脚本中的变量。

控制台视图Console窗口:显示Unity编辑器和游戏运行时的日志、警告和错误信息,用于调试

二.引擎基础知识

1.Vector3类的常用函数

构造函数:

Vector3(float x, float y, float z):通过给定的 x、y 和 z 值创建一个 Vector3 实例。

静态属性:

Vector3.zero:返回一个零向量 (0, 0, 0)。

Vector3.one:返回一个每个分量都为 1 的向量 (1, 1, 1)。

Vector3.up、Vector3.down、Vector3.left、Vector3.right、Vector3.forward、Vector3.back:分别返回单位向量。

方法:

magnitude:返回向量的长度(模)。

normalized:返回单位长度与当前向量相同方向的向量。

Dot(Vector3 a, Vector3 b):返回两个向量的点积。

Cross(Vector3 a, Vector3 b):返回两个向量的叉积。

Distance(Vector3 a, Vector3 b):返回两个向量之间的距离。

Lerp(Vector3 a, Vector3 b, float t):在两个向量之间进行线性插值。

MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta):将当前向量向目标向量移动一定距离。

静态方法:

Slerp(Vector3 a, Vector3 b, float t):在两个向量之间进行球面线性插值。

Project(Vector3 vector, Vector3 onNormal):将向量投影到另一个向量上。

Reflect(Vector3 inDirection, Vector3 inNormal):根据法线向量反射入射向量。

Angle(Vector3 from, Vector3 to):计算两个向量之间的夹角。

2.Gameobject类的定义和作用

Gameobject类是Unity中用来表示场景中实体对象的基本类。每个Gameobject实例都可以包含一个或多个组件,这些组件定义了它的功能和行为。Gameobject可以在Unity编辑器中进行创建、编辑和组织。

3.Transform类(组件)的定义和作用

Transform类是Unity中用来描述和控制Gameobject位置、旋转和缩放的基本组件。通过Transform类,可以管理对象在场景中的空间变换,包括位置、旋转和缩放,以及它们在层级结构中的关系。

4.Mesh Filter和Mesh Renderer的作用

Mesh Filter:

作用:Mesh Filter组件用于指定一个Gameobject使用的网格(Mesh)。

功能:它包含一个指向Mesh资源的引用,定义了对象的几何形状,即顶点、三角形和UV映射等信息。

Mesh Renderer:

作用:Mesh Renderer组件用于在场景中渲染Mesh Filter指定的网格。

功能:它负责将指定的网格渲染到屏幕上,并通过附加的材质(Material)定义对象的外观特性,如颜色、纹理和光照效果。

这两个组件通常一起使用,Mesh Filter定义了对象的形状,而Mesh Renderer将其渲染出来,展示在游戏场景或视图中。

5.SceneManager类的使用,通过脚本切换场景

SceneManager类在Unity中用于管理场景,允许开发者通过脚本实现场景的加载、卸载和切换操作。

导入命名空间:

在脚本中导入Unity引擎的命名空间,以便使用SceneManager类:

using UnityEngine.SceneManagement;

加载场景:

使用LoadScene方法可以根据场景的索引或名称加载新的场景。

通过场景索引加载:

SceneManager.LoadScene(1); // 加载Build Settings中索引为1的场景

通过场景名称加载:

SceneManager.LoadScene("GameScene"); // 加载名称为"GameScene"的场景

using UnityEngine;

using UnityEngine.SceneManagement;



public class SceneController : MonoBehaviour

{

    public void SwitchToNextScene()

    {

        SceneManager.LoadScene("NextSceneName");

    }

}

6.Unity脚本相关函数的生命周期:调用时机和用途

Awake():

调用时机:在游戏对象(脚本实例)被创建时立即执行,无论脚本组件是否被激活,执行一次。初始化操作不依赖于其他对象的初始化顺序,并且希望在对象实例化时尽早执行,可以使用 Awake()。

用途:通常用于初始化设置,例如获取组件引用或设置初始变量值。

OnEnable():

调用时机:当脚本实例被启用时调用一次,即游戏对象被激活时。

用途:用于设置初始状态或在对象激活时需要执行的逻辑。

Start():

调用时机:在游戏对象被创建组件启用时才执行。初始化操作需要等待其他对象初始化完成或者需要在对象激活后才进行,通常会选择在 Start() 中完成。

用途:一般用于设置开始游戏时的初始状态,例如启动时的UI设置、物体的位置或者初始化游戏逻辑。

FixedUpdate():

调用时机:固定时间间隔调用,适用于物理相关的计算和更新。

用途:处理物理引擎相关的逻辑,如移动刚体、施加力等。

Update():

调用时机:每帧调用一次,用于处理游戏逻辑和更新游戏状态。

用途:处理用户输入、移动物体、检测碰撞等与游戏交互相关的逻辑。

LateUpdate():

调用时机:在所有Update()函数执行完毕后调用,通常用于处理需要依赖于其他对象状态的逻辑。

用途:例如跟随相机更新、处理动画状态等。

OnGUI():

调用时机:渲染和处理GUI事件时调用,不是每帧都调用。

OnDisable():

调用时机:当脚本实例被禁用时调用,即游戏对象被取消激活时。

用途:通常用于清理或暂停对象的操作,例如停止协程或禁用更新逻辑。

OnDestroy():

调用时机:在脚本被移除和销毁前调用执行。

用途:释放分配的资源,取消订阅事件等。

三.界面交互设计

1.IMGUI的基本使用和事件处理方法

IMGUI是Unity中一种基于即时绘制的GUI系统,通过在OnGUI方法中直接绘制GUI元素来实现界面显示和交互。它适合用于快速开发简单工具、编辑器界面等场景,使用简单且能够直接响应用户输入事件。

绘制GUI元素:

使用Unity提供的GUI类和GUILayout类来绘制各种GUI元素,如按钮、标签、文本框等。

void OnGUI()

{
      rect=GUI.Window(0,rect,GuessWindow, "game");
  
       //(偏移量x,偏移量y,宽,高)

       //GUI.Label(new Rect(60,150,60,30),"game");
        //GUI.Box(new Rect(160, 30, 120, 120), pk)

    if (GUI.Button(new Rect(10, 10, 100, 20), "Click "))
    {
        Debug.Log("Button clicked!");

    }
}

布局管理:

IMGUI提供了GUILayout类来进行自动布局管理,使得界面可以更加灵活和自适应不同分辨率的屏幕。

事件类型:

在IMGUI中,可以通过Event.current获取当前的GUI事件,如鼠标点击、键盘按键等。

2.UGUI的画布及布局组件Rect Transform的概念和作用

UGUI中的画布(Canvas)是用来容纳和渲染UI元素的容器,它定义了UI元素在屏幕上的位置和显示顺序。画布是所有UI元素的容器,负责将它们渲染到屏幕上,并确定UI元素的层级关系和显示顺序。

RectTransform是Unity中控制UI元素位置、大小和旋转的基础组件,通过锚点、中心点和偏移量定义元素在父容器中的布局和行为。它是所有UI元素的基础组件之一,通过定义UI元素相对于其父级容器的位置、大小和旋转角度,实现了UI布局的灵活性和响应性设计。

3.鼠标和虚拟轴交互的脚本使用

//输入系统部分代码


//鼠标

void Update(){

If(Input.GetMouseButton(0))

Debug.Log(“鼠标左键处于按下状态”);

If(Input.GetMouseButtonDown(1))

Debug.Log(“鼠标右键按下”);

If(Input.GetMouseButtonUp(2))

Debug.Log(“鼠标中键弹起”);

}



//键盘键值

void Update(){

If(Input.GetKeyDown(KeyCode.A))

Debug.Log(“A键被按下”);

If(Input.GetKey(KeyCode.Space))

Debug.Log(“空格键处于按下状态”);

If(Input.GetKeyUp(KeyCode.UpArrow))

Debug.Log(“上方向键被释放”);

}



//虚拟轴

void Update() {

float h = Input.GetAxis("Horizontal") * speed* Time.deltaTime;

float v = Input.GetAxis("Vertical") * speed* Time.deltaTime;

this.gameObject.transform.Translate(h,0,v);

}



//虚拟按键

void Update(){

If(Input.GetButtonDown(“Fire”))

Debug.Log(“开火”);

If(Input.GetButton(“Jump”))

Debug.Log(“space键处于按下状态”);

If(Input.GetButtonUp(“CustomName”))

Debug.Log(“自定义设置按钮弹起”);

}

四.物理引擎

1.刚体和碰撞体

Rigidbody的定义和作用

Rigidbody(刚体)在Unity中是一个组件,用于给游戏对象赋予物理特性,使其能够在物理世界中受到力的影响而运动。Rigidbody的作用是给游戏对象添加物理特性,使其能够在物理世界中受力影响而运动,并实现碰撞检测、力的控制、物理仿真和运动惯性。

Collider的种类及其区别

Collider(碰撞器)是用来定义游戏对象在物理世界中的碰撞形状和区域的组件。主要区别如下:

Box Collider(盒子碰撞器):用于矩形或立方体形状的碰撞检测。

Sphere Collider(球碰撞器):适合球体形状的碰撞检测。

Capsule Collider(胶囊碰撞器):类似圆柱体带有圆头的形状,常用于角色控制器。

Mesh Collider(网格碰撞器):使用游戏对象的网格形状作为碰撞检测。

Wheel Collider(轮子碰撞器):专门用于模拟车辆的轮子碰撞和运动。

Terrain Collider(地形碰撞器):用于处理Unity中的地形系统,能够适应地形的不规则形状。

这些碰撞器类型能够帮助开发者实现更精确和真实的碰撞检测和物理模拟。

Physic Material的作用

控制碰撞体之间的摩擦力,影响物体在不同表面上的滑动行为。

定义碰撞体的弹性,调整物体在碰撞时的反弹程度。

通过设置不同的物理属性,实现更精确的碰撞和物理模拟效果。

2.物理材质与碰撞检测

碰撞器和触发器的基本概念和区别

碰撞器(Collider)用于物理碰撞检测和响应,触发器(Trigger)用于触发特定的逻辑事件。碰撞器可以改变物体的物理状态,而触发器只能触发事件,不会改变物理状态。

碰撞器和触发器的事件检测

碰撞器(Collider)基于物理碰撞,有 OnCollisionEnter, OnCollisionStay, OnCollisionExit 事件。触发器(Trigger)基于逻辑区域进入或离开,有 OnTriggerEnter, OnTriggerStay, OnTriggerExit 事件。

碰撞器事件基于物理碰撞,检测物体间的碰撞并考虑它们的物理属性(质量、速度等)。

触发器事件基于逻辑上的区域进入或离开,不考虑物理碰撞反应,适用于需要特定触发条件的场景。

碰撞器适合处理需要物理反应的场景,如玩家与墙壁的碰撞、子弹与敌人的碰撞等。

触发器适合处理进入特定区域触发事件的情况,例如玩家进入触发任务、拾取物品等。

3.关节组件的主要类别及其作用

关节(Joint)组件的主要类别及其作用包括:

Fixed Joint(固定关节):固定两个物体的相对位置和旋转,使它们始终保持在一定的空间位置上。适用于需要将物体牢固连接在一起,不允许相对运动的情况,如门与门框的连接。

Hinge Joint(铰链关节):模拟单轴旋转关节,允许物体围绕一轴旋转。适用于门、摆锤等需要围绕固定轴旋转的物体。

Spring Joint(弹簧关节):模拟弹簧效果,允许物体之间产生相对运动,并施加弹簧力。适用于模拟弹簧效果的物体连接,如弹簧床、弹簧悬挂等。

Character Joint(角色关节):用于模拟复杂的角色动作,如人体关节。适用于需要模拟人体关节运动的情况,如角色的手臂、腿部等。

Configurable Joint(可配置关节):提供高度的自定义和控制,可以设置多种约束条件和参数。适用于需要精细调节物体之间关系的复杂情况,如机器人关节、车辆悬挂等。

4.摄像机射线的碰撞检测

摄像机射线碰撞检测是一种用于检测从摄像机发出的射线是否与场景中的物体相交的技术。它通常用于实现射线拾取、点击检测等功能。主要步骤包括创建射线、发射射线、检测碰撞和处理碰撞结果。

创建射线:首先,确定射线的起点和方向。通常情况下,起点是摄像机的位置,方向可以是摄像机的前方向、屏幕点击位置的投影方向等。

发射射线:使用Unity中的方法(如Camera.ScreenPointToRay)从摄像机发射射线。

射线碰撞检测:Unity提供了多种方法来检测射线与物体的碰撞,例如 Physics.Raycast 或 Physics.RaycastAll。

处理碰撞结果:根据需要,可以从碰撞信息中获取碰撞点、碰撞物体、碰撞法线等数据,用于后续逻辑处理,如物体选中、交互操作等。

  void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            // 检测射线是否击中物体
            if (Physics.Raycast(ray, out hit))
            {
              if(hit.rigidbody != null) {
                    hit.rigidbody.AddForceAtPosition(ray.direction * 200.0f, hit.point);
                }
                Debug.Log(hit.point);
            }         
        }
    }

五.光照材质地形系统

1.光照与渲染

光源的种类与使用

点光源: 点光源是从一个点向所有方向发射光线的灯光。它可以模拟球形光照效果,如电灯泡或蜡烛的光照。点光源的强度随着距离的增加而逐渐减弱。

平行灯、方向光源: 平行灯是一种平行于某个方向发射光线的灯光,通常用于模拟太阳光。平行灯的光线是平行且不会随着距离的增加而减弱的,因此可以产生长距离的光照效果。

聚光灯: 聚光灯是一种具有可调节角度和强度的灯光,可以模拟手电筒或舞台聚光灯的效果。聚光灯可以投射锥形光束,光照范围内的物体会受到聚光灯的照射。

面光源、区域光源: 面光源是一种模拟大面积光线的灯光,可以用来模拟窗户或灯带等广泛照明效果。面光源可以设置形状和大小,可以产生柔和、均匀的光照效果。

区域光的使用

模拟真实世界中有面积的光源,如灯泡或窗户。

产生柔和且逼真的阴影效果。

提升场景的视觉真实感和光影效果。

可能增加渲染复杂度和性能开销。

主要应用于需要高质量光影表现的领域,如电影特效、高端游戏和建筑可视化等。

光照探针和反射探针的作用

光照探针用于记录场景中各个位置的环境光照信息,例如不同方向的光照强度和颜色,主要用于实时渲染中实现物体的环境光照效果。反射探针则捕捉场景中的反射、折射和环境光信息,帮助渲染器计算物体表面的镜面反射和折射效果,尤其适用于需要动态环境反射的场景,如移动对象或动态光源。这两种探针能有效提高渲染质量,使得场景在视觉上更加真实和细致。

2.法线贴图和高度贴图的概念

法线贴图是一种凹凸贴图。它们是一种特殊的rgb纹理,可将表面细节(如凹凸和划痕)添加到模型,从而捕捉光线,就像由真实几何体表示一样。

高度贴图是灰度图像,表示表面离开基准平面的高度,其中白色区域是纹理的高区域,用于生成法线贴图或直接影响表面细节,例如地形或模型的形状。

3.地形系统的基本编辑

Paint Terrain绘制地势

Raise or Lower Terrian 升高或降低地面绘制

Paint Holes 绘制地形穿透的洞模式

Set Height 设置固定高度模式

Smooth Height 平滑地面高度模式

Stamp Terrian 绘制地形邮戳模式

Paint Texture 绘制贴图模式

Paint Trees绘制树

Paint Details绘制细节

Terrain Settings地势设置

六.音视频动画特效系统

1.音频系统

AudioSource、AudioClip、AudioListener的定义和作用

AudioSource:

AudioSource(音频源)是游戏中播放音频的组件,用于控制和管理音频的播放。

AudioSource负责播放和控制音频剪辑,可以通过脚本控制音频的播放、停止,以及调整音频的各种属性。

AudioClip:

AudioClip(音频剪辑)是实际的音频数据,通常作为音频资源加载到游戏中。它包含了音频的内容和特征,如长度、采样率等。

AudioClip作为音频源的输入,被AudioSource用来播放不同的声音效果或音乐,开发者可以加载、播放音频剪辑。

AudioListener:

AudioListener(音频监听器)用于接收游戏场景中所发出的音频源。

AudioListener捕获游戏场景中所有AudioSource的音频,提供全局的听觉体验,包括定位和距离效果的模拟。

2.动画系统

Animator组件的作用

Animator组件在Unity中用于控制游戏对象的动画行为,包括播放动画剪辑、管理状态机和过渡条件、通过参数控制动画播放,以及触发动画事件。

Animator Clip的概念

Animator Clip(动画剪辑)是Unity中存储动画数据的资源,定义了游戏对象在时间轴上的动作和变换,支持关键帧动画和状态机集成,用于实现游戏中的动画效果。Animator Clip通常用于角色的行走、跳跃、攻击等动作,或物体的位置、旋转、缩放等变换。

Animator Controller和动画状态机的概念

Animator Controller(动画控制器)是Unity中用于控制游戏对象动画的组件之一,允许开发者通过状态机系统来管理和控制动画的播放和切换。Animator Controller通过状态机管理动画剪辑,定义了动画的切换和过渡逻辑,实现复杂的动画行为控制。

动画状态机是Unity中用于管理游戏对象动画行为的系统。它由多个状态(如站立、行走、跑步等)组成,每个状态可以关联一个或多个动画剪辑,通过过渡条件实现状态间的切换,控制动画的表现。

通过脚本控制动画状态机的状态变换


using UnityEngine;
 
public class PlayerController : MonoBehaviour
 
{
    public float speed = 2.0f;
 
    private Animator animator;
 
    void Start()
 
    {
 
        animator = GetComponent<Animator>();//获取当前游戏对象上的 Animator 组件
 
    }
 
    void Update()
 
    {

        float move = Input.GetAxis("Vertical");//获取垂直方向上的输入值
 
        animator.SetFloat("Speed", move);
 
        Vector3 movement = new Vector3(0, 0, move);
 
        transform.Translate(movement * speed * Time.deltaTime);
    }
 
}

3.粒子系统的基本概念

一个粒子系统由三个独立的部分组成:粒子发射器粒子动画器粒子渲染器

4.Skybox的定义

Skybox(天空盒)实质上是一个立方体纹理,作用是给场景一个大的背景。当视野无遮挡时展现,同时也能作为环境光源。

七.寻路系统

1.NavMesh的生成和设置

导航网格生成:在Unity中,可以使用NavMesh工具来生成一个导航网格,该网格会覆盖场景中的地形和障碍物。首先需要在场景中添加一个NavMesh Surface组件,然后在组件中设置导航区域的范围和高度,并生成导航网格。

导航网格设置:在场景中添加一个NavMesh Agent组件到需要移动的游戏对象上,然后设置移动速度、加速度等参数。NavMesh Agent组件会根据导航网格自动寻路,并移动到目标点。

2.NavMesh Agent、NavMesh Obstacle、NavMesh Surface的作用

NavMesh Agent 是用于在游戏中实现角色的自动导航和移动的组件,它能够根据场景中生成的导航网格自动计算路径,并沿着最佳路径移动,避开障碍物。NavMesh Obstacle 则是用来表示导航网格上的障碍物,例如动态生成的或运行时移动的物体,能够影响 NavMesh Agent 的路径计算和避障行为。NavMesh Surface 负责在场景中生成和管理导航网格,将场景几何体转换为可供导航使用的区域,确保 NavMesh Agent 能够在复杂环境中正确导航至目标点。

3.自动寻路的脚本实现


public class navmeshAgent : MonoBehaviour
{
    public Transform targetpostion;
    void Update()
    {
        NavMeshAgent agent = this.GetComponent<NavMeshAgent>();
        agent.destination = targetpostion.position;
        
    }
}

小题

课本课后习题。

简答题

📖Unity3d中的碰撞器和触发器的区别?

碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。碰撞器物体不能互相进入到对方内部,触发器可以。

当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;

当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。

如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器。

📖Unity中碰撞发生的条件:

两个物体必须都包含碰撞体组件,至少一个物体上添加Rigidbody刚体组件,而且必须是运动的物体带有rigidbody脚本才能检测到碰撞。

📖CharacterController和Rigidbody的区别

Rigidbody具有完全真实物理的特性,Unity中物理系统最基本的一个组件,包含了常用的物理特性,而CharacterController可以说是受限的的Rigidbody,具有一定的物理效果但不是完全真实的,是Unity为了使开发者能方便的开发第一人称视角的游戏而封装的一个组件

📖为何大家都在移动设备上寻求U3D原生GUI的替代方案

答:1.不美观

2.OnGUI很耗费时间

3.使用不方便 

4. drawcall很高

📖MeshCollider和其他Collider的一个主要不同点?

答:MeshCollider是网格碰撞器,对于复杂网状模型上的碰撞检测,比其他的碰撞检测精确的多,但是相对其他的碰撞检测计算也增多了,所以一般使用网格碰撞也不会在面数比较高的模型上添加,而会做出两个模型,一个超简模能表示物体的形状用于做碰撞检测,一个用于显示。

📖写出Animation的五个方法  

答:AddClip 添加剪辑、Blend 混合、Play 播放、Stop 停止、Samphle 采样 、CrossFade淡入淡出切换动画、IsPlaying是否正在播放某个动画 

📖四元数是什么?主要作用什么?对欧拉角的优点是什么? 

答:所谓四元数,就是把4个实数组合起来的东西。4个元素中,一个是实部,其余3个是虚部

作用:四元数用于表示旋转
优点:
1)能进行增量旋转
2)避免万向锁
3)给定方位的表达方式有两种,互为负

📖Prefab的作用?如何在移动环境的设备下恰当地使用它?

答:Prefab是预制物,一般当游戏中需要频繁创建一个物体时,使用预制物可以节省内存,方便创建,方便对游戏物体进行操作,方便对属性进行修改

📖在场景中放置多个Camera并同时处于活动状态会发生什么?

答:游戏界面可以看到很多摄像机的混合

📖MeshRender中material和shader的区别?

答:MeshRender是模型渲染的组件,有此组件物体才能显示出来

Material是材质球,实际就是shader的实例,并进行赋值,贴图、纹理、颜色等。

Shader是着色器,实际上是一段程序,还可以用来实现一些仅靠贴图不容易实现的效果,如玻璃。

📖Shader大致分为:

表面着色器、顶点和片元着色器、固定功能着色器

📖光照贴图 的优势是什么?

答:1.使用光照贴图比使用实时光源渲染要快

2.可以降低游戏内存消耗 

3.多个物体可以使用同一张光照贴图  

📖OnEnable、Awake、Start运行时的发生顺序?哪些可能在同一个对象周期中反复的发生?

答:Awake –>OnEnable->Start
    OnEnable在同一周期中可以反复地发生

📖Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法。

答:Awake——>OnEnable——>Start——>FixedUpdate——>Update——>LateUpdate——>OnGUI——>OnDisable——>OnDestroy

📖如何销毁一个UnityEngine.Object及其子类?

使用Destroy()方法;

📖获取、增加、删除组件的命令分别是什么? 

答:获取:GetComponent 

增加:AddComponent 

没有删除组件只有让组件不生效:enable

📖localPosition与Position的使用区别? 

答:localPosition:自身位置,相对于父级的变换的位置,局部坐标其实就是自身的坐标,会随着物体的旋转而变化的。 

 Position:在世界坐标transform的位置,世界坐标是不会变的,一直以世界坐标轴的XYZ为标准。

📖物体自身旋转使用的函数?

答:Transform.Rotate()

📖U3D中用于记录节点空间几何信息的组件名称,及其父类名称

答:Transform 父类是 Component

📖Unity3d的物理引擎中,有几种施加力的方式,分别描述出来

答:rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函数中。

📖什么叫做链条关节?

答:Hinge Joint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。

📖什么是导航网格( NavMesh)?  

答: Unity内一种用于实现自动寻路的网格  

📖Unity3d提供了几种光源类型,分别是哪几种?

答:四种。

平行光:Directional Light

点光源:Point Light

聚光灯:Spot Light

区域光源:Area Light

📖MeshRender中material和sharedmaterial的区别?

修改sharedMaterial将改变所有物体使用这个材质的外观,并且也改变储存在工程里的材质设置。不推荐修改由sharedMaterial返回的材质。如果你想修改渲染器的材质,使用material替代。

📖在物体发生碰撞的整个过程中,有几个阶段,分别列出对应的函数

三个阶段,1.OnCollisionEnter 2.OnCollisionStay 3.OnCollisionExit

📖射线检测碰撞物的原理是?

射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 。

📖四元数有什么作用?

对旋转角度进行计算时用到四元数

📖将Camera组件的ClearFlags选项选成Depth only是什么意思?有何用处?

如果把摄像机的ClearFlags勾选为Deapth Only,那么摄像机就会只渲染看得见的对象,把背景会完全透明,这种情况一般用在两个摄像机以上的场景中

📖问一个Terrain,分别贴3张,4张,5张地表贴图,渲染速度有什么区别?为什么?

没有区别,因为不管几张贴图只渲染一次。

📖在编辑场景时将GameObject设置为Static有何作用?

设置游戏对象为Static时,这些部分被静态物体挡住而不可见时,将会剔除(或禁用)网格对象。因此,在你的场景中的所有不会动的物体都应该标记为Static。

📖动态加载资源的方式?区别是什么?

答:1.Resources.Load();

2.AssetBundle

区别:

Resources是动态内部调用,Resources在编辑环境下是project窗口的一个文件夹,调用里面的资源,可以用Resources类,比如Resources.Load,打包后这个文件夹是不存在的,会统一生成assets资源,AssetBundle 是外部调用,要用AssetBundle 首先要先把资源打包为.assetbundle文件,再动态的去加载这个文件,本地或者网络服务器都可以。
简单说,Resources资源的加载是动态加载内部的,AssetBundle 是动态加载外部的

📖使用Unity3d实现2d游戏,有几种方式?

1.使用本身的GUI,在Unity4.6以后出现的UGUI

2.把摄像机的Projection(投影)值调为Orthographic(正交投影),不考虑z轴;

3.使用2d插件,如:2DToolKit,和NGUI

📖C#的委托是什么?有何用处?

委托类似于一种安全的指针引用,在使用它时是当做类来看待而不是一个方法,相当于对一组方法的列表的引用。用处:使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。

📖什么是协同程序?

在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足。

名词解释 

先写基本概念,再用一些俗话自圆其说即可。优先看复习提纲,这些是收集的。

游戏对象:游戏对象是unity中最基本的单位,它是游戏中所有物体的基础。一个游戏对象可以是一个角色、一个道具、一个特效等,由一个或多个组件构成。游戏对象可以在场景中实例化,可以添加、删除和编辑组件,还可以在运行时进行平移、旋转和缩放等操作。

脚本:脚本是unity中用于控制游戏逻辑的代码文件。在unity中通常用c#编写。脚本可以附加到游戏对象上,通过编写方法和属性来实现对游戏对象的行为控制。脚本可以响应用户的交互事件、触发特定动画等,是游戏开发中必不可少的一部分。

预制体:预制体(Prefab)可以被看作对象资源的一个模板,创建后可以被轻松地反复使用,同时也可以统一修改场景中的所有用到该预制体对象的组件属性、参数等配置对象值。常用于被反复使用的石头、树木等环境资源、不断生成并销毁的子弹对象等。

物理引擎:物理引擎是unity中负责模拟物理效果的组件。通过物理引擎,游戏对象可以受到重力、碰撞和施加力等因素的影响,从而实现真实的物体交互和运动效果。Unity自带了一个强大的物理引擎,可以处理各种物理现象,例如物体的运动、碰撞反应、摩擦力和弹力等。

动画:动画是游戏中模拟物体运动的一种表达形式。在unity中,可以为游戏对象创建动画,并将其与不同的状态或触发条件相关联。

动画控制器:动画控制器则是用于管理动画的组件,通过定义动画的触发条件、过渡规则和跳转状态等细节,实现对游戏对象动画的控制和切换。

渲染器:渲染器是unity中负责将游戏对象显示在屏幕上的组件。渲染器可以将游戏对象的模型、材质和纹理等信息进行处理,并绘制在屏幕上。Unity中有多种类型的渲染器,如网格渲染器、粒子渲染器等,可根据开发需求使用。

场景:场景是unity中游戏的基本单位,可以理解为一个独立的游戏关卡或界面。一个游戏可以由多个场景组成,每个场景包含了一组游戏对象、所需资源和逻辑关系等。

场景管理器:场景管理器用于管理和切换不同的场景,允许在游戏运行时加载、卸载和切换场景,实现游戏的流程控制和跳转。

程序填空

1.实验专栏 

2.复习提纲指明的脚本

3.常用API

然后,祝大家题题易过题题过。🌹

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值