【LETTER开发记录】第一~二周——基本移动、场景,对话实现

随便记一下吧

1.用fungus搞出了头顶气泡对话

其实还是用的unity自带的canvas特性,调成了world space模式这种模式下canvas就和普通的 3D 物体一样了,可以控制位置大小等

目前是先普通地新建一个对话框(使用九宫格切割对话框,设置边界),移动成要绑定对象的子物体,把canvas改成world space模式,再调整panel的scale缩放(0.005不错)、图层,移动到相应位置

在panel上添加Vertical layoutGroup 和content size fitter,如图设置,使气泡大小自适应文本长度

一定要记得把子物体中这两关掉!不然没用!

tips:调整panel的anchors(锚点)可以控制对话框向左还是向右还是由中心延伸

效果如上,但npc对话怎么办呢,难道每个物体都绑一个,太麻烦了吧……感觉可以学一下头顶血条的方法? 

角色转向对话框也会转的解决方法

和触发对话放一起了,获得角色位置,update更新(没有更优雅的办法吗?也许可以直接改sayDialog的代码……)

public class DialogTrigger : MonoBehaviour, IInteractable
{
    public Flowchart flowchart;//对话
    public GameObject box;//对话框
    public Transform playerTrans;//角色位置
    [Header("Block名称")]
    public String blockName;
    private void Update() {
        box.transform.localScale = playerTrans.localScale;//让气泡的方向一直是正的
    }
    public void TriggerAction()
    {
        // flowchart = GameObject.Find("Flowchart").GetComponent<Flowchart>();//自动找Flowchart
        Debug.Log("触发对话");
        if (flowchart.HasBlock(blockName)){
            // box.transform.position = playerTrans.position;//如果把气泡移到外面,就在触发对话时把气泡的位置移到角色头顶,但这样对话时移动气泡就不会动了
            flowchart.ExecuteBlock(blockName);
        }
    }
}

对话时停止玩家操作的办法

在playerControl中,使用fungus自带的对话开始/结束时的接口,在开始/结束时控制输入系统

    private void OnEnable() {       
        BlockSignals.OnBlockStart += OnBlockBegin;//fungus中对话开始时执行的方法
        BlockSignals.OnBlockEnd += OnBlockEnd;
    }


    private void OnDisable() {
        BlockSignals.OnBlockStart -= OnBlockBegin;
        BlockSignals.OnBlockEnd -= OnBlockEnd;
    }

    //对话时停止玩家操作
    private void OnBlockBegin(Block block)
    {
        isTalk = true;
        Debug.Log("开始对话");
        inputControl.GamePlay.Disable();//对话时停止输入系统中的玩家操作
    }
    //对话结束时恢复玩家操作
    private void OnBlockEnd(Block block)
    {
        isTalk = false;
        Debug.Log("结束对话");
        inputControl.GamePlay.Enable();//对话结束时启动输入系统中的玩家操作
    }

还有menu的方法,也许以后会用到

MenuSignals.OnMenuStart += OnMenuStart;
MenuSignals.OnMenuEnd += OnMenuEnd;

//例
public void OnMenuStart(MenuDialog menu)
{
    // 默认选中第一个选项
    menu.CachedButtons[0].Select();
}

 

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值