1.导入开关门资料包
2.给01_low门添加动画组件
3.窗口-动画-添加动画
将设置动画小窗口拖入到控制台一栏平级,更好的观察
创建新剪辑-添加动画,将动画命名为open
z轴控制门的开关
4.设置动画的roration值
5.创建新剪辑-添加动画,动画命名为close
close动画模拟关门的效果
注意:设置度数的时候首先要选择时间轴上的,然后进行设值
6.01_low门新建盒状碰撞器
并且在动画组件里面也可以看到开关门两个元素open close
7.01——low设置标签名
设置标签名为myDoor,方便我们在脚本文件里面获取它
8.编写door脚本文件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class door : MonoBehaviour
{
//先获取动画组件
private Animation ani;
//创建一个字段来存储射线
private Ray ray;
//存储门的状态 --一开始门是关的
private bool isOpen = false;
//存储摄像机
private Camera camera;
void Start()
{
//获取动画组件
ani = GetComponent<Animation>();
//拿到摄像机身上的camera组件
camera = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
}
// Update is called once per frame
void Update()
{
//创建一条射线 0表示鼠标左键
//当鼠标左键点击了
if (Input.GetMouseButtonDown(0))
{
//Debug.Log($"camera{camera}");
//创建一条射线 从摄像机发出射线 --传入鼠标点击的位置
ray = camera.ScreenPointToRay(Input.mousePosition);
//自己画一条射线 origin起始点画起 direction--方向 颜色
Debug.DrawRay(ray.origin, ray.direction, Color.red);
//创建一个收集器
RaycastHit hit;
//发射一条射线
Physics.Raycast(ray, out hit);
if (hit.collider.tag == "myDoor" && !ani.isPlaying)
{
Debug.Log("碰撞到了门");
//判断当前是不是关门状态,同时当前动画没有在播放中
if (!isOpen)
{
//播放动画,开门操作
ani.Play("open");
isOpen = true;
}
else
{
ani.Play("close");
isOpen = false;
}
}
}
}
}
效果如下: