Head turning

要想实现转头效果,首先打开Settings manager,在Hotspot settings里面,勾选Player turns head to active Hotspot

然后选择Player(EL_TinPot),如果勾选Use IK for head-turning。并且Player素材的Rig——Animation Type是Humanoid,且在Base Layer勾选了IK Pass(暂时未知),那么就直接可以转头了

因为robot素材是Generic的animation type,所以不要勾选Use IK for head-turning

  1. 选中Player,然后在animator窗口中,新建两个float参数,分别命名为HeadYaw(水平转头)、HeadPitch(垂直转头)。然后新建一个Layer,命名为HeadTurning,点击这个图层的设置,设置优先级为1,混合模式为Additive

  2. 在HeadTurning图层中,新建Create State——From new blend tree,命名为HeadDirection

    image-20211027181126416

  3. 双击进入HeadDirection,选中Blend Tree,添加4个Motion Field,将素材文件里面的Look类的动画拖拽进来,如下图设置

    image-20211027182507357

  4. 选中EL_TinPot,在Mecanim parameters里面,将参数输入进去,按照脚本默认,也是上个步骤中Pos X和Pos Y参数正负设置的原因

    image-20211027182810454

    开始游戏,鼠标悬停在HotSpot上,人物会转头

Importing Templates

下载官方提供的一个UI模板来更换当前默认的交互UI,在菜单栏点击Adventure Creator——Online Resources——Downloads,在官网中下载UI template:Walking Dead-style,然后在Assets菜单里面import custom package即可

下载后的资源在Assets——AdventureCreator——Downloads文件夹里,双击打开文件夹然后双击WalkingDead_ManagerPackage,或者单击WalkingDead_ManagerPackage然后在inspector窗口中点击assign managers

和AC默认的UI系统相比,下载的资源使用的是Unity UI Prefab作为Source,这种源随时可以直接转换成Adventure Creator作为源

image-20211101100615979

接下来进入Settings Manager,修改一下被覆盖的重要参数,首先把Save filename改为My3DGame、Player prefab改为My 3D Game文件夹下的EL_TinPot、然后再次勾选上Player turns head to active Hotspot

选择SetGeometry下的Lift和LaserGun,给他们添加Highlight Component,然后分别选择他们对应的Hotspot,添加Highlight

image-20211101130653927

再次进入Menu Manager,然后将Asset file换回My3DGame Manager,将其中的Pause、Save、Load、Options菜单分别复制,然后回到WalkingDead_MenuManager点击Paste menu按钮粘贴回来,注意需要一个一个分别复制。然后将复制过来的source都改为unity UI Prefab

image-20211101131405282

Creating an NPC

将TutorialFiles——EvilLair——EL_Brain放在场景里,关掉Animator组件里的Apply Root Motion

点击菜单栏的Adventure Creator——Editors——character wizard,在弹出的窗口中直接点击Next——NPC、名字叫Brain、将EL_Brain拉取进去——然后一路点击Next、finish,

将人物创建后默认生成的Hotspot、Capsule Collider和Rigidbody都删除,点击Scene Manager,选中EL_Brain中的Brain模型(需要它的坐标),然后点击Hotspot,创建新的

image-20211101145002586

旋转缩放一下生成的Hotspot,覆盖到Brain模型的表面就可以,

选中EL_Brain,放在NPCs父对象下,将其中的Mecanim parameters参数都删除,选中其中的Brain模型,添加Highlight。

然后再选中Hotspot_Brain,输入Label——Brain,添加Brian highlight,添加Walk-to Marker,将这个Marker的Y坐标设为零,放在平台旁边有Navigation范围的地方,我们可以打开Navigation窗口确认范围

image-20211101155558012

点击My 3D Game文件夹,再新建一个Animator Controller,命名为BrainController,将Brain文件夹EL_Brain里的3个动画文件放进去,将Idle设为默认,

新建Bool参数IsLookingAtPlayer和Trigger参数DodgeLaser,在Base Layer 中,将Idle和LookPlayer互相设置Transition,并使用IsLookingAtPlayer参数,而且将两个过度动画的HasExitTime都关掉。将Any State向DodgeLaser设置过度,将过度的Has Exit Time和Can Transition To Self关掉,Condition设置为DodgeLaser。然后DodgeLaser向Idle过度,无需修改参数

image-20211101174720858

选择EL_Brain,将BrainController放进Animator里面

An opening Cutscene

首先,在Scene Manager里面新建一个SimpleCamrea,命名为RevealCam,设置一下它的位置,俯瞰Brain和LaserGun

image-20211102135433839

然后在Scene Manager里面新建一个Cutscene,命名为Intro Animation,编辑它的actionlist

接下来会是一大串的节点操作,这里不截图了,使用数字列表表示

  1. Camera:Switch——New camera-Camera_Lift——Transition time-0
  2. Object:Teleport——Is Player-true——Teleport to-Marker_Inside Lift——Copy rotation-true
  3. Camera:Fade——Wait until finish-true
  4. Object:Animate——Animation engine-Mecanim——Animator-Lift——Parameter to affect-State——Parameter type-Int——Set as value-1
  5. Object:Send message——Object to affect-Lift Collider——Message to send-Turn off
  6. Engine:Wait——Wait time-0.5
  7. Character:Move to point——Is Player-true——Marker to reach-PlayerStart——Wait until finish-true
  8. Engine:Wait——Wait time-0.5
  9. Object:Animate——Animation engine-Mecanim——Animator-Lift——Parameter to affect-State——Parameter type-Int——Set as value-2。这里点选节点3的右侧小齿轮——Copy——点选节点6右侧的小齿轮——Paste after
  10. Object:Send message——Object to affect-Lift Collider——Message to send-Turn on
  11. Character :Face object——Affect Player-true——Face with-head——Object to face-EL_Brain。选中EL_Brain下的rBrain,从里面的子对象里面找到Neck,然后再选中EL_Brain,将Neck拉取到Bone transforms——Neck bone里面,这样做是因为之前创建NPC的时候,EL_Brain的transform是在整个场景中央的,Player的face就不能面对Brain了,使用这个neck骨骼的位置,就可以正常转头了
  12. Dialogue:Play speech——Player line-true——Line text-我才离开了5分钟
  13. Camera:Switch——RevealCam——Transition time-0
  14. Engine:Wait——Wait time-0.5
  15. Dialogue:Play speech——Speaker-EL_Brain——Line text-喂,快来帮一下啊
  16. Character:Face object——Affect Player-true——Face with-head——Stop looking-true
  17. Camera:Switch——Return to last gameplay——Transition time-2——Move method-Custom curve

Cutscene完成之后,可以先运行游戏,然后在ActionList Editor窗口的右上角有一个Run的按钮,点击后就可以触发Cutscene

在AC Game Editor中,点击进入Variables manager,创建一个Local的变量,把它的Label改为Seen opening cutscene,其余默认

回到Intro Animation的Action list,添加

  1. Variable:Set——Source-Local——Statement-true

在AC Game Editor中,点击进入Scene manager,创建一个On start的Cutscene,编辑OnStart的actionlist

  1. Variable:Check——Source-Local——Boolean-True——If condition is not met-Run Cutscene-Intro Animation

这样开局cutscene就不会每次进入场景就播放了

Skipping Cutscenes

想要跳过开场场面,首先点击Intro Animation这个Cutscene,在inspector中的Is skippable确保被勾选

在菜单栏中点击Edit——Project Settings打开窗口点击Input manager,Size改为21,将新建的输入名称改为EndCutscene,Positive Button改为tab。这里的名称是根据settings manager里面的Available Inputs输入的

最后进入Intro Animation的Actionlist,这里复制一下Object:Animate(Lift - State)节点,粘贴在最后,将State改为0,这样按TAB键跳跃场景的时候就不会有动画播不完的情况了