Unity游戏物体与常用组件详解:GameObject、Components与碰撞管理

Unity游戏物体与常用组件详解:GameObject、Components与碰撞管理

以下是关于unity中游戏物体(GameObject)和认识常用组件(Component)的相关学习记录。

1.什么是GameObject和Component?

unity将游戏中的物体称为GameObject,也就是游戏物体。它包括之前学习过的3D Object【Cube(立方体)、Sphere(圆)、Capsule(胶囊体)、Cylinder(圆柱)、Plane(平面)、Quad(竖直小平面)、Empty Object(空物体)等】、Camera、Light、UI等。在一个unity场景中可以包含任意的游戏物体且每个物体都有属于自己的名称、标签等基本信息和组件等(在Inspector面板可以查看)。

组件是用来实现物体某些功能的单元,可以将游戏物体想象成一个空的容器,而组件就是存放在容器中的内容物。每个游戏物体可以挂载任意多个组件,但最少必须带有一个Transform(变换组件),没有Transform组件的游戏物体我们就无法获知它在场景中的位置。

2.物体的标签和层

物体的标签像是物体的另一个名称,但它也有自己的特点。当我们的项目中有多个玩家想通过一个脚本把它们都查找到,这时候我们就可利用标签,给它们添加上同一个标签,再通过Game Object.FindGameObjectWithTag("TagName")方法查找。通过名称查找的方法为GameObject.Find("Name"),这样只能一个个去查找。所以在某些情况下查找标签要比查找名称更快。

物体的层一般用于碰撞操作,如果想让两个物体不发生碰撞就可以给它们分好层。被unity占用的层有Default(默认层)、TransparentFx(透明特效层)、Ignore Raycast(射线忽略层)等,未被unity占用的层我们都可以自行定义和使用(Add layer->Layers内就可以添加自己想要的层)。

3.空物体

空物体就是只挂载一个Transform组件的游戏物体,在Hierarchy面板空白区域单击->Create Empty即可完成创建,在空物体上也可以挂载任意多组件。

4.物体的父子关系

情况一:组合物体。例如有一个正方体和一个圆,移动坐标轴的时候想让他们同时移动。

这时我们可以给他们组成父子关系,在层级(Hierarchy)面板中将Sphere拖拽到Cube上,这时Sphere就成为Cube的“孩子”了。

此时选中Sphere移动坐标轴发现它可以自由移动,而移动Cube时Sphere也跟着一起移动。不管是缩放还是旋转父物体上的操作子物体也会受到影响。

在这里我们可以看到不管怎么移动子物体,再次选中父物体时它们们的坐标轴总会出现在它们中间。怎么让坐标轴回到父物体自己身上,在Scene面板下导航栏内选中如上图标将Center(世界坐标系)改为Pivot(局部坐标系)就可以了。这样我们在操作旋转的时候子物体就会以父物体为中轴旋转了。

情况二:管理大量物体。当场景中创建了大量的物体时,层级面板会显得很乱,这时我们可以利用一个空物体作为它们的父物体来进行管理它们。

实现按下键盘按键开关门:

创建物体:1.门框、门扇(都是由Cube缩放移动搭建而成,添加材质(Assets文件夹内右键->Create->Material->Albedo栏修改颜色))

2.门轴(创建一个空物体->将它移动到左侧门框上贴近门扇->将门扇拖拽到它身上构成父子关系->修改为局部坐标系->测试旋转)

创建脚本:DoorContorller添加代码,按下u键实现开门,按下v键实现关门。将脚本挂载在门轴上,然后运行。

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class DoorController : MonoBehaviour

{

void Update()

{

if (Input.GetKeyDown(KeyCode.U)){

OpenDoor();

}

if (Input.GetKeyDown(KeyCode.V))

{

CloseDoor();

}

}

public void OpenDoor()

{

transform.Rotate(0, 90f, 0);

}

public void CloseDoor()

{

transform.Rotate(0,-90f,0);

}

}

5.常用组件

1.变换组件Transform,控制物体的位置、缩放、旋转等基本属性,每个物体有且仅有一个。

2.网格过滤器Mesh Filter,3D物体外观有网格组成,用于指定物体网格。

3.网格渲染器,控制物体渲染材质、灯光等。

4.胶囊碰撞器,这只是碰撞器的一种。

5.刚体Rigidbody,用于给物体添加物理特性,质量、惯性等。

6.粒子系统Particle System,用于模拟火焰、烟花、烟雾等特效。

7.动画控制器Animator,用于控制物体播放动画。

6.控制玩家移动触发开关门

搭建一个门模型:上面已经搭建了。

添加触发器:在门轴上添加一个Box Collider盒子碰撞器组件,并勾选Is Trigger(触发)。

创建玩家(Player):添加Rigidbody组件、材质。

编辑脚本:PlayerContorller、DoorContorller。

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class DoorController : MonoBehaviour

{

//判断门的状态

private bool isOpen = false;

//开门角度

public float openAngle = 90.0f;

//开门方法

public void OpenDoor()

{

//门处于关闭状态可以打开

if (!isOpen)

{

transform.Rotate(0, openAngle, 0);

isOpen = true;

}

}

//关门方法

public void CloseDoor()

{

//门处于打开状态可以关闭

if (isOpen)

{

transform.Rotate(0, -openAngle, 0);

isOpen = false;

}

}

}

using System.Collections;

using System.Collections.Generic;

using Unity.VisualScripting;

using UnityEngine;

public class PlayerController : MonoBehaviour

{

//定义玩家移动速度

public float speed = 5.0f;

private DoorController doorController;

void Start()

{

//获取控制开关门的脚本组件

doorController =GameObject.FindObjectOfType();

}

void Update()

{

//玩家移动方法

float h = Input.GetAxis("Horizontal");

float v = Input.GetAxis("Vertical");

transform.Translate(h*speed*Time.deltaTime,0,v*speed*Time.deltaTime);

}

//触发开始方法

private void OnTriggerEnter(Collider other)

{

//触发,调用开门方法

doorController.OpenDoor();

}

//触发结束方法

private void OnTriggerExit(Collider other)

{

//结束,调用关门方法

doorController.CloseDoor();

}

}

以上就是所有关于unity游戏物体和认识常用组件的学习记录了,如有错误还请大家指正。

相关推荐

水龙头阀芯怎么换?图解步骤看这里!
365bet娱乐场手机版

水龙头阀芯怎么换?图解步骤看这里!

⌛ 10-27 👁️ 934
开网店怎么找货源?
2022年bet体育365官网合法吗

开网店怎么找货源?

⌛ 08-08 👁️ 9035
绝地求生官网地址多少?pubg官网、官网入口介绍
2022年bet体育365官网合法吗

绝地求生官网地址多少?pubg官网、官网入口介绍

⌛ 07-18 👁️ 2675