- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg) - LoginPanel: InputField placeholder本地化、字体颜色保持 - HistoryPanel: 用时数据本地化、placeholder本地化 - RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建) - AppraiseWindowBase: 评价等级本地化、操作消息重建 - EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized - StudentOperateRecorder: 新增InjectOperateMsgLocalized方法 - LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选 - 字体切换时保留颜色和verticalOverflow
125 lines
3.4 KiB
C#
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;
|
|
}
|
|
}
|