游戏物体与脚本的简介及使用方法

游戏物体与脚本的简介及使用方法

/yuxiuyan/p/7565345.html

一、组件和脚本介绍

1. 组件

组件,顾名思义,就是游戏对象的组件。

这与我们对现实生活的理解是一致的。 例如一台主机由CPU、显卡、主板、内存条等组成。 这些部分是主机的“组件”。 一旦对这些组件不满意,可以随时进行增删改查。

Unity3D是一个“组件”游戏引擎,它使用各种组件来“组装”游戏对象,最终将游戏对象组装成游戏。

unity触发器调用_unity触发时播放音效_unity触发器触发动画

上图是Plane的内置组件。

Unity3D 为我们提供了多种组件。 后期其实就是各种组件的用途和特点,以及它们能达到的功能和效果。

按照我们祖先的理论,五行是构成世界的最基本的元素。 那么在Unity3D中,组件是构成游戏世界的最基本元素。

unity触发器调用_unity触发器触发动画_unity触发时播放音效

我总结了上面这张图,很重要,需要大家仔细看看。 因为这涉及到游戏对象与脚本中的类、对象之间的联系。

2.变换组件

这是最基本的组件之一 - Transform 组件。

Transform,中文为“变换”,该组件具有三个基本属性,Position(世界位置坐标)、Rotation(相对于自身坐标系的旋转角度)、Scale(相对于初始缩放比例)。

该组件是每个游戏对象的属性,无法删除。 其实仔细想想,在现实生活中,只要是物体,就一定有方向、旋转、缩放等属性。

通过修改这三个属性的X\Y\Z值,我们可以控制对象的“变形”信息。 这是一个小技巧。 当你把鼠标放在X\Y\Z上时,鼠标变成了一个可以左右拖动的符号,可以直接左右拖动改变数值。 当然直接修改值也是可以的。

3.脚本

脚本(Script)unity触发器调用,即为游戏对象编写的代码,用于控制游戏的逻辑。 Unity3D 5.x之后,只支持C#脚本和JavaScript脚本。 国内主流的C#开发。

4. 创建和管理脚本

我们说过,Assets文件夹是管理器,所以我们在Assets中新建一个Scripts文件夹来管理脚本资源。

右键单击脚本文件夹 --> 创建 --> C# 脚本。 C#脚本文件的后缀为“.cs”。 双击脚本文件调用代码编辑器进行编辑。

5. 原脚本代码构成

上一步我们新建了一个脚本,这次打开看看是什么。

unity触发器调用_unity触发器触发动画_unity触发时播放音效

好了,我们看到这次unity为我们新建了一个类,类名就是我们脚本文件的名字。 然后它继承自MonoBehaviour类。 这个类在unity中的地位和作用类似于java中的Object类,重要性不言而喻。

有兴趣的童鞋可以去看看这个类的实现。 你可以看看这篇文章:。

还可以看到这个脚本使用了UnityEngine引擎。 然后unity还帮我们写了两个方法Start()和Update()。

Start():游戏开始时,该方法会立即执行,并且只会执行一次。 从这个角度来看,这种方法非常适合初始化工作。 其实也是这样的。 我们经常会在这个方法中做一些GetComponent()操作。

Update():循环调用,每帧一次。 我粗略测了一下,一般场景每秒60次左右。

这里还有一个方法要介绍一下:Debug.Log()。 这用于调试输出。 如果你的目标是“helloworld”,好吧,这个方法就是这样做的。

顺便说一句,Start()和Update()都是Unity内部的“事件方法”,我们不需要手动调用它们,系统会自动调用和管理这些方法。

6.使用脚本

运行游戏,脚本会自动执行。

这是一个 first.cs 脚本:

使用统一引擎;

使用系统。 收藏品;

公共课第一:MonoBehaviour {

无效开始(){

Debug.Log("这是启动方法");

}

无效更新(){

Debug.Log("这是更新方法");

}

}

加入灯光,运行游戏,控制台效果:

2.鼠标键盘输入

以上我们已经知道了C#脚本的大致套路。 说起写代码是各位童鞋的强项。 这次我们实现游戏来读取我们的输入。

Unity已经好心的给我们写好了方法,我们只需要调用这些接口就可以了。

1.获取键盘输入

unity触发器触发动画_unity触发时播放音效_unity触发器调用

案例如下:

使用统一引擎;

使用系统。 收藏品;

公共类 InputTest :MonoBehaviour {

无效更新(){

如果(输入。GetKey(KeyCode。A))

{

Debug.Log("按下了一个键");

}

如果(输入。GetKeyDown(KeyCode。A))

{

调试。 日志(“GetKeyDown”);

}

如果(输入。GetKeyUp(KeyCode。A))

{

调试。 日志(“GetKeyUp”);

}

}

}

2.获取鼠标输入

直接上方法

unity触发时播放音效_unity触发器触发动画_unity触发器调用

用法和监听键盘输入类似,这里就不写代码示例了

3.使用transform组件移动游戏对象

鼠标键盘监听控件上面说了,Transform组件也说了。 我们可以使用脚本将两者结合起来,让游戏对象通过键盘移动!

unity触发器调用_unity触发时播放音效_unity触发器触发动画

unity触发器调用_unity触发器触发动画_unity触发时播放音效

备注:脚本也可以看成是组件。 一般是脚本挂载在哪个对象上,控制哪个游戏对象。

这是一个例子:

使用统一引擎;

使用系统。 收藏品;

公开课 StudentMove : MonoBehaviour

{

私有转换反式;

//使用这个进行初始化

无效开始()

{

trans = 游戏对象。 获取组件();

}

// Update 每帧调用一次

无效更新()

{

如果(输入。GetKey(KeyCode。W))

{

trans.Translate(Vector3.forward * 0.1f, Space.World);

}

如果(输入。GetKey(KeyCode。A))

{

trans.Translate(Vector3.left * 0.1f, Space.World);

}

if (Input.GetKey(KeyCode.S))

{

trans.Translate(Vector3.back * 0.1f, Space.World);

}

如果(输入。GetKey(KeyCode。D))

{

trans.Translate(Vector3.right * 0.1f, Space.World);

}

}

}

将这个脚本拖到游戏对象的Inspector面板中,然后点击游戏的“运行”按钮,可以发现我们已经可以通过W\A\来控制对象的前后左右移动了键盘的 S\D 键! 惊人的!

4. 物理组件刚体

上面我们通过Transform组件实现了物体位置的移动,但是仔细研究后发现有以下特点:

看似物体在动,但又不是真实的,与我们的现实生活有很大的不同。

unity触发器调用_unity触发时播放音效_unity触发器触发动画

《愤怒的小鸟》大家应该都听过或者玩过。 小鸟的抛物线运动和石头的崩塌,都符合物理定律。

我们说过组件是构成游戏对象的构建块。 因此,我们需要其他组件来使对象遵守物理定律。

1.刚体

Rigidbody 属于物理组件。 添加了刚体组件的游戏物体会产生重力,会做自由落体运动,实现了真实物体的物理运动。

选择游戏对象-->菜单栏,点击Component-->Physics-->Rigidbody,给对象添加一个刚体组件就成功了!

unity触发时播放音效_unity触发器调用_unity触发器触发动画

2.公共属性

看上图,我们来看看它的几个常用属性。

质量[quality],可以设置物体的质量,可以把单位想成KG。

阻力【阻力】,一般指空气阻力,0表示没有空气阻力,空气阻力越大,物体自由落体越慢。 当该值很大时,物体甚至会停止移动并漂浮在空中。

Angular Drag [角阻力],空气受到扭转力时的阻力,0表示没有阻力,值大时,物体甚至会停止运动。

使用重力[使用重力]。 勾选时,如果物体掉出场景,就会坠入“深渊”。

unity触发器调用_unity触发时播放音效_unity触发器触发动画

3.在脚本中使用刚体组件移动游戏对象

unity触发器调用_unity触发时播放音效_unity触发器触发动画

unity触发器调用_unity触发时播放音效_unity触发器触发动画

unity触发器调用_unity触发器触发动画_unity触发时播放音效

直接进入脚本:

使用统一引擎;

使用系统。 收藏品;

公共类 RigidbodyMove:MonoBehaviour

{

私有转换反式;

私人刚体刚体;

//使用这个进行初始化

无效开始()

{

trans = 游戏对象。 获取组件();

刚性 = 游戏对象。 获取组件();

}

// Update 每帧调用一次

无效更新()

{

如果(输入。GetKey(KeyCode。W))

{

rigid.MovePosition(trans.position + Vector3.forward * 0.1f);

}

如果(输入。GetKey(KeyCode。A))

{

rigid.MovePosition(trans.position + Vector3.left * 0.1f);

}

if (Input.GetKey(KeyCode.S))

{

rigid.MovePosition(trans.position + Vector3.back * 0.1f);

}

如果(输入。GetKey(KeyCode。D))

{

rigid.MovePosition(trans.position + Vector3.right * 0.1f);

}

}

}

代码很简单,却实现了像真实物体一样的物理运动,很神奇。

5.物理组件的对撞机

1.对撞机

上面使用刚体组件的对象可以与场景中的其他对象产生碰撞效果。 其实有一个专门负责与目标物体碰撞的组件,就是碰撞器组件(Collider)。

也就是说,我们控制的对象A和对象B的碰撞本质上是对象A和对象B的碰撞体组件之间的交互。

unity触发器触发动画_unity触发器调用_unity触发时播放音效

碰撞体可以理解为我们模型的“外骨骼”。

unity触发时播放音效_unity触发器触发动画_unity触发器调用

这是没有移动的原始立方体。

屏蔽物体的渲染器(取消勾选上面的Renderer),看看物体的碰撞体是什么样子的:

unity触发器触发动画_unity触发时播放音效_unity触发器调用

显示的是Cube外层的碰撞体组件。

只要我们创建了一个物体,unity就会默认为我们添加一个collider组件。 没有对撞机的刚体是没有意义的3D场景,失去了刚体应有的物理特性。

换句话说,物理由 Rigidbody 组件和 Collider 组件一起表示。

其实这对“同志好朋友”的故事有很多很多unity触发器调用,大致概括一下。

unity触发时播放音效_unity触发器调用_unity触发器触发动画

对撞机组件按形状大致可分为以下几类。

2. 盒子对撞机

unity触发器调用_unity触发器触发动画_unity触发时播放音效

Box Collider,外形呈立方体,用于包裹箱体模型,如箱子、门、房屋等。 有几个共同的属性:

unity触发器触发动画_unity触发时播放音效_unity触发器调用

Is Trigger:设置是否为触发器。 这个属性很重要,后面会经常用到触发器。

材料:物理材料。

center:碰撞器也可以设置中心点。 一般来说,碰撞体的中心点就是物体的几何中心点。

尺寸:设置物体“外骨骼”的尺寸。

3. 球体对撞机

unity触发时播放音效_unity触发器触发动画_unity触发器调用

unity触发器触发动画_unity触发器调用_unity触发时播放音效

spherical collider和上面的box collider基本类似,Radius就是半径。

4. 胶囊对撞机

unity触发器调用_unity触发时播放音效_unity触发器触发动画

unity触发器触发动画_unity触发时播放音效_unity触发器调用

胶囊对撞机与球形对撞机具有相似的属性,方向是指设置其高度的方向。

5. 网格对撞机

网格碰撞器,用于包裹具有复杂结构的模型

Mesh:根据指定的mesh生成碰撞体。

6.刚体常用方法介绍

有了组件,就必须有新的方法。

1. 加力()

作用:给刚体一个力,使刚体按“世界坐标系”运动。

unity触发器调用_unity触发时播放音效_unity触发器触发动画

其中,ForceMode为力模式,为枚举类型,决定了如何给刚体加力。

unity触发器调用_unity触发器触发动画_unity触发时播放音效

使用统一引擎;

使用系统。 收藏品;

公共类 ForceTest:MonoBehaviour

{

私人刚体刚体;

无效开始()

{ // 获取对象的刚体组件

刚性 = 游戏对象。 获取组件();

}

无效更新()

{ //相对于世界坐标系给刚体施加一个向前的力

rigid.AddForce(Vector3.forward, ForceMode.Force);

}

}

2. 添加相对力()

作用:给刚体加一个力,使刚体按“自身坐标系”运动。

unity触发时播放音效_unity触发器调用_unity触发器触发动画

由此我们可以知道AddForce()和AddRelativeForce()非常相似。 它们其实是双胞胎,只不过一个是相对于世界坐标系,一个是相对于自身坐标系。

3.固定更新()

这是一种固定的更新方法。 这个方法值得一说。 网上的资料挺多的,大家不要瞎扯了~

Update()方法每帧刷新一次,但时间间隔不确定。 FixedUpdate() 方法以固定时间间隔(默认为 0.02 秒)刷新。

这个值可以自己设置。 编辑-->项目设置-->时间-->固定时间步长。

unity触发器调用_unity触发器触发动画_unity触发时播放音效

基本上,物理相关操作的代码都写在 FixedUpdate() 方法中。 如果写在Update()中,会出现卡顿现象。

7. 刚体碰撞事件监控与处理

一、碰撞事件简介

什么是“碰撞事件”? 当由刚体控制的对象与另一个对象发生碰撞时,会触发碰撞事件。

注意:目标对象必须有 Collider 组件。

碰撞

比如在一个射击游戏中,我们发射了一颗子弹,它是一个由刚体控制的物体。 子弹击中了敌人,我们如何监控这次碰撞?

2. 碰撞事件监测方法

这个 Collision 参数是什么?

这是一类“碰撞”,用于传递碰撞信息。

Collision.gameObject 属性,对与当前对象发生碰撞的对象的引用。

gameObject.name 属性游戏动态,当前对象的名称。

上面的代码示例:

使用统一引擎;

使用系统。 收藏品;

公共类 CollisionCube:MonoBehaviour {

void OnCollisionEnter(碰撞碰撞)

{

如果(coll.gameObject.name !=“地面”)

Debug.Log("输入" + coll.gameObject.name);

}

无效 OnCollisionExit(碰撞科尔)

{

如果(coll.gameObject.name !=“地面”)

Debug.Log("退出" + coll.gameObject.name);

}

无效 OnCollisionStay(碰撞科尔)

{

如果(coll.gameObject.name !=“地面”)

Debug.Log("留下来" + coll.gameObject.name);

}

}

8.刚体触发事件监听及处理

一、触发事件介绍

在collider组件上选择Is Trigger选项,当前游戏对象的collider组件就变成了一个触发器。

我想每个人都应该理解“触发器”的概念。

注意:移动的刚体物体将穿透选中“Is Trigger”选项的对撞机。

当刚体控制的对象进入另一个对象的触发范围内时,就会产生触发事件。

这并不直接与目标物体发生碰撞(接触),而是只要进入目标物体的“触发范围”就可以进行一定的操作。

那么如何设置“触发范围”呢? 其实和我们上面设置碰撞体范围的方法是一样的。

2.触发事件监听方法

这个 Collider 参数是什么?

这是一类“碰撞器”,用于传递触发信息。

Collision.gameObject 属性,进入触发范围内目标对象的引用。

gameObject.name 属性,当前对象的名称。

使用统一引擎;

使用系统。 收藏品;

公共类 TriggerCube:MonoBehaviour {

void OnTriggerEnter(对撞机科尔)

{

Debug.Log (coll.gameObject.name+"on trigger enter");

}

void OnTriggerStay(对撞机科尔)

{

Debug.Log(coll.gameObject.name+"on trigger stay");

}

void OnTriggerExit(对撞机科尔)

{

Debug.Log (coll.gameObject.name+"on trigger exit");

}

}

9. 游戏打包发布

那么,当我们制作了一个游戏之后,我们如何将它发布到各个平台呢?

这实际上很容易。 untiy 已经为我们做了大部分的事情。

要做的事情:

1.构建设置[构建设置]

unity触发器触发动画_unity触发时播放音效_unity触发器调用

unity触发时播放音效_unity触发器调用_unity触发器触发动画

2.播放器设置【详细设置】

unity触发时播放音效_unity触发器调用_unity触发器触发动画

三、产品介绍

一个exe文件,一个data文件夹,缺一不可。

10. 入门总结

这一阶段,我们从最简单的组件和脚本开始,介绍了鼠标和键盘的交互,如何移动物体,学习了刚体、碰撞器和几个常用的方法,还学习了打包和发布。

那么unity的基本操作就差不多结束了。 虽然还有很多东西没有介绍,但我们在制作demo的过程中再学习再用。 上面介绍的所有方法和属性我也写了一个思维导图文件,缩略图:

unity触发时播放音效_unity触发器触发动画_unity触发器调用

详细地址: 链接: 密码:8xq0

用什么开发《王者荣耀》系列游戏

看完这篇文章你有什么收获吗?欢迎转发分享给更多的人

关注“DotNet”并提高您的 .Net 技能

unity触发时播放音效_unity触发器调用_unity触发器触发动画