从零开始教你用Unity做一个自动感应门

文章目录


使用Unity对墙体的交互动作进行制作

一、设置物体参数

1、打开实现的项目(可以人在走动),选一块平地一排放三个长方体组成一面墙,中间的长方体薄一点当门用。参考下面的尺寸。

  • GameObject-〉Create Other-〉Cube-〉重命名Wall
    Inspector-〉Wall的Potion:640、102、0,Scale:10、3.5、1
  • Hierarchy-〉Wall-〉Duplicate-〉重命名Wall2
    Inspector-〉Wall2的Potion:660、102、0,Scale:10、3.5、1
  • Hierarchy-〉Wall-〉Duplicate-〉重命名Door
    Inspector-〉Door的Potion:650、102、0,Scale:10、3.5、0.4

运行看效果,通过键盘和鼠标正面走近三个方块组成的墙
door-001

2、单击Scene视图右上角的图标(竖向的三个小点)-〉Add Tab-〉Animation,Animation视图就显示在Unity的主控面板上

door-002

3、创建动画文件

Hierarchy-〉Door-〉在Animation面板左上方的红点下面有一上下双向箭头按钮-〉单击Create New Clip->为Door创建一个动画,弹出保存对话框,输入Door-open并保存
door-003

4、在Door的Inspector面板中出现Amimator组件

door-004

5、开始录制动画

下面开始录制动画,单击Animation面板的红色按钮-〉Add Property
–〉Transform-〉Position-〉按右边的+
door-005

6、移动红色的时间帧到1:00位置-〉在Scene面板中,沿Y轴向下移动Door,使其顶部的面与Floor对齐

door-006

7、再次单击红色按钮,完成动画记录

door-007

8、运行,在Game视图查看Door的动画,门下降的动画自动在场景中播放

door-008

二、Animator组件

1、将Animator组件更换为Animation组件

Animator组件在使用脚本互动时较Amination组件复杂
Inspector->Add Component->Miscellaneous->Animation
door-009

扫描二维码关注公众号,回复: 14292502 查看本文章

2、将Assets下的Door-open动画添加到场景Door的Amination组件的Animation右边的参数选项

door-010

Door的Inspector窗口下方出现Amination->点开下面的Animations,size=1, Element 0 选Door-open;Play Automatically右边打勾

3、右击Animator ->Remove Component,删掉Animator组件

dorr=011

4、运行,在Game视图查看Door的动画,门下降的动画自动在场景中播放,去掉Amination组件的Play Automatically,门不再下降

door-012

三、脚本实现,当人走进门时,门再下降

1、Door->Assets-〉Create-〉C#,在Project面板选择新建的脚本,重命名为Door.cs

door-013

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Door : MonoBehaviour
{
    
    
    bool flagdoor = false;
    public GameObject door;
    void Update()
    {
    
    
        float dis = (this.transform.position - door.transform.position).sqrMagnitude;
        if (!(flagdoor) && dis <= 20.0f)
        {
    
    
            door.GetComponent<Animation>().Play("Door-open");
            flagdoor = true;
        }
        if (flagdoor && dis > 20.0f)
        {
    
    
            door.GetComponent<Animation>().Play("Door-close");
            flagdoor = false;
        }
    }
}

2、再参照录制动画Door-Open的过程录制Door-Close,由下往上升

door-015

3、Project->Asset->选中Door-open动画 -> Inspector最右边的下拉按钮(竖向的三点)-〉Debug-〉Lagacy选项打勾

door-016

4、Project->Asset->选中Door-close动画 -> Inspector最右边的下拉按钮-〉Debug-〉Lagacy选项打勾

door-017

5、Debug最右边的下拉按钮-〉 Normal回到 Inspector窗口

door-018

6、Inspector-〉Aminations-〉Size=2,此时会在下面出现Element 0和Element 1

将Assets下的Door-open动画拖放到场景Door的Amination组件的Element 0;将Door-Close拖放到Element 1
door-019

7、修改ThirdPersonController_LITE的Door(Script)组件下的参数:Door右边的选项为door.

dor-020

8、运行,使用W、A、S、D健,当游戏玩家向场景中的Door对象靠近时,触发Door-Open动画

door-021
door-022
door-023

三、总结

通过借助前一个项目的人物运动控件,这次设计了一个自动感应的门,实现了当人物接近20cm内自动开门,当人物离开20cm外门自动关闭。

这次项目从细化到编程语言、脚本与设计,从Unity应用策划到发布,真正贴近实际生产环境开发,为以后AR/VR开发打下基础。

猜你喜欢

转载自blog.csdn.net/Prototype___/article/details/123846076