01
This commit is contained in:
+73
-21
@@ -12,88 +12,140 @@ PrefabInstance:
|
||||
propertyPath: m_Name
|
||||
value: PW_Effect_Settle_IronFist_Self_XingJiXunHang
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 100
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 100
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
- target: {fileID: 224843675838272296, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_AddedComponents:
|
||||
- targetCorrespondingSourceObject: {fileID: 1528097044962012, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 7814067992762775313}
|
||||
m_SourcePrefab: {fileID: 100100000, guid: d257b8461bbd510438787bdd0a8e2d49, type: 3}
|
||||
--- !u!1 &1650187392735260276 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 1528097044962012, guid: d257b8461bbd510438787bdd0a8e2d49,
|
||||
type: 3}
|
||||
m_PrefabInstance: {fileID: 1649383419158475944}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &7814067992762775313
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1650187392735260276}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5f0df2f946ba608449970c84418dade5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
tMP_beishu: {fileID: 0}
|
||||
tMP_score: {fileID: 0}
|
||||
goldSprite: {fileID: 0}
|
||||
SilverSprite: {fileID: 0}
|
||||
img_BaoJiangZhong: {fileID: 0}
|
||||
useScoreAnim: 0
|
||||
autoDestroyDelay: 5
|
||||
animTrigger_Appear: Appear
|
||||
animTrigger_Loop: Loop
|
||||
animTrigger_Close: Close
|
||||
|
||||
@@ -10,12 +10,16 @@ PrefabInstance:
|
||||
m_Modifications:
|
||||
- target: {fileID: 1158706302637583, guid: 8a3eb92f5b88a6645b2e7c4719e73521, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1403006993094469, guid: 8a3eb92f5b88a6645b2e7c4719e73521, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: PW_Prop_IronFist Variant
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1585511287684814, guid: 8a3eb92f5b88a6645b2e7c4719e73521, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4837804086439315, guid: 8a3eb92f5b88a6645b2e7c4719e73521, type: 3}
|
||||
propertyPath: m_LocalScale.x
|
||||
value: -5
|
||||
@@ -72,6 +76,11 @@ PrefabInstance:
|
||||
propertyPath: m_ConstrainProportionsScale
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4627758090278655303, guid: 8a3eb92f5b88a6645b2e7c4719e73521,
|
||||
type: 3}
|
||||
propertyPath: _animationName
|
||||
value: zadi
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
|
||||
@@ -154,6 +154,18 @@ public class XingJiXunHangEvent : BJEventBase
|
||||
[Tooltip("光子-laser 激活后上下摆动来回次数(0=不摆动)")]
|
||||
public int laserSwingCycles = 0;
|
||||
|
||||
[Header("光子 - 4条激光伸展")]
|
||||
[Tooltip("laser1 子物体名(向 X 正方向伸到屏幕最右)")]
|
||||
public string laser1Name = "laser1";
|
||||
[Tooltip("laser2 子物体名(向 -Y 方向伸到屏幕最下)")]
|
||||
public string laser2Name = "laser2";
|
||||
[Tooltip("laser3 子物体名(向 +Y 方向伸到屏幕最上)")]
|
||||
public string laser3Name = "laser3";
|
||||
[Tooltip("laser4 子物体名(向 -X 方向伸到屏幕最左)")]
|
||||
public string laser4Name = "laser4";
|
||||
[Tooltip("4条激光伸展到最长位置的耗时(秒)")]
|
||||
public float laserExpandSpeed = 0.6f;
|
||||
|
||||
[Header("光子 - 电网扫动杀鱼")]
|
||||
[Tooltip("电网(Prop整体)上下扫动幅度(世界单位)")]
|
||||
public float netSweepAmplitude = 5f;
|
||||
@@ -173,6 +185,22 @@ public class XingJiXunHangEvent : BJEventBase
|
||||
[Tooltip("电网是否杀鱼(碰到飞机飞机爆炸)")]
|
||||
public bool netKillFish = true;
|
||||
|
||||
[Header("伽马风暴 - 四射线旋转")]
|
||||
[Tooltip("四根射线子物体名(伽马风暴激光,按顺序填;预制体内为小写 laser1~4)")]
|
||||
public string[] gammaLaserNames = { "laser1", "laser2", "laser3", "laser4" };
|
||||
[Tooltip("射线显示后到开始旋转的等待(秒,默认1)")]
|
||||
public float gammaRotateDelay = 1f;
|
||||
[Tooltip("总旋转角度(度,默认80°)")]
|
||||
public float gammaRotateAngle = 80f;
|
||||
[Tooltip("转到该角度后激光开始缩短(度,默认45°)")]
|
||||
public float gammaShrinkStartAngle = 45f;
|
||||
[Tooltip("旋转速度(度/秒,正=逆时针)")]
|
||||
public float gammaRotateSpeed = 45f;
|
||||
[Tooltip("伽马风暴射线杀鱼检测层(Fish)")]
|
||||
public LayerMask gammaKillLayer;
|
||||
[Tooltip("伽马风暴射线是否杀鱼(碰到激光的飞机直接死亡)")]
|
||||
public bool gammaKillFish = true;
|
||||
|
||||
// ==================== 爆奖配置 ====================
|
||||
|
||||
[Header("爆奖配置")]
|
||||
@@ -343,7 +371,7 @@ public class XingJiXunHangEvent : BJEventBase
|
||||
/// <summary>根据武器 ID 选择对应的预制体和标签</summary>
|
||||
private void SelectWeaponPrefabs()
|
||||
{
|
||||
//_weaponId = 8;
|
||||
_weaponId = 6;
|
||||
switch (_weaponId)
|
||||
{
|
||||
case 0:
|
||||
@@ -842,6 +870,9 @@ public class XingJiXunHangEvent : BJEventBase
|
||||
}
|
||||
}
|
||||
|
||||
// ⭐ 4条激光沿各自方向伸展到最长位置(laser1:+X → laser2:-Y → laser3:+Y → laser4:-X)
|
||||
yield return StartCoroutine(LaserExpand(propObj));
|
||||
|
||||
// ⭐ 电网:Prop 整体上下扫动 + 碰到飞机(鱼)爆炸
|
||||
if (netSweepCycles > 0)
|
||||
{
|
||||
@@ -851,6 +882,53 @@ public class XingJiXunHangEvent : BJEventBase
|
||||
yield return new WaitForSeconds(0.3f);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 4条激光伸展:laser1 向 +X(屏幕最右)、laser2 向 -Y(屏幕最下)、
|
||||
/// laser3 向 +Y(屏幕最上)、laser4 向 -X(屏幕最左),到达最长位置。
|
||||
/// </summary>
|
||||
private IEnumerator LaserExpand(GameObject propObj)
|
||||
{
|
||||
if (propObj == null) yield break;
|
||||
|
||||
Transform l1 = FindChildRecursive(propObj.transform, laser1Name);
|
||||
Transform l2 = FindChildRecursive(propObj.transform, laser2Name);
|
||||
Transform l3 = FindChildRecursive(propObj.transform, laser3Name);
|
||||
Transform l4 = FindChildRecursive(propObj.transform, laser4Name);
|
||||
|
||||
int count = 0;
|
||||
// laser1 → +X 正方向(保持当前 Y,X 到屏幕最右)
|
||||
if (l1 != null)
|
||||
{
|
||||
Vector3 dest = new Vector3(GetScreenRight().x, l1.position.y, 0);
|
||||
StartCoroutine(MoveTo(l1, dest, laserExpandSpeed));
|
||||
count++;
|
||||
}
|
||||
// laser2 → -Y 方向(保持当前 X,Y 到屏幕最下)
|
||||
if (l2 != null)
|
||||
{
|
||||
Vector3 dest = new Vector3(l2.position.x, GetScreenBottom().y, 0);
|
||||
StartCoroutine(MoveTo(l2, dest, laserExpandSpeed));
|
||||
count++;
|
||||
}
|
||||
// laser3 → +Y 方向(保持当前 X,Y 到屏幕最上)
|
||||
if (l3 != null)
|
||||
{
|
||||
Vector3 dest = new Vector3(l3.position.x, GetScreenTop().y, 0);
|
||||
StartCoroutine(MoveTo(l3, dest, laserExpandSpeed));
|
||||
count++;
|
||||
}
|
||||
// laser4 → -X 方向(保持当前 Y,X 到屏幕最左)
|
||||
if (l4 != null)
|
||||
{
|
||||
Vector3 dest = new Vector3(GetScreenLeft().x, l4.position.y, 0);
|
||||
StartCoroutine(MoveTo(l4, dest, laserExpandSpeed));
|
||||
count++;
|
||||
}
|
||||
|
||||
yield return new WaitForSeconds(laserExpandSpeed + 0.2f);
|
||||
Debug.Log($"[XingJiXunHang] 光子: 4条激光伸展完成 找到{count}条({laser1Name}/{laser2Name}/{laser3Name}/{laser4Name})");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 电网扫动:Prop 整体上下移动(幅度 netSweepAmplitude,来回 netSweepCycles 次),
|
||||
/// 扫动过程中每帧检测 PropL~PropR 之间的矩形区域,碰到普通鱼 → 爆炸(Id_DieFish_FX)。
|
||||
@@ -957,7 +1035,9 @@ public class XingJiXunHangEvent : BJEventBase
|
||||
/// <summary>
|
||||
/// 伽马风暴道具动画(美术规格):
|
||||
/// 1. Prop 从死亡位置移动到屏幕中心
|
||||
/// 2. 根据视频内容激活特效(由动画事件或Timeline驱动)
|
||||
/// 2. 显示四根射线(激光)
|
||||
/// 3. 等待 gammaRotateDelay(默认1秒)
|
||||
/// 4. 开始旋转(Prop 整体绕 Z 轴),旋转中碰到激光的普通鱼直接死亡
|
||||
/// </summary>
|
||||
private IEnumerator GammaStormPropAnim(GameObject propObj)
|
||||
{
|
||||
@@ -966,8 +1046,193 @@ public class XingJiXunHangEvent : BJEventBase
|
||||
yield return StartCoroutine(MoveTo(propObj.transform, Vector3.zero, propAnimDuration));
|
||||
Debug.Log("[XingJiXunHang] 伽马风暴: 移动到屏幕中心");
|
||||
|
||||
// 2. 特效由预制体自身的动画/Timeline驱动,这里只等待
|
||||
yield return new WaitForSeconds(0.5f);
|
||||
// 2. 显示四根射线(激光,默认隐藏则激活)
|
||||
Transform[] lasers = FindGammaLasers(propObj);
|
||||
int shown = 0;
|
||||
foreach (var l in lasers)
|
||||
{
|
||||
if (l != null)
|
||||
{
|
||||
l.gameObject.SetActive(true);
|
||||
shown++;
|
||||
}
|
||||
}
|
||||
Debug.Log($"[XingJiXunHang] 伽马风暴: 显示激光 {shown}/{lasers.Length} 根");
|
||||
|
||||
// ⭐ 射线长度 = 斜边(直角边 = 屏幕宽度一半 / 高度一半),延伸到屏幕角落
|
||||
float diag = GetScreenHalfDiagonal();
|
||||
UpdateGammaLaserEndpoints(lasers, propObj.transform.position, diag);
|
||||
Debug.Log($"[XingJiXunHang] 伽马风暴: 射线长度设为斜边 {diag}");
|
||||
|
||||
// 3. 等待 1 秒(Tip 隐藏后停顿,让玩家看清激光)
|
||||
yield return new WaitForSeconds(gammaRotateDelay);
|
||||
Debug.Log($"[XingJiXunHang] 伽马风暴: 激光显示等待 {gammaRotateDelay}s 后开始旋转");
|
||||
|
||||
// 4. 旋转 + 射线杀鱼
|
||||
yield return StartCoroutine(GammaRotateAndKill(propObj, lasers, diag));
|
||||
}
|
||||
|
||||
/// <summary>按 gammaLaserNames 查找四根射线子物体</summary>
|
||||
private Transform[] FindGammaLasers(GameObject propObj)
|
||||
{
|
||||
if (propObj == null || gammaLaserNames == null || gammaLaserNames.Length == 0)
|
||||
return new Transform[0];
|
||||
|
||||
Transform[] lasers = new Transform[gammaLaserNames.Length];
|
||||
for (int i = 0; i < gammaLaserNames.Length; i++)
|
||||
{
|
||||
// ⭐ 先忽略大小写找(预制体实际小写 laser1~4),找不到再精确匹配
|
||||
lasers[i] = FindChildIgnoreCase(propObj.transform, gammaLaserNames[i]);
|
||||
if (lasers[i] == null)
|
||||
lasers[i] = FindChildRecursive(propObj.transform, gammaLaserNames[i]);
|
||||
if (lasers[i] == null)
|
||||
Debug.LogWarning($"[XingJiXunHang] 伽马风暴: 找不到射线子物体 {gammaLaserNames[i]}");
|
||||
}
|
||||
return lasers;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 伽马风暴:Prop 整体旋转 gammaRotateAngle 度(默认80°)。
|
||||
/// 转到 gammaShrinkStartAngle(45°)后激光开始慢慢缩短,转到终点时缩到看不见(长度 0)。
|
||||
/// 旋转中射线扫到的普通鱼死亡。
|
||||
/// </summary>
|
||||
private IEnumerator GammaRotateAndKill(GameObject propObj, Transform[] lasers, float laserLength)
|
||||
{
|
||||
if (propObj == null) yield break;
|
||||
|
||||
float rotated = 0f;
|
||||
int killCount = 0;
|
||||
float shrinkSpan = Mathf.Max(0.01f, gammaRotateAngle - gammaShrinkStartAngle);
|
||||
|
||||
while (rotated < gammaRotateAngle)
|
||||
{
|
||||
float step = gammaRotateSpeed * Time.deltaTime;
|
||||
propObj.transform.Rotate(0f, 0f, step);
|
||||
rotated += step;
|
||||
|
||||
// ⭐ 激光长度:前 gammaShrinkStartAngle 度保持全斜边,之后线性缩短到 0(看不见)
|
||||
float curLen = laserLength;
|
||||
if (rotated > gammaShrinkStartAngle)
|
||||
{
|
||||
float t = (rotated - gammaShrinkStartAngle) / shrinkSpan;
|
||||
curLen = laserLength * (1f - Mathf.Clamp01(t));
|
||||
}
|
||||
|
||||
// 每帧更新射线端点(LineRenderer 世界坐标不随父旋转,必须跟随激光新朝向)
|
||||
UpdateGammaLaserEndpoints(lasers, propObj.transform.position, curLen);
|
||||
|
||||
if (gammaKillFish)
|
||||
KillFishByGammaLasers(propObj.transform, lasers, curLen, ref killCount);
|
||||
yield return null;
|
||||
}
|
||||
|
||||
// 终点:激光缩到 0 长度(隐藏)
|
||||
UpdateGammaLaserEndpoints(lasers, propObj.transform.position, 0f);
|
||||
Debug.Log($"[XingJiXunHang] 伽马风暴: 旋转完成 {rotated:0.#}°(45°后激光缩短至消失)炸鱼 {killCount} 条");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置四根射线长度为斜边:LineRenderer 端点 = 中心 → 中心 + 射线朝向×长度。
|
||||
/// 射线朝向优先取"激光当前位置-中心"(随 Prop 旋转自动更新),零向量时用激光本地 Y 轴方向。
|
||||
/// </summary>
|
||||
private void UpdateGammaLaserEndpoints(Transform[] lasers, Vector3 center, float length)
|
||||
{
|
||||
if (lasers == null) return;
|
||||
|
||||
foreach (var laser in lasers)
|
||||
{
|
||||
if (laser == null) continue;
|
||||
|
||||
// 射线方向:激光相对中心的位置(旋转后自动更新);为 0 则用激光自身的朝向
|
||||
Vector2 dir = (Vector2)laser.position - (Vector2)center;
|
||||
if (dir.sqrMagnitude < 0.0001f)
|
||||
dir = laser.up; // 本地 Y 轴世界方向(或 right,按预制体实际朝向)
|
||||
if (dir.sqrMagnitude < 0.0001f) dir = Vector2.right;
|
||||
dir.Normalize();
|
||||
|
||||
Vector3 endWorld = center + (Vector3)dir * length;
|
||||
|
||||
var lr = laser.GetComponent<LineRenderer>();
|
||||
if (lr != null)
|
||||
{
|
||||
lr.positionCount = 2;
|
||||
if (lr.useWorldSpace)
|
||||
{
|
||||
lr.SetPosition(0, center);
|
||||
lr.SetPosition(1, endWorld);
|
||||
}
|
||||
else
|
||||
{
|
||||
lr.SetPosition(0, laser.InverseTransformPoint(center));
|
||||
lr.SetPosition(1, laser.InverseTransformPoint(endWorld));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 非 LineRenderer:把激光整体拉伸到目标长度(假定沿本地 Y 轴伸长)
|
||||
float curLen = laser.localScale.y;
|
||||
if (curLen < 0.001f) curLen = 1f;
|
||||
laser.localScale = new Vector3(laser.localScale.x, length / curLen, laser.localScale.z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>屏幕半宽半高为直角边的斜边长度(世界单位)= 屏幕中心到角落的距离</summary>
|
||||
private float GetScreenHalfDiagonal()
|
||||
{
|
||||
var cam = Camera.main;
|
||||
if (cam == null) return 10f;
|
||||
|
||||
float z = cam.transform.position.z * -1f;
|
||||
Vector3 center = cam.ScreenToWorldPoint(new Vector3(Screen.width * 0.5f, Screen.height * 0.5f, z));
|
||||
Vector3 corner = cam.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, z));
|
||||
float halfW = Mathf.Abs(corner.x - center.x);
|
||||
float halfH = Mathf.Abs(corner.y - center.y);
|
||||
return Mathf.Sqrt(halfW * halfW + halfH * halfH);
|
||||
}
|
||||
|
||||
/// <summary>沿每根射线方向 Raycast 检测(长度=斜边),扫到的普通鱼直接爆炸(防重复)</summary>
|
||||
private void KillFishByGammaLasers(Transform center, Transform[] lasers, float laserLength, ref int killCount)
|
||||
{
|
||||
if (center == null || lasers == null || lasers.Length == 0) return;
|
||||
if (gammaKillLayer.value == 0)
|
||||
{
|
||||
Debug.LogWarning("[XingJiXunHang] 伽马风暴杀鱼层 gammaKillLayer 未设置(Inspector 选 Fish 层),跳过杀鱼");
|
||||
gammaKillFish = false; // 只提示一次
|
||||
return;
|
||||
}
|
||||
|
||||
Vector3 sitPos = GetSeatPosition();
|
||||
foreach (var laser in lasers)
|
||||
{
|
||||
if (laser == null) continue;
|
||||
|
||||
// 射线:从 Prop 中心朝激光朝向,距离 = 斜边长度(整根激光覆盖范围)
|
||||
Vector2 origin = center.position;
|
||||
Vector2 toEnd = (Vector2)laser.position - origin;
|
||||
Vector2 dir = toEnd.sqrMagnitude < 0.0001f ? (Vector2)laser.up : toEnd.normalized;
|
||||
if (dir.sqrMagnitude < 0.0001f) dir = Vector2.right;
|
||||
dir.Normalize();
|
||||
|
||||
RaycastHit2D[] hits = Physics2D.RaycastAll(origin, dir, laserLength, gammaKillLayer);
|
||||
if (hits == null || hits.Length == 0) continue;
|
||||
|
||||
foreach (var hit in hits)
|
||||
{
|
||||
if (hit.collider == null || !hit.collider.CompareTag("Fish")) continue;
|
||||
var monster = hit.collider.GetComponentInParent<MonsterContral>();
|
||||
if (monster == null) continue;
|
||||
if (monster.fishenum != FishTypeEnum.普通鱼) continue; // 只炸普通鱼
|
||||
if (!_netKilledFish.Add(monster.guid)) continue; // 已炸过跳过
|
||||
|
||||
var coinNum = new RedPacketRecord
|
||||
{
|
||||
Amount = paoBei * monster.monsterData.fishTypeConfig.fishScore
|
||||
};
|
||||
CreateFishManager.Instance.Id_DieFish_FX(monster.guid, coinNum, sitPos, isLocal: isSelf);
|
||||
killCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== 满屏暴击文字 ====================
|
||||
@@ -1082,10 +1347,11 @@ public class XingJiXunHangEvent : BJEventBase
|
||||
return obj;
|
||||
}
|
||||
|
||||
/// <summary>递归查找子物体</summary>
|
||||
/// <summary>递归查找子物体(⭐ 忽略大小写,防预制体命名 laser1/Laser1 不一致)</summary>
|
||||
private Transform FindChildRecursive(Transform parent, string name)
|
||||
{
|
||||
if (parent.name == name) return parent;
|
||||
if (parent.name == name)
|
||||
return parent;
|
||||
|
||||
for (int i = 0; i < parent.childCount; i++)
|
||||
{
|
||||
@@ -1095,6 +1361,20 @@ public class XingJiXunHangEvent : BJEventBase
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>递归查找子物体(忽略大小写版本,找不到再试精确)</summary>
|
||||
private Transform FindChildIgnoreCase(Transform parent, string name)
|
||||
{
|
||||
if (string.Equals(parent.name, name, System.StringComparison.OrdinalIgnoreCase))
|
||||
return parent;
|
||||
|
||||
for (int i = 0; i < parent.childCount; i++)
|
||||
{
|
||||
var result = FindChildIgnoreCase(parent.GetChild(i), name);
|
||||
if (result != null) return result;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>物体移动协程</summary>
|
||||
private IEnumerator MoveTo(Transform target, Vector3 destination, float duration)
|
||||
{
|
||||
@@ -1141,6 +1421,24 @@ public class XingJiXunHangEvent : BJEventBase
|
||||
return new Vector3(5, 0, 0);
|
||||
}
|
||||
|
||||
/// <summary>获取屏幕顶部世界坐标</summary>
|
||||
private Vector3 GetScreenTop()
|
||||
{
|
||||
var cam = Camera.main;
|
||||
if (cam != null)
|
||||
return cam.ScreenToWorldPoint(new Vector3(Screen.width * 0.5f, Screen.height, cam.transform.position.z * -1f));
|
||||
return new Vector3(0, 5, 0);
|
||||
}
|
||||
|
||||
/// <summary>获取屏幕底部世界坐标</summary>
|
||||
private Vector3 GetScreenBottom()
|
||||
{
|
||||
var cam = Camera.main;
|
||||
if (cam != null)
|
||||
return cam.ScreenToWorldPoint(new Vector3(Screen.width * 0.5f, 0, cam.transform.position.z * -1f));
|
||||
return new Vector3(0, -5, 0);
|
||||
}
|
||||
|
||||
// ==================== 销毁 ====================
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -116,6 +116,7 @@ MonoBehaviour:
|
||||
type: 3}
|
||||
tapTipName: tap_tip
|
||||
knockTipName: knock_tip
|
||||
tipContainerName: Tip
|
||||
ironFistHoleName: Hole
|
||||
ironFistHandName: Hand
|
||||
ironFistCornerOffset: {x: 15, y: 10, z: 0}
|
||||
@@ -126,6 +127,11 @@ MonoBehaviour:
|
||||
symmetraLaserName: laser
|
||||
laserSwingAmplitude: 0.5
|
||||
laserSwingCycles: 0
|
||||
laser1Name: laser1
|
||||
laser2Name: laser2
|
||||
laser3Name: laser3
|
||||
laser4Name: laser4
|
||||
laserExpandSpeed: 0.6
|
||||
netSweepAmplitude: 20
|
||||
netSweepCycles: 3
|
||||
netSweepSpeed: 3
|
||||
@@ -134,6 +140,19 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
m_Bits: 64
|
||||
netKillFish: 1
|
||||
gammaLaserNames:
|
||||
- Laser1
|
||||
- Laser2
|
||||
- Laser3
|
||||
- Laser4
|
||||
gammaRotateDelay: 1
|
||||
gammaRotateAngle: 90
|
||||
gammaShrinkStartAngle: 45
|
||||
gammaRotateSpeed: 120
|
||||
gammaKillLayer:
|
||||
serializedVersion: 2
|
||||
m_Bits: 64
|
||||
gammaKillFish: 1
|
||||
bjCount: 1
|
||||
bjMinCount: 10
|
||||
bjMaxCount: 15
|
||||
|
||||
Reference in New Issue
Block a user