基于PF规则的CRPG制作尝试(二)添加属性并实现物体的显示与隐藏

基于PF规则的CRPG制作尝试(二)添加属性并实现物体的显示与隐藏

一、为object添加属性

用如下方法计算属性调整值的时候
在这里插入图片描述
出现了以下报错:
在这里插入图片描述
不是很清楚具体原因,但把属性值静态字段的话又担心会出现别的问题(还是基础太薄弱了),于是只好把调整值的计算在后面新开了一个public AbilityModifiers。
结果就是无法在静止状态下看到具体数值,只有调制的时候才会显示。

二、实现物体的显示与隐藏

做属性算是把今天的任务完成了,于是剩下的时间就用来完善昨天自己不太满意的部分。
昨天将拔剑战斗之类的动画导入进了模型,但是模型想要持剑就需要把剑固定在角色的右手上,这会让很多姿势变得非常奇怪,比如一个手上粘着剑的人伸手到背后去拔剑,想来想去也没有太好的办法,所以决定先不显示剑,在伸手拔剑的时候再显示出剑这样子。
其实还是如果能有个虚空成剑的动画比较好,但是一时也不知道该怎么做,网上冲浪看了一下,这种淡入淡出的变化是对模型的shader有要求的,可是我是用MMD4Mecanim导入的MMD的PMX格式的模型,在这中间本就有一个MMD4Mecanim将PMX转化为FBX的过程,这导致了我的模型的shader是这样的:
在这里插入图片描述
我实在也没学过shader,也不敢乱改,只能退而求其次寻找能让模型消失出现的办法。
上网寻找了一段时间后,发现目前有几种方法能够实现我想要的效果

1.设置Renderer状态

在游戏的开发中,全部可以被渲染的物体都包括有一个Renderer组件。使用它可以将物体渲染到屏幕上,那么假设禁用了这一组件的话,自然也就实现了物体的隐藏。

2.设置Active

gameObject.SetActive(true);//显示物体
gameObject.SetActive(false);//隐藏物体
尝试之后发现只能隐藏模型,隐藏之后就无法再次出现了,网上也众说纷纭,自己debug试了试觉得可能是因为false了之后物体就认为已经消失了,这导致不会再执行true的操作。
所以最后只能尝试第三种

3设置Layer

主要思路是先将剑新建一个layer(sword)放入,然后将camera的Culling Mask取消sword层的勾选,通过代码实现在某个时刻将剑的layer从sword层转换到别的能在camera显示的层(Delta)。
具体的代码如下:

    public WeaponData wdata;
    // Start is called before the first frame update
    void ChangeLayer(Transform trans, string targetLayer)
    {
        if (LayerMask.NameToLayer(targetLayer) == -1)
        {
            Debug.Log("Layer中不存在,请手动添加LayerName");
            return;
        }
        //遍历更改所有子物体layer
        trans.gameObject.layer = LayerMask.NameToLayer(targetLayer);
        foreach (Transform child in trans)
        {
            ChangeLayer(child, targetLayer);
            Debug.Log(child.name + "子对象Layer更改成功!");
        }
    }
    void Showsword()
    {
        ChangeLayer(gameObject.transform, "Delta");
    }

我选择在德尔塔手放在身后摸剑的时候将剑显示出来,为此在摸剑的动作中加入了事件Showsword。

在这里插入图片描述
完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值