1.Interactable System:
1.Picture Interactable:Player走到SecurityRoom墙前的那张画
2.Fish Interactable鱼档前的交互
3.Guard Interactable守卫
2.Player
这一Phase要实现在SecurityRoom里点击地板Player在上面随着鼠标点击走动的效果。
----------------
首先设置SecurityRoom的环境。
点击Hierarchy下的SecurityRoomEnvironment里的指定选项,勾选Static,因为NavMash必须在静态的环境上Bake然后生效。
Window→Navigation→Bake按如下选项
各选项意义见下:
Hierarchy下新建UI→EventSystem,并给EventSystem加上Audio Listener组件。注意,完整的游戏里EventSystem都是建在Presistent Scene里的,这里只是为了检测该单元而建立,之后会删掉。
接着在Hierarchy下的Camera添加组件Physics Raycaster,该组件将对Scene里的物体进行光线投射,并把消息发送到(send)到EventSystem
接着在SecurityRoom上添加添加Mesh Collider组件,Mesh选存好的方案。接着添加Event Trigger组件,点+添加新事件,内容暂时为空(截图用的是完整游戏)
这里介绍一下EventSystem,它分为三步骤:发送(Send events),接收(Receive events)和执行(Manage events)。关系如下:
上面Camera上挂Physics Raycaster组件是为了Send,刚才的SecurityRoom上挂Ecent Trigger组件是为了Receive。
----------------------
然后设置Player
在Project View下选择Animators文件夹→Player文件夹下新建Animator Controller命名为ClickToMove。Unity里Animator和Animation都是动画插件,Animator主要为了动画直接的切换,和什么情况下播什么动画;Animation主要控制一个动画的播放内容,比如先哪一帧后一帧。
双击ClickToMove点+新建float型参数命名为Speed,再建4个trigger分别命名为HighTake,MedTake,LowTake,AttemptTake。
在中间的操作区Base Layer上点击右键→Create State→From New Blend Tree创建一个新的混合树(Blend Tree)并命名为Walking。
双击Walking混合树,在Inspector里改名为WalkingBlendTree,点击+选择Add Motion Field。共添加3个三个Motion Fields,然后按名字添加3个对应的状态动画。不要勾选Automate Thresholds(自动化阈值),然后点击Compute Thresholds选择Speed,可以看到3个Motion后的阈值比不再是1:0.5:1而是0:1.5:5.6了。
点击Base Layer回到操作界面,在Animations文件夹→Player下多选Idle,TakeObjectAttempt和TakeObjects动画放入操作界面,并放置成这样
再在这些动画间Make Transition如下图
点击Walking→PlayerIdle的指向线,取消勾选Has Exit Time。点+添加条件,自动出来Speed,选择Less,填0.1,即速度小于0.1时播放Idle动画。再点击PlayerIdle→Walking指向性,同样取消存在时间,添加条件选Greater,填0.1
再对Any State对其他动画的切换条件上加上分别对应其名字的trigger。
注意四个动画到Walking的transition没有设置条件是因为这四个都有默认的Has Exit Time,即这些条件动画播放完了就回到走路状态。
点击PlayerIdle,tag改为Locomotion。再点击Walking,tag改为Locomotion,注意拼写大小写完全正确。这是为了之后在代码里区分动画状态,只有当Locomotion下才能Walking其他的会播放其他动画。
回到Scene视图,从Models文件夹把Player拽到Hierarchy下,选择Layer为Characters,弹出对话框选择覆盖子对象。Position设为(-0.7, 0, 3.5)Rotation设为(0,180,0)刚好在门口对着保镖。Animator组件的Controller选ClickToMove,添加组件Nav Mesh Agent更改如下选项。
Nav Mesh Agent对应属性
最后将Player保存到Prefabs文件夹。
-------------------
接下来是移动Player
Assets→Scripts→MonoBevaviours→Player新建C#命名为PlayerMovenments,并把该脚本拖拽到Player预制