随堂笔记2

本文深入介绍了Unity3D中Transform和GameObject类的关键操作,包括位置、旋转、缩放的调整,子物体的查找与管理,以及物体激活状态的控制。通过实例展示了如何进行移动、旋转以及组件的添加与设置,是理解Unity3D对象交互的基础。
摘要由CSDN通过智能技术生成

主要是一个继承的思想,我们的MonoBehaviour是一个子类,可以直接调用父类的方法。。

主要是面对对象的思想,这里不深表。

一.Component类

1.位置,旋转,大小的改变等

    public float x = 0;
    public float y = 0;    
    public float z = 0;
    public float w = 0;
private void Update()
    {
        this.transform.rotation = new Quaternion(w, x, y, z);
    }

this是这个物体,transform组件下面的rotation,这个rotation是个四元数,由于四元数是个结构体,我们new构建一个结构体四个变量public控制可以在编辑器中改变,Update来更方便的观察角度的改变。

2.改变颜色

private void Start()
    {
        this.GetComponent<MeshRenderer>().material.color = Color.gray;
    }

我们直接在start方法中调用,this获取这个游戏对象,getcomponent获取组件meshrenderer下面的材质,材质里包含颜色,在color这个结构体内可选择颜色。

先展示这两个,其实调用的方法都是一样的,其他的按下不表

二.transform类

3.世界位置,相对位置

世界位置“Position”:相对与(0,0,0)世界坐标.

相对位置“localPosition”:相对于父物体的位置

当然这是关于中心的,这个中心是关于模型的

对与子物体来说他的位置一都是相对位置,是相对于父物体的位置,当我们将其调至(0,0,0)时他与父物体重合,同样包括旋转缩放都是相对于父物体的。

当我们要调用世界位置时就调用position就好了

private void Start()
    {
        this.GetComponent<Transform>().localPosition = Vector3.zero;
        this.GetComponent<Transform>().position = Vector3.zero;
    }

关于大小也有相对大小与相关于世界的大小当我们Vector3(1,1,1)时对于父物体来说他是相对于世界来说的,都是1m,当对于子物体来说就是关于父物体的放大缩小倍数。

localScale:与父物体缩放比例。

lossyScale(实际缩放比例):与父物体缩放比例*自身缩放比例。

this.GetComponent<Transform>().localScale = Vector3.one;

还有一点是 localScale是get和set的

而lossyScale是只读的

4.translate移动(常用)

首先他是一种方法

包含方向和距离

private void Start()
    {
        this.transform.Translate(Vector3.one);
    }

向自身坐标系的向量方向移动一米

private void Start()
   {
        this.transform.Translate(1,1,1,Space.Self);
        
    }

他还有一个重载可以选择在世界坐标轴移动。

private void Start()
    {
        
        this.transform.RotateAround(Vector3.zero, Vector3.up, 30);
     } 
    

还有一个围绕旋转RotateAround(点,轴,角度)。

rotate的其他与transla一样这里就不赘述。

5.关系

private void Start()
    {
        Transform root=this.transform.root;
        Transform parent=this.transform.parent;
    }

获取根物体以及获取父物体。

public Transform tf;
    private void Start()
    {
        //世界坐标
        this.transform.SetParent(tf);
        //locationposition坐标
        this.transform.SetParent(tf,false);
    }

改变父物体

这里有两个重载,不加false默认ture,这个含义是指当前坐标是否是世界坐标。

早期可读可写tf,现在是只能获取了,否则警告

public Transform chlidTF;

    private void Start()
    {
        chlidTF = this.transform.Find("子物体名称");
        chlidTF = this.transform.Find("子物体名称 /子物体名称/子物体名称");
    }

寻找子物体(找不到子物体的子物体)

找物体用路径,当路径不变时可以用这个路径,但是如果当路径发生改变,程序就会异常所以一般不用这个用法。

private void Start()
    {
        
        int count=this.transform.childCount;
        for(int i = 0; i < count; i++)
        {
            Transform child = this.transform.GetChild(i);   

        }
    }

根据索引获取子物体

总结:

transform类提供了物体与物体之间的关系位置等方法(包括查找(父,根,子),变换组件,改变位置,角度,大小,移动,旋转,围绕旋转等)

三,GameObject类

场景里面所以实体的基类(Hierarchy内的物体)

1.变量

        activeInHierarchy(场景里面的物体是否已经激活)

        activeSelf(只读)(激活状态)

        setActive(设置物体的禁用启用)

区别:警用一个物体可以将其激活状态取消,或者将其父物体的激活状态取消,activeInHierarchy是指这个物体实际的激活状态,而activeSelf是物体自身激活状态(其实就是那个勾)。

        还包括layer(层级),scene(场景),tag(标签),transfrom(位置)等其他变量

2.方法

        

private void Start()
    {
        //创建一个物体
        GameObject lightgo = new GameObject();
        //通过这个物体创建这个组件light这个光源
        Light light = lightgo.AddComponent<Light>();
        //设置光源颜色
        light.color = Color.white;
        //设置光源类型:点光源
        light.type = LightType.Point;
    }

添加组件方法:AddComponent<>()我们要先建立一个物体再将组件添加上去

private void Start()
    {
        //慎用!!他会遍历所以场景中的物体,再一些大的项目中物品数目很多
        GameObject.Find(" 游戏对象名称");
        // 用于寻找所以使用该标签的物体,它返回的是一个数组
        GameObject[] alltagitem = GameObject.FindGameObjectsWithTag("tag"); 
        //用于寻找使用该标签的物体(单个)
        GameObject item = GameObject.FindGameObjectWithTag("tag");
    }

四,object类

1.变量

        name:访问游戏物体的名称

2.函数

        destroy("object"):删除一个游戏对象.

private void Start()
    { 
        //根据类型查找对象
        Object.FindObjectOfType<MeshRenderer>();
        Object.FindObjectsOfType<MeshRenderer>();

    }

我们可以用第二个方法查找所有敌人

也可以用第一个方法找到玩家(一般玩家就一个)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值