更新S2交互

This commit is contained in:
YXY
2026-03-06 18:51:18 +08:00
parent 3e39007e2c
commit 6465387a45
281 changed files with 86957 additions and 206 deletions

View File

@@ -6,7 +6,7 @@ using UnityEngine;
public class AnimalCatchCtr : MonoBehaviour
{
////计时相关
////<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>
//bool isRun = false;
//float waitTime = 0.3f;
//float runTime = 0;
@@ -14,58 +14,48 @@ public class AnimalCatchCtr : MonoBehaviour
// Start is called before the first frame update
void Start()
{
//把检测范围传给管理类
//<EFBFBD>Ѽ<EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MeshCollider controll = GameObject.Find("LeaveBoxCollider_201").GetComponent<MeshCollider>();
AnimalCatchMgr.Instance.SetMeshCollider(controll);
}
//左手获得抓放的手势
//<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>ץ<EFBFBD>ŵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public void LeftHandPosCatch(bool isShow)
{
//if (isShow)
//{
// GlobalEventMgr.Dispatch(GameEvent.EventRayStart,1);//1:左手
// //Debug.Log("抓取手势识别成功进来了");
// GlobalEventMgr.Dispatch(GameEvent.EventRayStart,1);//1:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// //Debug.Log("ץȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
//}
//else
//{
// //Debug.Log("松开手势识别成功进来了");
// //Debug.Log("<EFBFBD>ɿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
// //GlobalEventMgr.Dispatch(GameEvent.EventRayQuadOk, false,1);
//}
}
//右手获得抓放的手势
//右手握拳抓取姿势(由 XRI 手势识别驱动 QuadCatchCtr此回调保留供其他逻辑使用
public void RightHandPosCatch(bool isShow)
{
if (isShow)
{
GlobalEventMgr.Dispatch(GameEvent.EventRayStart,2);//2:右手
//Debug.Log("抓取手势识别成功进来了");
}
else
{
//Debug.Log("松开手势识别成功进来了");
//GlobalEventMgr.Dispatch(GameEvent.EventRayQuadOk, false,2);
}
}
//左手抓取手势手掌向上
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ץȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public void LeftHandCatchPalmUp(bool isShowFont)
{
//if (isShowFont)
//{
// Debug.Log("手势向上获取到:"+ AnimalCatchMgr.Instance.leftHandIsCatchObj);
// Debug.Log("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϻ<EFBFBD>ȡ<EFBFBD><EFBFBD>:"+ AnimalCatchMgr.Instance.leftHandIsCatchObj);
// //if(AnimalCatchMgr.Instance.handIsCatchObj)
// GlobalEventMgr.Dispatch(GameEvent.EventHandShowFont,1, AnimalCatchMgr.Instance.leftAnimalType);
//}
}
//右手抓取手势手掌向上
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ץȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public void RightHnadCatchPalmUp(bool isShowFont)
{
if (isShowFont)
{
Debug.Log("手势向上获取到:" + AnimalCatchMgr.Instance.rightHandIsCatchObj);
Debug.Log("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϻ<EFBFBD>ȡ<EFBFBD><EFBFBD>:" + AnimalCatchMgr.Instance.rightHandIsCatchObj);
//if(AnimalCatchMgr.Instance.handIsCatchObj)
GlobalEventMgr.Dispatch(GameEvent.EventHandShowFont,2, AnimalCatchMgr.Instance.rightAnimalType);
}

View File

@@ -0,0 +1,82 @@
using BigSpace.Logic;
using BigSpace.XRCore.Event;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
using UnityEngine.XR.Interaction.Toolkit.Interactables;
/// <summary>
/// S2 洹水风光 - 动物抓取交互
/// 挂在 animal_wolf / animal_cattle / animal_elephant 预制体根节点。
/// 同一 GameObject 需要挂 XRGrabInteractable。
///
/// 抓取流程:
/// selectEntered → 更新 AnimalCatchMgr 状态(手翻转手势仍由 AnimalCatchCtr.RightHnadCatchPalmUp 处理)
/// selectExited → 启用物理 + 派发 EventAnimalSend多人同步
/// </summary>
[RequireComponent(typeof(XRGrabInteractable))]
public class S2_AnimalGrab : MonoBehaviour
{
[Header("动物类型")]
[Tooltip("1=狐/狼 2=象 3=牛")]
[SerializeField] private int animalType = 1;
[Header("释放后挂到的父节点")]
[Tooltip("赋值为场景中 AnimalCatchMgr.parent_animals留空则保持原父节点")]
[SerializeField] private Transform releaseParent;
private XRGrabInteractable m_grab;
private Rigidbody m_rb;
private void Awake()
{
m_grab = GetComponent<XRGrabInteractable>();
m_rb = GetComponent<Rigidbody>();
}
private void OnEnable()
{
m_grab.selectEntered.AddListener(OnSelectEntered);
m_grab.selectExited.AddListener(OnSelectExited);
}
private void OnDisable()
{
m_grab.selectEntered.RemoveListener(OnSelectEntered);
m_grab.selectExited.RemoveListener(OnSelectExited);
}
// ── 抓取 ──────────────────────────────────────────────────────
private void OnSelectEntered(SelectEnterEventArgs args)
{
// 让 AnimalCatchCtr.RightHnadCatchPalmUp 仍能读到正确的动物类型
if (AnimalCatchMgr.Instance != null)
{
AnimalCatchMgr.Instance.rightHandIsCatchObj = true;
AnimalCatchMgr.Instance.rightAnimalType = animalType;
}
}
// ── 松手 ──────────────────────────────────────────────────────
private void OnSelectExited(SelectExitEventArgs args)
{
// 脱离手部父节点,挂到场景动物容器
if (releaseParent != null)
transform.SetParent(releaseParent, true);
// 启用物理XRI 在 Velocity/Kinematic 模式下会恢复 isKinematic这里强制打开重力
if (m_rb != null)
{
m_rb.isKinematic = false;
m_rb.useGravity = true;
}
// 重置管理器状态
if (AnimalCatchMgr.Instance != null)
AnimalCatchMgr.Instance.rightHandIsCatchObj = false;
// 多人同步:告知其他玩家在同位置生成该动物
GlobalEventMgr.Dispatch(GameEvent.EventAnimalSend, animalType);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7c42d1fbaf3caa6498624ae963e6ffbf
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: