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.
122 lines
3.0 KiB
122 lines
3.0 KiB
using System.Collections; |
|
using System.Collections.Generic; |
|
using UnityEngine; |
|
using AX.MessageSystem; |
|
using System; |
|
|
|
public enum WindDirection |
|
{ |
|
East = 4, |
|
East_South = -3, |
|
South = -2, |
|
West_South = -1, |
|
West = 0, |
|
West_North = 1, |
|
North = 2, |
|
East_North = 3 |
|
} |
|
|
|
public class WindDirectionSet : MonoBehaviour { |
|
|
|
private ParticleSystem smoke; |
|
private Transform wind; |
|
private WindZone windZone; |
|
private float rotation_Y; |
|
public Vector3 dirVec;//风向 |
|
// Use this for initialization |
|
void Awake () { |
|
smoke = transform.Find("Fire_Smoke_LG").GetComponent<ParticleSystem>(); |
|
wind = GameObject.Find("WindZone").transform; |
|
windZone = wind.GetComponent<WindZone>(); |
|
} |
|
|
|
// Update is called once per frame |
|
void Update () { |
|
|
|
} |
|
|
|
private void OnEnable() |
|
{ |
|
MessageDispatcher.AddListener("SET_SMOKE_DIRECTION", SmokeDirectionSet); |
|
MessageDispatcher.SendMessage("SET_SMOKE_DIRECTION"); |
|
} |
|
|
|
private void OnDisable() |
|
{ |
|
MessageDispatcher.RemoveListener("SET_SMOKE_DIRECTION", SmokeDirectionSet); |
|
} |
|
|
|
private void SmokeDirectionSet(IMessage obj) |
|
{ |
|
rotation_Y = ClampAngle(Mathf.Ceil(wind.rotation.eulerAngles.y)); |
|
int dir = (int)(rotation_Y / 45); |
|
dirVec = WindDir(dir); |
|
|
|
float windForce = windZone.windMain; |
|
|
|
var emission = smoke.emission; |
|
var rate = emission.rateOverTime; |
|
if (windForce == 0) |
|
{ |
|
rate.constant = 1; |
|
} |
|
else |
|
{ |
|
rate.constant = windForce; |
|
} |
|
emission.rateOverTime = rate; |
|
|
|
var force = smoke.forceOverLifetime; |
|
force.x = dirVec.x * windForce; |
|
force.y = dirVec.y * windForce; |
|
force.z = dirVec.z * windForce; |
|
} |
|
|
|
private Vector3 WindDir(int dir) |
|
{ |
|
Vector3 dirVec = new Vector3(); |
|
if (dir == (int)WindDirection.East) |
|
{ |
|
dirVec = new Vector3(0,0,1); |
|
} |
|
else if (dir == (int)WindDirection.West) |
|
{ |
|
dirVec = new Vector3(0, 0, -1); |
|
} |
|
else if (dir == (int)WindDirection.South) |
|
{ |
|
dirVec = new Vector3(1,0,0); |
|
} |
|
else if (dir == (int)WindDirection.North) |
|
{ |
|
dirVec = new Vector3(-1, 0, 0); |
|
} |
|
else if (dir == (int)WindDirection.East_South) |
|
{ |
|
dirVec = new Vector3(1, 0, 1); |
|
} |
|
else if (dir == (int)WindDirection.East_North) |
|
{ |
|
dirVec = new Vector3(-1, 0, 1); |
|
} |
|
else if (dir == (int)WindDirection.West_South) |
|
{ |
|
dirVec = new Vector3(1, 0, -1); |
|
} |
|
else if (dir == (int)WindDirection.West_North) |
|
{ |
|
dirVec = new Vector3(-1, 0, -1); |
|
} |
|
|
|
return dirVec; |
|
} |
|
|
|
private float ClampAngle(float angle) |
|
{ |
|
if (angle < -180) |
|
angle += 360; |
|
if (angle > 180) |
|
angle -= 360; |
|
return angle; |
|
} |
|
}
|
|
|