頭像在頭像框內運動

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class ParallaxPanel : MonoBehaviour {

    public float y_maxRot, y_pos;
    public float x_maxRot, x_pos;
    public float speed;
    RectTransform rect;
    public RectTransform recToRotate;
    Vector2 targetEulerAngles = Vector3.zero;
    Vector2 targetPos = Vector2.zero;
    // Use this for initialization
    void Start () {
        rect = GetComponent<RectTransform>();
    }
    
    // Update is called once per frame
    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.x/(rect.sizeDelta.x*0.5f),-1,1);
            float offset_y = -Mathf.Clamp(diff.y / (rect.sizeDelta.y * 0.5f), -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;
        }
        recToRotate.eulerAngles = AngleLerp(recToRotate.eulerAngles, targetEulerAngles, speed * Time.deltaTime);
        recToRotate.anchoredPosition = Vector2.Lerp(recToRotate.anchoredPosition,targetPos,speed*Time.deltaTime);

    }

    public static Vector3 AngleLerp(Vector3 startAngle,Vector3 finshAngle,float t)
    {
        return new Vector3(
            Mathf.LerpAngle(startAngle.x,finshAngle.x,t),
            Mathf.LerpAngle(startAngle.y, finshAngle.y, t),
            Mathf.LerpAngle(startAngle.z, finshAngle.z, t)
            );
    }
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章