游戏物体

游戏物体

1.物体的标签和层级

标签可以方便查找物体。

层级可以运用在一些操作上,比如Camera中Inspector中的Culling Mask上,可以通过勾选掉一些层级来屏蔽显示一些物体

 

2.摄像机

组件Camera>Projection下的persepective表示透视,透视模式下可以通过Field in view调镜头的角度;另一个Orthography表示正交即在播放时场景没有透视效果。

组件Camera>Clipping Planes为视距设置选项,在视距范围之外(高于最远视距,低于最近视距)的物体无法被摄像机看到。

 

3.预制件

3.1克隆预制件

使用的API:GameObject.Instantiate(变量名);

示例:

using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        GameObject go = Resources.Load<GameObject>("Cubes/Cube");
        GameObject.Instantiate(go);
    }
}

在Project中新建Resources文件夹,在Resources文件夹下新建Cubes文件夹,将Hierachy中做好的物体Cube拖入Cubes文件夹中,制成预制件。该段代码实现的功能是:在运行时将Resources/Cubes文件夹中的Cube预制件克隆一份并显示。

3.2修改预制件

预制件的修改的两种方式;

第一种:在Project中双击预制件,或者在Hietachy中点击其中一个预制件的最后的“>”标志,进入预制件修改视图,在修改视图中进行预制件的修改。

第二种:在Hierachy中选择一个预制件,直接进行修改,修改后再单击Hierachy中的预制件,在Inspector中找到Override按钮,点击按钮并选择Apply All即可完成对预制体的修改。预制件的Inspector中的组件参数修改后会留下标记,在标记行点击鼠标右键会出现Apply to prefab”/*预制件名称*/”的提示框,点击即将修改应用至预制件。

 

4.通过脚本操作物体

4.1查找物体

4.1.1按照路径查找物体

使用的API:GameObject.Find(物体的Hietachy路径);

示例:

using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        GameObject go = GameObject.Find("Cube/Sphere");
        go.SetActive(false);
    }
}

在Hierachy中新建一个物体Cube,在Cube下新建一个子物体Sphere,将含上面代码的脚本挂载到某一物体上,可以实现在运行时隐藏物体Sphere,若一个文件夹下有同名的多个物体,则查找到的物体为创建时间最短的物体。

4.1.2.按照标签查找

使用的API:GameObject.FindGameObjectWithTag("标签名");

示例:

using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        GameObject go = GameObject.FindGameObjectWithTag("Player");
        go.SetActive(false);
    }
}

该段代码的功能是找到最后将标签设置成Player的物体,并在运行时隐藏该物体。

 

4.2修改物体名称

使用的API:物体名.name=”修改后物体名称”;

示例:

using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        GameObject go = GameObject.Find("Cube/Sphere");
        go.name = "CuteSphere";
    }
}

该段代码功能是找到物体Sphere,并在运行时将该物体名称改为CuteSphere。

 

4.3修改物体位置

使用的API:变量名.transform.position=/*更改后的位置*/

示例:

using UnityEngine;

public class Temp : MonoBehaviour
{
    public GameObject cube;
    void Start()
    {
        cube.transform.position = new Vector3(2, 1, 3);
    }
}

该段代码功能是,将物体的位置移动到世界坐标(2,1,3)的位置。

如果是想让物体移动到相对坐标(2, 1, 3)的位置,可将代码cube.transform.position = new Vector3(2, 1, 3);写成cube.transform.localposition = new Vector3(2, 1, 3);

如果想让找到的物体在运行时旋转一定角度,可以将上面示例中的代码cube.transform.position = new Vector3(2, 1, 3);写成go.transform.Rotation= Quaternion.Euler(new Vector3(a, b, c))或cube.transform.eulerAngles = new Vector(a,b,c))/*a,b,c表示旋转角度*/;

如果想让找到的物体在运行时放大或缩小,可以将上面示例中的代码cube.transform.position = new Vector3(2, 1, 3);写成cube.transform.localScale = new Vector3(a,b,c))/*a,b,c表示放大倍数*/;

 

4.4删除物体

使用的API:Destroy( );

示例:

using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        GameObject go = GameObject.Find("Cube/Sphere");
        Destroy(go);
    }
}

该段代码功能是找到物体Sphere,并在运行时删除该物体。

如果想实现在运行后5秒消除,可以将代码Destroy(go);修改为Destroy(go,5);。

如果想让物体在切换场景的时候不销毁,可以将Destroy(go);修改为DontDestroyOnLoad(go);。

 

4.5克隆物体

示例:

using UnityEngine;

public class Test : MonoBehaviour
{
    public GameObject Cube;
    void Start()
    {
        GameObject.Instantiate(Cube);
    }
}

将含上面代码的脚本挂载到某一物体上,并将需要克隆的物体Cube拖入脚本组件中,运行后便可在场景中得到一个克隆的预制体Cube。

 

 

posted @ 2023-05-29 19:29  gatran  阅读(9)  评论(0编辑  收藏  举报