3D RPG Course | Core | Unity学习笔记(三)

(一)Animator动画控制

        将角色对象创建为Prefab,创建时选择原始预制体来和原本到导入包的预制体相区分。

        unity中可以使用Animator Controller来控制动画的播放,在角色的游戏对象中添加Animator组件。在Projects中创建一个Animator Controller文件,并将其放入角色对象的Animator组件的Controller项。

        Animator Controller以状态机的形式来控制动画,希望在游戏中实现动画混合(如移动动画)时常使用blend tree。通过修改parameters来让动画根据参数进行调整,在inspector中可以添加动画列表。

        在上次课的PlayerController.cs的基础上来注入参数speed到动画控制器,在脚本中创建一个新的函数来实时设置Speed值,然后将函数添加到Update方法中运行即可。

        

public class PlayerController : MonoBehaviour
{
    private NavMeshAgent agent;
    private Animator anim;//Animator controller


    private void Awake()
    {
        agent = GetComponent<NavMeshAgent>();//获得NavMeshAgent方法
        anim = GetComponent<Animator>();
    }

    private void Update()
    {
        SwitchAnimation();
    }
   private void Start()
   {
       MouseManager.Instance.OnMouseClicked+=MoveToTarget;//将方法注册到事件中,每当事件启用就会执行该方法

   }

   private void SwitchAnimation()//获得人物Speed并写入animator controller
   {
       anim.SetFloat("Speed", agent.velocity.sqrMagnitude);//sqrMagnitude可将Vector3转换为浮点数值
   }

   public void MoveToTarget(Vector3 target)//参数要与注册事件的参数一致
   {
       agent.destination = target;
   }

}

(二)Shader Graph 遮挡剔除

        当人物移动到树后时会出现两个问题:人物被遮挡以及鼠标无法点击到树下的地面,可通过Shader Graph进行遮挡剔除。

        Shader是计算机图形渲染管线的一部分,它是一小段应用程序,告诉计算机在场景中怎样对物体渲染和着色。ShaderGraph则是可视化编辑shader的工具。

        在Materials文件夹下新建一个Shader Graph文件夹,创建URP的unlit shader graph(无光照)并在此文件上创建一个新的Material。接下来编辑这个新的shadergraph。(界面的控制很像连接电线)

        在ShaderGraph中添加一个Fresnel节点,Fresnel效果会在物体边缘显示一个光圈,可以利用这点做出物体轮廓效果。添加一个变量Color并设置颜色,然后令Color与Fresnel Effect发生乘法现象,从而把颜色加入其中。将Multiply的输出连接到Fragment的base color中即可看到主预览效果。

        额外设置的变量可以在外部继续更改,接下来可以添加一些其他效果。Dither可产生噪声处理,看上去像网格的效果。

        下面将做出设置,让人物移动到遮挡物后就应用刚设置好的材质。在URP的设置文件-UniversalRenderPipelineAsset_Renderer中

添加两个Feature在其中进行材质设置:其中Player需要单独设置一个图层,从而让系统能够单独对Player设置,两个Feature分别为Player在遮挡物前和后的情况(分两种情况来确保只有被遮挡时才更改材质)

(三)解决移动无法点击到障碍物后方的问题

        可以调整所有遮挡物的layer为忽略Raycast,这样就不会与射线发生碰撞。

        也可以将所有遮挡物的Mesh collider关闭,因为在MouseManager脚本中是判断射线碰撞来实现移动的。

        此外,我的项目中通过Polybrush创造的树木,都由三个对象构成:

        

后两者是前一个的子对象,而collider只存在于LOD0子对象中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值