MouseEffect挂载image上的脚本
方法是通过鼠标位置和图片原始位置获得方向,乘上距离。
using UnityEngine;
public class MouseEffect : MonoBehaviour
{
public float speed = 5.0f;
float dis;
Vector3 oriPos;
Vector3 newPos;
Vector3 mousePos;
// Update is called once per frame
private void Start()
{
oriPos = transform.position;
}
void Update()
{
mousePos = Input.mousePosition;
dis = Vector3.Distance(mousePos, oriPos);
if (dis < 250)
{
transform.localScale = 2 * Vector3.one - (Vector3.one * dis / 250) ;
Vector3 vectoerAB = (mousePos - oriPos).normalized;
newPos = vectoerAB * -(250 - dis);
transform.position = Vector3.Lerp(transform.position, newPos + oriPos,Time.deltaTime * speed) ;
}
else
{
transform.position = Vector3.Lerp(transform.position, oriPos, Time.deltaTime * speed);
transform.localScale = Vector3.one;
}
}
}
以下是生产大量Image的脚本
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[ExecuteAlways]
public class UIBuild20 : MonoBehaviour
{
private List<Vector3> vector3s = new List<Vector3>();
private void Start()
{
for (float j = -1000; j <= 1000; j += 120f)
{
for (float k = -500f; k <= 500f; k += 120f)
{
vector3s.Add(new Vector3(j, k, 0));
}
}
}
void Update()
{
for (int i = 0; i < transform.childCount; i++)
{
transform.GetChild(i).name = "Block" + (i + 1).ToString();
transform.GetChild(i).localPosition = vector3s[i];
transform.GetChild(i).GetComponent<Image>().color = new Color(Random.Range(0.0f,1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f));
}
}
}
移动中
using UnityEngine;
public class MouseEffect2: MonoBehaviour
{
public float speed = 6.0f;
public float moveSpeed = 30.0f;
float dis;
Vector3 oriPos;
Vector3 newPos;
Vector3 mousePos;
private void Start()
{
oriPos = transform.position;
}
void Update()
{
oriPos = new Vector2(oriPos.x - Time.deltaTime * moveSpeed, oriPos.y);
mousePos = Input.mousePosition;
dis = Vector3.Distance(mousePos, oriPos);
if (dis < 250)
{
transform.localScale = 2 * Vector3.one - (Vector3.one * dis / 250) ;
Vector3 vectoerAB = (mousePos - oriPos).normalized;
newPos = vectoerAB * -(250 - dis);
transform.position = Vector3.Lerp(transform.position, newPos + oriPos,Time.deltaTime * speed) ;
}
else
{
transform.position = Vector3.Lerp(transform.position, oriPos, Time.deltaTime * speed);
transform.localScale = Vector3.one;
}
if (oriPos.x < -360)
{
oriPos = new Vector2(2160, oriPos.y);
transform.position = oriPos;
}
}
}