找回密碼
 注冊帳號

掃一掃,訪問微社區

Unity Unity人物框視差效果

75
回復
2164
查看
打印 上一主題 下一主題
[ 復制鏈接 ]
排名
1089
昨日變化

33

主題

331

帖子

2490

積分

Rank: 9Rank: 9Rank: 9

UID
82788
好友
33
蠻牛幣
7677
威望
0
注冊時間
2015-3-21
在線時間
868 小時
最后登錄
2019-11-30

馬上注冊,結交更多好友,享用更多功能,讓你輕松玩轉社區。

您需要 登錄 才可以下載或查看,沒有帳號?注冊帳號

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熟悉之中
866/1000
排名
3475
昨日變化

0

主題

161

帖子

866

積分

Rank: 5Rank: 5

UID
287099
好友
0
蠻牛幣
2785
威望
0
注冊時間
2018-6-24
在線時間
275 小時
最后登錄
2019-12-10
沙發
2019-8-23 21:07:29 只看該作者
多謝分享
回復

使用道具 舉報

5熟悉之中
866/1000
排名
3475
昨日變化

0

主題

161

帖子

866

積分

Rank: 5Rank: 5

UID
287099
好友
0
蠻牛幣
2785
威望
0
注冊時間
2018-6-24
在線時間
275 小時
最后登錄
2019-12-10
板凳
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熟悉之中
609/1000
排名
7021
昨日變化

3

主題

154

帖子

609

積分

Rank: 5Rank: 5

UID
293049
好友
2
蠻牛幣
2559
威望
0
注冊時間
2018-8-9
在線時間
264 小時
最后登錄
2019-12-10
5#
2019-8-24 08:21:40 只看該作者
哇哦,效果不錯
回復

使用道具 舉報

7日久生情
2946/5000
排名
271
昨日變化

0

主題

105

帖子

2946

積分

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

UID
65835
好友
0
蠻牛幣
15786
威望
0
注冊時間
2015-1-5
在線時間
879 小時
最后登錄
2019-12-10
QQ
6#
2019-8-24 08:27:50 只看該作者
實用小技巧
回復

使用道具 舉報

4四處流浪
481/500
排名
10596
昨日變化

2

主題

237

帖子

481

積分

Rank: 4

UID
328743
好友
0
蠻牛幣
342
威望
0
注冊時間
2019-8-5
在線時間
142 小時
最后登錄
2019-12-2
7#
2019-8-24 09:07:11 只看該作者
66666666666666666666
回復 支持 反對

使用道具 舉報

5熟悉之中
745/1000
排名
3972
昨日變化

3

主題

97

帖子

745

積分

Rank: 5Rank: 5

UID
259967
好友
3
蠻牛幣
600
威望
0
注冊時間
2017-12-16
在線時間
259 小時
最后登錄
2019-12-2
8#
2019-8-24 09:38:18 只看該作者
大佬!6666666666666666666,學到了!!!
回復 支持 反對

使用道具 舉報

0

主題

17

帖子

67

積分

Rank: 2Rank: 2

UID
329538
好友
0
蠻牛幣
534
威望
0
注冊時間
2019-8-16
在線時間
50 小時
最后登錄
2019-12-10
9#
2019-8-24 10:08:15 只看該作者
多謝分享
回復

使用道具 舉報

0

主題

9

帖子

73

積分

Rank: 2Rank: 2

UID
175638
好友
0
蠻牛幣
169
威望
0
注冊時間
2016-10-14
在線時間
64 小時
最后登錄
2019-12-10
10#
2019-8-24 10:38:59 只看該作者
有點6666666啊
回復

使用道具 舉報

0

主題

9

帖子

73

積分

Rank: 2Rank: 2

UID
175638
好友
0
蠻牛幣
169
威望
0
注冊時間
2016-10-14
在線時間
64 小時
最后登錄
2019-12-10
11#
2019-8-24 10:42:54 只看該作者
youdlh woleigequ  zhendexiudeaobuxing
回復 支持 反對

使用道具 舉報

8常駐蠻牛
7777/10000
排名
23
昨日變化

1

主題

664

帖子

7777

積分

Rank: 8Rank: 8

UID
30356
好友
0
蠻牛幣
8096
威望
0
注冊時間
2014-6-19
在線時間
3918 小時
最后登錄
2019-12-10
12#
2019-8-24 11:15:41 只看該作者
多謝分享多謝分享
回復 支持 反對

使用道具 舉報

7日久生情
2534/5000
排名
4094
昨日變化

0

主題

1753

帖子

2534

積分

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

UID
254705
好友
1
蠻牛幣
2274
威望
0
注冊時間
2017-11-16
在線時間
419 小時
最后登錄
2019-12-10
13#
2019-8-24 11:16:54 只看該作者
6666666666666666666666666
回復 支持 反對

使用道具 舉報

3偶爾光臨
219/300
排名
64938
昨日變化

0

主題

78

帖子

219

積分

Rank: 3Rank: 3Rank: 3

UID
313179
好友
0
蠻牛幣
831
威望
0
注冊時間
2019-1-30
在線時間
139 小時
最后登錄
2019-12-10
14#
2019-8-24 11:34:32 只看該作者
6666666666666666666
回復 支持 反對

使用道具 舉報

5熟悉之中
735/1000
排名
5900
昨日變化

0

主題

350

帖子

735

積分

Rank: 5Rank: 5

UID
11484
好友
0
蠻牛幣
4
威望
0
注冊時間
2013-12-31
在線時間
149 小時
最后登錄
2019-12-10
15#
2019-8-24 12:08:59 只看該作者
多謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊帳號

本版積分規則

法甲球队主场名称