zl程序教程

您现在的位置是:首页 >  其他

当前栏目

元宇宙3D游戏开发规则丨元宇宙3D游戏链游系统开发实现技术逻辑及方案丨元宇宙3D游戏链游源码案例部署

2023-06-13 09:17:08 时间

  3D场景构建

  场景主体搭建本场景参考此淘宝商品。本项目在此模型的基础上,删掉了几个书架,增加了一个房间和一扇门。

  开关门动画门的架构如下:

  Door(空物体)

  |----DoorPivot(空物体,位于父物体一半门宽度的地方,当作把手,包含Animator)

  |----RealDoor(Cube类型物体,包含Transform,MeshRender和BoxCollider)

  |----DoorTrigger1(Cube类型物体,包含Transform,BoxCollider和Script)

  |----DoorTrigger2(Cube类型物体,包含Transform,BoxCollider和Script)

  其中两个Trigger一内一外,挂载触发开关门动画脚本。RealDoor是门的物理真身,DoorPivot是门的转轴,转轴上挂载Animator实现开关门动画。

  打开Window-Animation-Animation, 点击DoorPivot,Add Property为门的Rotation。在0:00个0:30添加两个关键帧。开门时0:00关键帧Rotation为0,0:30关键帧Rotation为85;关门时0:00关键帧Rotation为85,0:30关键帧Rotation为0。

  Animator状态机如上图编写,当人站到DoorTrigger上的时候触发动画。

  关键代码如下:

  //DoorManager.cs

  public class DoorManager:MonoBehaviour

  {

  private Animator _animator;

  public bool IsDoorOpen()

  {

  return _animator.GetBool("Opened");

  }

  public void OpenDoor()

  {

  if(!IsDoorOpen())

  {

  _animator.SetBool("Opened",true);

  }

  }

  public void CloseDoor()

  {

  if(IsDoorOpen())

  {

  _animator.SetBool("Opened",false);

  }

  }

  void Awake()

  {

  _animator=GetComponent<Animator>();

  }

  }

  .开关门触发

  为Animator添加一个bool变量isOpen,当物体踏入trigger的时候,把isOpen设置为true,否则设置为false。当isOpen变化的时候,Animator状态转移,门的开关状态改变。

  关键代码如下:

  //DoorTrigger.cs

  public class DoorTrigger:MonoBehaviour

  {

  public DoorManager doorManager;

  private void OnTriggerEnter(Collider other)

  {

  doorManager.OpenDoor();

  }

  private void OnTriggerStay(Collider other)

  {

  doorManager.OpenDoor();

  }

  private void OnTriggerExit(Collider other)

  {

  doorManager.CloseDoor();

  }

  }