本节要点
#1.模型旋转实现开门效果
1.模型中心点
模型身上的坐标轴的中心点,也就是我们模型的中心点。
模型的的位置,旋转,缩放都是相对于模型的中心点来进行变化的。
2.改变模型中心点
创建一个空物体,创建父子关系,通过父物体来控制子物体。
也就间接的改变了模型的中心点。
3.中心点工具
Center:当选中两个模型的时候,设置为“Center”,模型组的中心点就在
两个模型的中间中心位置。
Pivot:当选中两个模型的时候,设置为“Pivot”,模型组的中心点就在后选
中的模型的中心点位置。
4.使用键盘按键实现开关门
使用 Transform.Rotate(Vector3,float)旋转模型:
Vector3:沿某个轴向旋转
Float:旋转的度数
#2.触发器实现开关门
1.添加触发器
① 创建一个空物体,添加“Box Collider”组件,并设置大小和中心点;
② 将“Box Collider”勾选“Is Trigger”变成触发器;
2.代码实现触发器开关门
OnTriggerEnter()
OnTriggerExit()
3.查找游戏物体
GameObject.Find(string):[静态方法] 通过名字查找游戏物体
String 游戏物体的名字
场景视图
关键代码
StudentMove
public class StudentMove : MonoBehaviour {
private Transform m_Transform;
// Use this for initialization
void Start () {
//获取相应组件的引用,声明同类型字段去接收
m_Transform=gameObject.GetComponent<Transform>();
}
// Update is called once per frame
void Update () {
//移动物体位置的关键语句
// m_Transform.Translate(Vector3.forward*0.1f,Space.World);
//参数1:Vector3移动物体的三维变量(枚举类型),表示x,y,z;Space参数2:移动物体的坐标系(枚举类型)自身坐标系或世界坐标系
//0.1f 表示将当前速度下调到原来十分之一;切记加上f
//获取相应键控制方向;w a s d
if (Input.GetKey(KeyCode.W))
{
m_Transform.Translate(Vector3.forward*0.1f,Space.World);//往前
}
if (Input.GetKey(KeyCode.S))
{
m_Transform.Translate(Vector3.back * 0.1f, Space.World);//向后
}
if (Input.GetKey(KeyCode.A))
{
m_Transform.Translate(Vector3.left * 0.1f, Space.World);//向左
}
if (Input.GetKey(KeyCode.D))
{
m_Transform.Translate(Vector3.right * 0.1f, Space.World);//向右
}
}
}
Door
public class Door : MonoBehaviour {
private Transform m_Tranform;
// Use this for initialization
void Start () {
//tranform 必须有获取相应组件 GetComponent 关键语句;
m_Tranform=gameObject.GetComponent<Transform>();
}
//测试用Z键打开门和关闭门
// Update is called once per frame
//void Update () {
// if (Input.GetKeyDown(KeyCode.Z))
// {
// //open.
// OpenDoor();
// }
// if (Input.GetKeyUp(KeyCode.Z))
// {
// //Close;
// CloseDoor();
// }
//}
//打开门公开方法
public void OpenDoor() {
m_Tranform.Rotate(Vector3.up,90);
}
//关门的公开方法
public void CloseDoor() {
m_Tranform.Rotate(Vector3.up,-90);
}
//勾选 Is Trigger 转换成触发器 否则只是碰撞体
}
DoorTrigger
public class DoorTrigger : MonoBehaviour {
//定义一个脚本的类型;
private Door m_Door;
// Use this for initialization
void Start()
{
//GameObject.Find("DoorParent") 这语句就是获取相应的gameobject 字段或属性
//GetComponent<Door>();获取相应组件 可以是脚本或者是Transform
//GameObject.Find("DoorParent") 类的静态方法 参数是游戏对象的名字 最后返回的事游戏的对象
m_Door=GameObject.Find("DoorParent").GetComponent<Door>();
}
// Update is called once per frame
//void Update()
//{
//}
//触发时执行一次开门
void OnTriggerEnter(Collider coll ) {
//Open.
if (coll.gameObject.name=="Student")
{
m_Door.OpenDoor();
}
}
//离开触发器时执行一次关门
void OnTriggerExit(Collider coll) {
//Close.
if (coll.gameObject.name=="Student")
{
m_Door.CloseDoor();
}
}
}