Unity Unity人物框视差效果

74
回复
1876
查看
打印 上一主题 下一主题
[ 复制链接 ]
排名
1089
昨日变化

33

主题

331

帖子

2467

积分

Rank: 9Rank: 9Rank: 9

UID
82788
好友
33
蛮牛币
7672
威望
0
注册时间
2015-3-21
在线时间
865 小时
最后登录
2019-10-22

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
有没有见过头像,像是一直看着鼠标的位置会动起来,这大概类似视差吧,类似下图:

下面在Unity里面,是如何创建一个简单的视差效果 , 在这种情况下 , 游戏中的 UI 是怎样的
大概步骤是这样:

  • 如果检查到鼠标内 , 然后 , 基于其旋转中心的距离。
  • 为了生成 “视差效应” 而将板旋转、平移使人物图像 (或者对象的作用向前 / 向后) 。在我示例中的 Z 值设定为 0。
  • 如果鼠标超出 RECT 和平稳地旋转,复位目标。
我使用函数anglelerp因为 , 如果你想使用vector3.lerp等等 , 转换工作不正常或者扰乱。(不知为啥,或者你们看看还有啥办法


ParallaxPanel.cs
[C#] 纯文本查看 复制代码
using UnityEngine;

[RequireComponent(typeof(RectTransform))]
public class ParallaxPanel : MonoBehaviour
{

    public float y_maxRot,y_pos;//不需要它沿此轴旋转,设置为0

   
    public float x_maxRot, x_pos;//不需要它沿此轴旋转,设置为0

    //旋转速度
    public float speed;

    RectTransform rect;
    //旋转对象
    public RectTransform rectToRotate;
    Vector2 targetEulerAngles = Vector3.zero;
    Vector2 targetPos = Vector3.zero;
    private void Awake()
    {
        rect = GetComponent<RectTransform>();
    }
    
    private void Update()
    {
        //鼠标位置和面板位置之间的差异
        Vector2 diff = (Vector2)transform.position - (Vector2)Input.mousePosition;

        //鼠标是否旋转对象内
        if (Mathf.Abs(diff.x) <= (rect.sizeDelta.x *0.5f) &&Mathf.Abs(diff.y) <= (rect.sizeDelta.y *0.5f))
        {
            float offset_X = -Mathf.Clamp(diff.y / (rect.sizeDelta.y * 0.5f), -1, 1);//随着鼠标与对象Y轴的距离,在[-1,1]之间输出
            float offset_Y = Mathf.Clamp(diff.x / (rect.sizeDelta.x * 0.5f), -1, 1);//随着鼠标与对象X轴的距离,在[-1,1]之间输出
            targetEulerAngles = new Vector3(x_maxRot * offset_X,y_maxRot * offset_Y,0);
            targetPos = new Vector3(x_pos * offset_X, y_pos * offset_Y, 0);
        }
        else 
        {
            //鼠标位于旋转对象之外,目标旋转为零
               targetEulerAngles = Vector3.zero;
            targetPos = Vector3.zero;
        }

        //旋转差值(没想出旋转差值代替方法)
        rectToRotate.eulerAngles = AngleLerp(rectToRotate.eulerAngles, targetEulerAngles, speed * Time.deltaTime);
        rectToRotate.anchoredPosition=Vector2.Lerp(rectToRotate.anchoredPosition, targetPos, speed * Time.deltaTime);
    }

    //两个角度差值(每个轴使用Mathf.LerpAngle)
    public static Vector3 AngleLerp(Vector3 StartAngle, Vector3 FinishAngle, float t)
    {
        return new Vector3(
            Mathf.LerpAngle(StartAngle.x, FinishAngle.x, t),
            Mathf.LerpAngle(StartAngle.y, FinishAngle.y, t),
            Mathf.LerpAngle(StartAngle.z, FinishAngle.z, t)
            );
    }

}

我的效果如下:

我把小demo也放出来了,感兴趣就看看:
游客,如果您要查看本帖隐藏内容请回复


好啦,明天休息才是王道


5熟悉之中
854/1000
排名
3475
昨日变化

0

主题

161

帖子

854

积分

Rank: 5Rank: 5

UID
287099
好友
0
蛮牛币
2715
威望
0
注册时间
2018-6-24
在线时间
263 小时
最后登录
2019-11-21
沙发
2019-8-23 21:07:29 只看该作者
多谢分享
5熟悉之中
854/1000
排名
3475
昨日变化

0

主题

161

帖子

854

积分

Rank: 5Rank: 5

UID
287099
好友
0
蛮牛币
2715
威望
0
注册时间
2018-6-24
在线时间
263 小时
最后登录
2019-11-21
板凳
2019-8-23 21:08:55 只看该作者
多谢分享
5熟悉之中
601/1000
排名
5144
昨日变化

4

主题

99

帖子

601

积分

Rank: 5Rank: 5

UID
130665
好友
5
蛮牛币
78
威望
0
注册时间
2015-12-3
在线时间
218 小时
最后登录
2019-10-24
地板
2019-8-23 22:34:06 只看该作者
666666666666
5熟悉之中
588/1000
排名
7021
昨日变化

3

主题

144

帖子

588

积分

Rank: 5Rank: 5

UID
293049
好友
2
蛮牛币
2511
威望
0
注册时间
2018-8-9
在线时间
253 小时
最后登录
2019-11-18
5#
2019-8-24 08:21:40 只看该作者
哇哦,效果不错
7日久生情
2937/5000
排名
271
昨日变化

0

主题

105

帖子

2937

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
65835
好友
0
蛮牛币
15652
威望
0
注册时间
2015-1-5
在线时间
871 小时
最后登录
2019-11-22
QQ
6#
2019-8-24 08:27:50 只看该作者
实用小技巧
4四处流浪
475/500
排名
10596
昨日变化

2

主题

237

帖子

475

积分

Rank: 4

UID
328743
好友
0
蛮牛币
292
威望
0
注册时间
2019-8-5
在线时间
136 小时
最后登录
2019-11-21
7#
2019-8-24 09:07:11 只看该作者
66666666666666666666
5熟悉之中
740/1000
排名
3972
昨日变化

3

主题

95

帖子

740

积分

Rank: 5Rank: 5

UID
259967
好友
3
蛮牛币
596
威望
0
注册时间
2017-12-16
在线时间
256 小时
最后登录
2019-11-21
8#
2019-8-24 09:38:18 只看该作者
大佬!6666666666666666666,学到了!!!

0

主题

16

帖子

60

积分

Rank: 2Rank: 2

UID
329538
好友
0
蛮牛币
455
威望
0
注册时间
2019-8-16
在线时间
44 小时
最后登录
2019-11-21
9#
2019-8-24 10:08:15 只看该作者
多谢分享

0

主题

9

帖子

67

积分

Rank: 2Rank: 2

UID
175638
好友
0
蛮牛币
122
威望
0
注册时间
2016-10-14
在线时间
58 小时
最后登录
2019-11-21
10#
2019-8-24 10:38:59 只看该作者
有点6666666啊

0

主题

9

帖子

67

积分

Rank: 2Rank: 2

UID
175638
好友
0
蛮牛币
122
威望
0
注册时间
2016-10-14
在线时间
58 小时
最后登录
2019-11-21
11#
2019-8-24 10:42:54 只看该作者
youdlh woleigequ  zhendexiudeaobuxing
8常驻蛮牛
7721/10000
排名
23
昨日变化

1

主题

663

帖子

7721

积分

Rank: 8Rank: 8

UID
30356
好友
0
蛮牛币
8149
威望
0
注册时间
2014-6-19
在线时间
3867 小时
最后登录
2019-11-22
12#
2019-8-24 11:15:41 只看该作者
多谢分享多谢分享
7日久生情
2459/5000
排名
4094
昨日变化

0

主题

1686

帖子

2459

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
254705
好友
1
蛮牛币
2219
威望
0
注册时间
2017-11-16
在线时间
411 小时
最后登录
2019-11-21
13#
2019-8-24 11:16:54 只看该作者
6666666666666666666666666
3偶尔光临
207/300
排名
64938
昨日变化

0

主题

77

帖子

207

积分

Rank: 3Rank: 3Rank: 3

UID
313179
好友
0
蛮牛币
748
威望
0
注册时间
2019-1-30
在线时间
128 小时
最后登录
2019-11-21
14#
2019-8-24 11:34:32 只看该作者
6666666666666666666
5熟悉之中
713/1000
排名
5900
昨日变化

0

主题

338

帖子

713

积分

Rank: 5Rank: 5

UID
11484
好友
0
蛮牛币
16
威望
0
注册时间
2013-12-31
在线时间
139 小时
最后登录
2019-11-21
15#
2019-8-24 12:08:59 只看该作者
多谢分享
您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则