unity游戏物体和组件

以下是关于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<DoorController>();
    }
    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游戏物体和认识常用组件的学习记录了,如有错误还请大家指正。

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值