项目实训--Unity多人游戏开发(十四、UI昵称显示及转向同步问题)

开发功能

  1. 在玩家上方生成UI文本,用于显示昵称、生命值或其他需要的数据。
  2. 2D中玩家左右转向时不能影响UI的显示。
  3. pun网络化时要同步玩家左右转向。

步骤及注意事项

针对1:
打开Player预制体,添加子物体:Canvas和Text。
在这里插入图片描述

(3D要正向显示文本。需要写一个脚本,让UI在3D世界中一直朝向摄像机。)
以下两点是3D游戏的UI需要额外做的事情:

  1. 把画布的渲染模式设置为WorldSpace,这样才能是3D空间中一个“自由的物体”
  2. 在画布上挂一个脚本,代码见下:

在这里插入图片描述

    void Update()
    {
    	//画布将会一直朝向摄像机(屏幕)
        transform.rotation = Camera.main.transform.rotation;
    }

针对2:
2D游戏中角色会出现左右朝向的情况。
一般用scale缩放实现,比如localScale.x = -1时,人物在x方向上会反向。
但是Canvas和Text等UI,是预制体的子物体,也会实现左右转。游戏中的UI文字出现左右镜像翻转无法阅读。
一种解决办法是:
通过2D角色预制体的Sprite Renderer组件的Flip属性,只对“Sprite角色图片素材”进行翻转。这样就不会影响到整个预制体的翻转了。
在这里插入图片描述

//此处角色素材默认是右朝向的,因此代码如下
	spriteRenderer = GetComponent<SpriteRenderer>();

    if (xVelocity < 0)//按A键,xVelocity是负值
    {
        spriteRenderer.flipX = true;//仅图像翻转,朝左
    }
    else if(xVelocity > 0)//朝右
    {
        spriteRenderer.flipX = false;
    }

针对3:
上一点的flip是无法通过pun简单同步的。虽然可以用额外的通信进行同步修改flip值,但是为什么不直接使用transform同步scale呢。
在这里,我们要做一个网络化的2D游戏,采用scale缩放实现左右朝向的方法。
所以需要解决UI翻转问题:
很简单,UI也随之翻转即可。负负得正。
代码:

if (xVelocity != 0)
{
     //用transform组件进行缩放,x方向缩放-1的话就是左右反向,所以玩家具体朝向哪还是取决于xVelocity
     transform.localScale = new Vector3(xVelocity, 1, 1);
     nameText.transform.localScale = new Vector3(xVelocity, 1, 1);
}

!!!
但是pun不会同步子物体的localScale。所以在update里更新代码:

if(!photonView.IsMine)
{
    nameText.transform.localScale = transform.localScale;//新加
    return;
}

项目其他记录

关于本项目的pve游戏,虽然是3D,但是游戏机制玩法上决定了摄像头一直是俯视视角(玩家一直朝向鼠标所指方向,UI会跟随转动),所以根本上不需要一直执行nameUICanvas.transform.rotation = Camera.main.transform.rotation;
如果要一直刷新实时朝向屏幕。UI会出现抖动/鬼畜(鼠标位置会影响rotation)。
暂时还没找出比较好的解决办法…。
可能是因为update与FixedUpdate之间的关系,之后在另一个3d游戏中并没有出现鬼畜。在update中更改朝向。fixedupdate中人物移动。应该可以解决这个UI抖动问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值