概述
首先,在了解了最基础的Unity的概念、操作之后,我们来模拟一个最简单的场景,运用学过的简单的知识。场景是这样子的:
有一扇门,一个学生,学生来到门前,门会自动打开,然后学生进去,门自动关闭。
为了完成这个demo,首先我们能从上面的描述中得到两个主体,Door和Student。然后,注意一下我们需要完成的是需求是学生来到门前,这就意味着我们需要有一个触发器而不能用Door自带的碰撞体。所以,还有一个主体参与Demo,那就是一个触发器,以便于监听触发事件。
下面来分别说明一下三个主体。
1、学生(Student)
这是最简单的主体,我们可以创建一个GameObject,给其添加一个Rigidbody,然后创建一个Script,用刚体组件来控制Student的运动,代码如下:
private Transform m_Transform;
private Rigidbody m_Rigidbody;
void Start(){
m_Transform=gameObject.GetComponent<Transform>();
m_Rigidbody=gameOnjcet.GetComponent<Rigidbody>();
}
//键盘的W、A、S、D分别控制Student的向前、向左、向后、向右移动
void Update(){
if(Input.GetKey(KeyCode.W)){
m_Rigidbody.MovePosition(m_tran.pos+Vec3.for*0.2f);
}
if(Input.GetKey(KeyCode.A)){
m_Rigidbody.MovePosition(m_tran.pos+Vec3.left*0.2f);
}
if(Input.GetKey(KeyCode.S)){
m_Rigidbody.MovePosition(m_tran.pos+Vec3.back*0.2f);
}
if(Input.GetKey(KeyCode.D)){
m_Rigidbody.MovePosition(m_tran.pos+Vec3.right*0.2f);
}
}
2、门(Door)
门这个物体需要进行的操作就是使用边轴旋转,但是一个物体是不可以移动他的中心点的,所以我们会经常使用在物体外面嵌套一个父物体的方式来实现更改轴线或者中心。注意,我们创建一个空物体之后,需要先将其中心设置在合适的位置,然后再将需要操作的物体拖拽进去。这样在操作父物体实现效果。然后,门的话有两个动作,一个是开,一个是关,代码如下:
private Transform m_Transform;
void Start(){
m_Transform=gameObject.GetComponent<Transform>();
}
void Update(){}
//为了使其能在其他Script中调用,需要使用public修饰
//开门
public void open(){
m_Transform.Rotate(Vector3.up,90);//绕y轴旋转90度
}
//关门
public void close(){
m_Transform.Rotate(Vector3.up,90);//绕y轴反方向旋转90度
}
3、触发器(Trigger)
门的触发器需要根据门的形状和需求进行设计,不再赘述。触发器需要进行的操作有两个,一个是检测Student的触发,一个是使Door进行开关动作。具体操作:创建一个空物体,添加一个Rigidbody和一个Collider,并且勾选“is Trigger”,脚本代码如下:
private DoorScript door;
void Start(){
//找到门,同时找到其脚本组件 Door,这样就可以通过door调用其脚本的方法
door=GameObject.Find("Door").getComponent<DoorScript>();
}
//进入触发区域
void OnTriggerEnter(Collider coll){
door.open(); //调用开门方法
}
//离开触发区域
void OnTriggerExit(Collider coll){
door.close(); //调用关门方法
}
说实话,这是一个简单到不能再简单额示例,之所写这么繁琐,一来是培养我写博客的好习惯,二来是利用写博客的时间在脑中重新梳理一遍解决问题的步骤,因为如果开发大型项目,分析问题的清晰思路是必不可少的。
最后
以上就是要减肥航空为你收集整理的初识Unity 3D——小小小Demo(上)的全部内容,希望文章能够帮你解决初识Unity 3D——小小小Demo(上)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复