unityzgy/Assets/Scripts/ThisProjectTool/VRCtrl/ScrewFixationGO.cs
ayuan9957 bf12e02276 feat: 多语言本地化系统 - 支持中/英/法/俄实时切换
- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg)
- LoginPanel: InputField placeholder本地化、字体颜色保持
- HistoryPanel: 用时数据本地化、placeholder本地化
- RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建)
- AppraiseWindowBase: 评价等级本地化、操作消息重建
- EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized
- StudentOperateRecorder: 新增InjectOperateMsgLocalized方法
- LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选
- 字体切换时保留颜色和verticalOverflow
2026-07-16 10:05:59 +08:00

125 lines
3.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using VRTK;
using DG.Tweening;
//自带固定螺丝可以移动和固定的物体 如座椅 盖板等
public class ScrewFixationGO : FixedAbs
{
Transform parentTrans;
bool checkPos;
Vector3 rightPos;
float allowPosError;//位置检测允许误差 单位m
bool checkAngle;
Vector3 rightAngle;
//手柄放下时检测是否符合安装位置需要
public override void UnGrabbed()
{
bool onAllowableFixed = false;//判断是否满足安装位置需要
this.transform.SetParent(parentTrans);
if (checkPos )
{
onAllowableFixed = CheckPos();
}
if(checkAngle )
{
onAllowableFixed = CheckAngle();
}
if (onAllowableFixed)//满足安装条件
{
StartHoming();//播放归位动画
Locking();
}
else//未处于安装位置 暂时不做处理
{
UnLocking();
}
}
//抓起时固定器无法启用
public override void Grabbed()
{
ChangeSelfFixatorsInter(false);
}
//改变子物体的可交互状态
private void ChangeSelfFixatorsInter(bool value)
{
for (int i = 0; i < fixators.Length; i++)
{
//fixators[i].SetInteractable(value);
}
}
//开始动画复位到准确的安装位置
private void StartHoming()
{
interactableObject.gameObject.GetComponent<Rigidbody>().isKinematic = true;//避免重力或其他物体影响其归位
this.transform.DOMove(rightPos, 1f).OnComplete(HomgingOver);
this.transform.DORotate(rightAngle, 1f);
}
//复位完成 启用螺丝交互逻辑
void HomgingOver()
{
onFixedPos = true;
for (int i = 0; i < fixators.Length; i++)
{
//fixators[i].SetInteractable(true);
}
}
//设置当前物体 安装完成后的父物体
public void SetFixedTrans(Transform parentTrans)
{
this.parentTrans = parentTrans;
}
/// <summary>
/// 设置与父物体的相对正确位置 不设置不检查
/// </summary>
/// <param name="targetPos">目标位置</param>
/// <param name="allowError">误差距离</param>
public void SetRightPos(Vector3 targetPos,float allowError)
{
checkPos = true;
rightPos = targetPos;
allowPosError = allowError;
}
/// <summary>
/// 设置与父物体的相对正确角度不设置不检查
/// </summary>
/// <param name="targetAngle">目标角度</param>
/// <param name="allowError">允许误差角度</param>
public void SetRightAngle(Vector3 targetAngle, float allowError)
{
checkAngle = true;
rightAngle = targetAngle;
}
/// <summary>
///
/// </summary>
/// <returns> true 符合要求</returns>
bool CheckPos()
{
return Vector3.Magnitude(this.transform.position - rightPos) < allowPosError;
}
/// <summary>
///
/// </summary>
/// <returns>true 符合要求</returns>
bool CheckAngle()
{
Vector3 currentAngle = this.transform.localEulerAngles;
if (currentAngle.x - rightAngle.x > 5 || currentAngle.y - rightAngle.y > 5 || currentAngle.z - rightAngle.z > 5)
return false;
else
return true;
}
}