Unity3D入门(十一):疯狂教室案例开发

模型旋转实现开门效果

1.模型中心点
模型身上的坐标轴的中心点,也就是我们模型的中心点。
模型的的位置,旋转,缩放都是相对于模型的中心点来进行变化的。

2.改变模型中心点
创建一个空物体,创建父子关系(将Door拖拽到空物体下),通过父物体来控制子物体。
也就间接的改变了模型的中心点。
在这里插入图片描述

3.中心点工具
Center:当选中两个模型的时候,设置为“Center”,模型组的中心点就在
两个模型的中间中心位置。
Pivot:当选中两个模型的时候,设置为“Pivot”,模型组的中心点就在后选中的模型的中心点位置。

4.使用键盘按键实现开关门
使用 Transform.Rotate(Vector3,float)旋转模型:
Vector3:沿某个轴向旋转
Float:旋转的度数

public class Door : MonoBehaviour {

    private Transform m_Transform;

	void Start () {
        m_Transform = gameObject.GetComponent<Transform>();
	}

	void Update () {
		if(Input.GetKeyDown(KeyCode.Z))
        {
            //open.
            OpenDoor();
        }

        if (Input.GetKeyUp(KeyCode.Z))
        {
            // close.
            CloseDoor();
        }
    }

    public void OpenDoor()
    {
        m_Transform.Rotate(Vector3.up, 90);
    }

    public void CloseDoor()
    {
        m_Transform.Rotate(Vector3.up, -90);
    }
}

开门关门方法:

    public void OpenDoor()
    {
        m_Transform.Rotate(Vector3.up, 90);
    }

    public void CloseDoor()
    {
        m_Transform.Rotate(Vector3.up, -90);
    }

触发器实现开关门

1.添加触发器
① 创建一个空物体,添加“Box Collider”组件,并设置大小和中心点;
② 将“Box Collider”勾选“Is Trigger”变成触发器;

2.代码实现触发器开关门
OnTriggerEnter()
OnTriggerExit()

3.查找游戏物体
GameObject.Find(string):[静态方法] 通过名字查找游戏物体
String 游戏物体的名字

通过 Tag 标签查找物体

1.Tag 简介
Tag 标签,就是一个标签。标签可以起到标识,区分的作用。
同一类的模型,我们可以根据需要给他们设置成统一的标签。

2.给模型添加 Tag 标签
选中一个模型,在模型的 Inspector 面板上的顶部位置,设置 Tag 选项为一个具体的标签。
如果说引擎提供的标签没有自己想要的标签,可以自己手动添加新标签。
演示标签的添加方式。

3.通过 Tag 标签查找 N 个物体
GameObject.FindGameObjectsWithTag(string):[静态方法]
通过特定的标签,查找到所有“贴有”该标签的游戏物体,返回一个数组。
String:标签名
新建一个空物体,新建脚本附上。

4.for 循环输出模型信息
通过 for 循环遍历 FindGameObjectsWithTag()方法返回的数组,输出游戏物体的信息。

5.通过键盘按键实现桌椅跳动
按下某键,桌椅全部上移 2 米;
抬起某键,桌椅全部下移 2 米;

触发器实现桌椅跳动

1.创建触发器
在桌椅的范围内,创建一个空物体,然后添加 Box Collider,并调整大小,使之完全包裹住所有的桌椅。下图的绿色框即为Box Collider 骨架。
在这里插入图片描述
最后勾选“Is Trigger”属性。

2.使用触发器实现桌椅跳动
OnTriggerEnter() OnTriggerExit()

public class DeskTrigger : MonoBehaviour {

    private GameObject[] m_desk;
	// Use this for initialization
	void Start () {
        m_desk = GameObject.FindGameObjectsWithTag("Desk");
        /*
        for(int i = 0; i < m_desk.Length; i++)
        {
            Debug.Log(m_desk[i].name);
        }
        */
	}
	
	// 利用按键进行控制
	void Update () {
		if(Input.GetKeyDown(KeyCode.Z))
        {
            DeskUp();
        }

        if (Input.GetKeyUp(KeyCode.Z))
        {
            DeskDown();
        }
    }

    void DeskUp()
    {
        for(int i = 0; i < m_desk.Length; i++)
        {
            m_desk[i].GetComponent<Transform>().Translate(Vector3.up * 10, Space.Self);
        }
    }

    void DeskDown()
    {
        for (int i = 0; i < m_desk.Length; i++)
        {
            m_desk[i].GetComponent<Transform>().Translate(Vector3.down * 10, Space.Self);
        }
    }
    void OnTriggerEnter(Collider coll)
    {
        if(coll.gameObject.name == "Student")
        {
            DeskUp();
        }
    }

    void OnTriggerExit(Collider coll)
    {
        if(coll.gameObject.name == "Student")
        {
            DeskDown();
        }
    }
}

运行动图结果如下:
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值