接着 “T06_unity人物根物体动画 c# ”教程,保存场景,起名为 08子物体动画
作为对比子物体动画,ctrl + d 一个door,起名为 ChildDoor
并调整属性面板,我们要做一个两扇门
接着我们只留下门模型,意思是移除掉除Cube,Transform,Mesh Renderer 和 Box Collider 组件 之外的组件
调整ChileDoor 的x轴
接下来给子物体找一个空物体(父亲)
给空(根)物体起名字为ChildDoor 给子物体起名Mesh
将物体x轴调回3
在根物体创建动画
起名为ChildDoorAnimation
第一步:选择120关键帧
第二步:点开录制按钮,将子物体坐标x轴调至1.5
第三步:结束录制并播放
并起名字为MeshRight
再将Door删除del,ctrl + d 子物体 并起名为MeshLeft
打开ChildDoorAnimation动画选择第二个子物体MeshLeft将他的x轴调至-4.5
结束录制并播放
选择录制好的动画ChildDoorAnimation将他属性面板里的loop time 对勾去掉
门变得不再循环打开
接下来我们进入ChildDoor的动画器状态机
进入动画器状态机后,创建一个空状态起名 闲置Idle
将Idle设置成默认初始状态
拷贝开门动画
粘贴
并起名为ChildOpenDoor 与 ChildCloseDoor
修改关门的Speed值 为 -1
之后连线 三角关系
点击‘+’号创建参数
起名为isOpen
选择第一条线进行设置
关闭 has exit time 点击‘+’选择true
设置第二条线
关闭 has exit time 点击‘+’选择false
第三条线不设置
接下来我们创建个脚本 名为 OpenDoorByE (通过E键开门)
将该脚本绑定在ChildDoor上
注意:
动画器与脚本要在同一个物体上
将以下代码复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class OpenDoorByE : MonoBehaviour
{
private bool isNear = false; //玩家是否在门附近
private void Update()
{
if (Input.GetKeyDown(KeyCode.E))
{
GetComponent<Animator>().SetBool("isOpen", true); //开门
}
}
private void OnTriggerEnter(Collider other)
{
if(other.CompareTag("Player"))
isNear = true;
}
private void OnTriggerExit(Collider other)
{
if (other.CompareTag("Player"))
isNear = false;
}
}
接下来我们给门一个触发器,选中根物体,添加一个碰撞器
打开 is Trigger 对勾
接下来编辑碰撞器属性
点击编辑处三个连接小方块图标
会出现很多小点点,拉伸小点点调节属性
需求完成:进入触发器后按E键 即可开门 ,离开触发器自动关门