You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
247 lines
7.6 KiB
247 lines
7.6 KiB
using UnityEngine; |
|
using AX.MessageSystem; |
|
using System; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
using UnityEngine.EventSystems; |
|
//Author:ZCG |
|
//CreatTime:12/2/2017 |
|
/// <summary> |
|
///改变物体Transform |
|
/// </summary> |
|
public class BaseTransformChange : MonoBehaviour |
|
{ |
|
[SerializeField] |
|
protected Transform obj;//需要控制的物体 |
|
[SerializeField] |
|
protected TransformType transformType;//类型:位置 旋转 缩放 |
|
[SerializeField] |
|
protected ValueChange valueChanage;//数值变化方式 乒乓 重复 |
|
//[SerializeField] |
|
//protected Axis axis = Axis.x;//轴 |
|
[SerializeField] |
|
protected float min = 0;//开始参数 |
|
[SerializeField] |
|
protected float max = 1;//结束参数 |
|
[SerializeField] |
|
[Tooltip("Repat/PingPong变化速度")] |
|
[Range(0.1f,10f)] |
|
protected float speed = 1;//速度 |
|
[SerializeField] |
|
[Tooltip("Random改变的频率")] |
|
[Range(0f,100f)] |
|
private float changeTime = 1;//随机数的改变频率 |
|
[SerializeField] |
|
protected bool x, y, z;//需要控制的轴 |
|
protected virtual void Awake() |
|
{ |
|
MessageDispatcher.AddListener("EQUALS_COMMAND", PressureUp); |
|
MessageDispatcher.AddListener("MINUS_COMMAND", PressureDown); |
|
MessageDispatcher.AddListener("U_COMMAND", U); |
|
MessageDispatcher.AddListener("J_COMMAND", J); |
|
MessageDispatcher.AddListener("A_COMMAND", A); |
|
MessageDispatcher.AddListener("D_COMMAND", D); |
|
MessageDispatcher.AddListener("ReplayEvent", ReplayEvent); |
|
} |
|
protected virtual void OnDestroy() |
|
{ |
|
MessageDispatcher.RemoveListener("EQUALS_COMMAND", PressureUp); |
|
MessageDispatcher.RemoveListener("MINUS_COMMAND", PressureDown); |
|
MessageDispatcher.RemoveListener("U_COMMAND", U); |
|
MessageDispatcher.RemoveListener("J_COMMAND", J); |
|
MessageDispatcher.RemoveListener("A_COMMAND", A); |
|
MessageDispatcher.RemoveListener("D_COMMAND", D); |
|
MessageDispatcher.RemoveListener("ReplayEvent", ReplayEvent); |
|
} |
|
protected virtual void AddRecordEvent(RecordEventType type) |
|
{ |
|
if (ReplaySetting.PlayStatus == PlayStatus.isEditor && RecordManager.Instance.recordStatus == RecordStatus.normal) |
|
{ |
|
var eventData = new EventData(); |
|
eventData.time = RecordManager.Instance.RecordTimer; |
|
eventData.cloneObjType = GetComponent<BaseGameObjInfo>().gameObjType; |
|
eventData.eventType = type; |
|
eventData.json = gameObject.name; |
|
|
|
RecordManager.Instance.jsonData.eventDataList.Add(eventData); |
|
} |
|
} |
|
protected virtual void ReplayEvent(IMessage obj) |
|
{ |
|
|
|
} |
|
protected virtual void D(IMessage obj) |
|
{ |
|
|
|
} |
|
protected virtual void A(IMessage obj) |
|
{ |
|
|
|
} |
|
protected virtual void J(IMessage obj) |
|
{ |
|
|
|
} |
|
protected virtual void U(IMessage obj) |
|
{ |
|
|
|
} |
|
protected virtual void PressureDown(IMessage obj) |
|
{ |
|
|
|
} |
|
protected virtual void PressureUp(IMessage obj) |
|
{ |
|
|
|
} |
|
|
|
protected virtual void Start() |
|
{ |
|
obj = obj? obj:transform;//如果开始没有物体 赋给本身 |
|
System.Random ran = new System.Random(); |
|
initTime = Time.time; |
|
} |
|
protected virtual void Update () |
|
{ |
|
UpdateTransform(); |
|
} |
|
/// <summary> |
|
/// 根据设置开始变化 |
|
/// </summary> |
|
protected virtual void UpdateTransform() |
|
{ |
|
switch (transformType) |
|
{ |
|
case TransformType.Position: |
|
if (x) PositionChange(obj, Axis.x); |
|
if (y) PositionChange(obj, Axis.y); |
|
if (z) PositionChange(obj, Axis.z); |
|
break; |
|
case TransformType.Rotation: |
|
if (x) RoatatinChange(obj, Axis.x); |
|
if (y) RoatatinChange(obj, Axis.y); |
|
if (z) RoatatinChange(obj, Axis.z); |
|
break; |
|
case TransformType.Scale: |
|
if (x) ScaleChange(obj, Axis.x); |
|
if (y) ScaleChange(obj, Axis.y); |
|
if (z) ScaleChange(obj, Axis.z); |
|
break; |
|
} |
|
} |
|
/// <summary> |
|
/// Transform变化方式 |
|
/// </summary> |
|
protected enum TransformType |
|
{ |
|
Position, |
|
Rotation, |
|
Scale |
|
} |
|
/// <summary> |
|
/// 改变的轴 |
|
/// </summary> |
|
protected enum Axis |
|
{ |
|
x, y, z |
|
} |
|
#region transform变化类型 |
|
private Vector3 vec = new Vector3(); |
|
protected virtual void RoatatinChange(Transform transform,Axis axis) |
|
{ |
|
switch (axis) |
|
{ |
|
case Axis.x: |
|
vec = new Vector3(ChangeType(min, max,speed), transform.localEulerAngles.y, transform.localEulerAngles.z); |
|
break; |
|
case Axis.y: |
|
vec = new Vector3(transform.localEulerAngles.x, ChangeType(min, max, speed), transform.localEulerAngles.z); |
|
break; |
|
case Axis.z: |
|
vec = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, ChangeType(min, max, speed)); |
|
break; |
|
} |
|
transform.localEulerAngles = vec; |
|
} |
|
protected virtual void PositionChange(Transform transform, Axis axis) |
|
{ |
|
switch (axis) |
|
{ |
|
case Axis.x: |
|
vec = new Vector3(ChangeType(min, max, speed), transform.localPosition.y, transform.localPosition.z); |
|
break; |
|
case Axis.y: |
|
vec = new Vector3(transform.localPosition.x, ChangeType(min, max, speed), transform.localPosition.z); |
|
break; |
|
case Axis.z: |
|
vec = new Vector3(transform.localPosition.x, transform.localPosition.y, ChangeType(min, max, speed)); |
|
break; |
|
} |
|
transform.localPosition = vec; |
|
} |
|
protected virtual void ScaleChange(Transform transform, Axis axis) |
|
{ |
|
switch (axis) |
|
{ |
|
case Axis.x: |
|
vec = new Vector3(ChangeType(min, max, speed), transform.localScale.y, transform.localScale.z); |
|
break; |
|
case Axis.y: |
|
vec = new Vector3(transform.localScale.x, ChangeType(min, max, speed), transform.localScale.z); |
|
break; |
|
case Axis.z: |
|
vec = new Vector3(transform.localScale.x, transform.localScale.y, ChangeType(min, max, speed)); |
|
break; |
|
} |
|
transform.localScale = vec; |
|
} |
|
#endregion |
|
/// <summary> |
|
/// 数值变化方式 |
|
/// </summary> |
|
protected enum ValueChange |
|
{ |
|
PingPong, |
|
Repeat, |
|
Random |
|
} |
|
/// <summary> |
|
/// 随机时间 |
|
/// </summary> |
|
public float initTime; |
|
/// <summary> |
|
/// 使用的数值变化类型 |
|
/// </summary> |
|
/// <returns>min-max之间的数值</returns> |
|
protected virtual float ChangeType(float min,float max,float speed) |
|
{ |
|
switch (valueChanage) |
|
{ |
|
case ValueChange.PingPong: |
|
return Mathf.Lerp(min, max, Mathf.PingPong((Time.time - initTime) * speed, 1)); |
|
case ValueChange.Repeat: |
|
return Mathf.Lerp(min, max, Mathf.Repeat((Time.time- initTime) * speed, 1)); |
|
case ValueChange.Random: |
|
return Mathf.Lerp(min, max, GetRandom()); |
|
} |
|
return 0; |
|
} |
|
private float num;//记录上一次的值 |
|
private float time;//累计时间 |
|
/// <summary> |
|
/// 获取随机数0-1 |
|
/// </summary> |
|
/// <returns>0-1</returns> |
|
private float GetRandom() |
|
{ |
|
time += Time.deltaTime; |
|
if (time > changeTime)//频率 |
|
{ |
|
time = 0; |
|
System.Random ran = new System.Random(); |
|
num = ran.Next(0, 101) / 100f; |
|
return num; |
|
} |
|
return num; |
|
} |
|
}
|
|
|