当前位置:   article > 正文

unity3d 制作开门动画以及收集钥匙实现开门_unity中做一个大门

unity中做一个大门

首先展示效果:

unity3d 制作开门动画以及收集钥匙实现开门

第一步,我们在Hirarchy面板上新建三个cube,再按照一定的比例调整,制作完成一个门框,然后制作一个空物体并命名为Doorframe,将三个cube合并成门框一个整体:

 然后再创建一个cube调整大小,在将合适的门移动至门框之前,创建一个空物体(doorcenter)并将此空物体的位置移动至门的右边缘中心位置,同时将门作为doorcenter的子物体,这里的操作是为后面的开门动画制作做铺垫。

开门是需要围绕门一边的轴来旋转,如果不设置空物体用来辅助旋转,那门将以自生中心为轴来旋转则达不到需要的效果。

 接下来制作开门动画:

点击Windows->Animation->Animation,出现Animation面板,在Hierarchy面板中选中doorcenter

点击Creat,命名之后会自动生成:

 左边可以理解为编辑动画,右边则用来设置动画状态等。并注意点击door,将Loop Time(循环播放)取消勾选:

在出现的Animation面板中输入帧率30:

 接下来点击上图Preview右边红点开始录制,接下来选中doorcenter,按快捷键E,点击绿轴进行旋转,旋转角度任意,点击播放键即可查看效果,开门速度太快则拖动

并将时间间隔为两秒,整体如下: 

 接下来打开动画机 

 面板中以及自动为你生成了先前编辑的动画door,首先我们点击将door删去,右键点击Creat State->empty,并且命名为Idle,因为门不能刚开始就打开,需要玩家找到钥匙才能打开,然后在家将做好的动画拖进面板,并且右键点击Idle->make transition链接至door。

 点击Parameters面板为动画播放设置条件,这里选中Trigger(触发),开门动画只需播放一次,并且将它命名为opening:

 接下来在点击idle与door之间的连线,在右侧inspector中,取消勾选

 同时点击conditions中点击+,设置Trigger:

 门这一板块结束,速度解决钥匙,创建cube,添加Sphere Collider组件,点击Edit Collider调整碰撞范围(尽量调大),然后勾选Is Trigger。

 编写钥匙代码:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class keyhold : MonoBehaviour
  5. {
  6. // Start is called before the first frame update
  7. public Transform player;//获取玩家组件
  8. private void OnTriggerEnter(Collider other)//这里Other指的是与钥匙接触的物体(即玩家)
  9. {
  10. if(other.transform==player)
  11. {
  12. other.GetComponent<player>().IsKeyhold = true;//采用GetComponent方法获取玩家脚本中的bool值并且进行修改
  13. Destroy(gameObject);
  14. }
  15. }
  16. }

对于门,选取空物体doorcenter,添加Box Collider组件,同样勾选Is Trigger,将碰撞范围调整至下图所示

 我们希望的是玩家在拿到钥匙的前提下,进去该碰撞区域,门将自动打开,未拿到钥匙则无反应

门的代码(添加到doorcenter上):

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class DoorOpen : MonoBehaviour
  5. {
  6. Animator animator;
  7. // Start is called before the first frame update
  8. public Transform player;
  9. private void Start()
  10. {
  11. animator = GetComponent<Animator>();
  12. }
  13. private void OnTriggerEnter(Collider other)
  14. {
  15. if(other.transform==player&&other.GetComponent<player>().IsKeyhold)//玩家拿到钥匙,进入碰撞区,播放动画
  16. {
  17. animator.SetTrigger("opening");
  18. }
  19. }
  20. }

 玩家代码中只需要加入以上代码即可。

 最后将我们的玩家拖放进doorcenter以及key的player位置就大功告成!

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/39403
推荐阅读
相关标签
  

闽ICP备14008679号