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 游戏物体的名字
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 骨架。
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();
}
}
}
运行动图结果如下:
因篇幅问题不能全部显示,请点此查看更多更全内容