構えの処理を追加
This commit is contained in:
@@ -3507,6 +3507,11 @@ GameObject:
|
|||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
m_StaticEditorFlags: 0
|
m_StaticEditorFlags: 0
|
||||||
m_IsActive: 1
|
m_IsActive: 1
|
||||||
|
--- !u!4 &434230315 stripped
|
||||||
|
Transform:
|
||||||
|
m_CorrespondingSourceObject: {fileID: 7917674758919744168, guid: 77e7c27b2c5525e4aa8cc9f99d654486, type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 755171638}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
--- !u!1001 &435560708
|
--- !u!1001 &435560708
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -14720,6 +14725,11 @@ Transform:
|
|||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 1872167819}
|
m_Father: {fileID: 1872167819}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!4 &698882382 stripped
|
||||||
|
Transform:
|
||||||
|
m_CorrespondingSourceObject: {fileID: 7917674758326848202, guid: 77e7c27b2c5525e4aa8cc9f99d654486, type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 755171638}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
--- !u!1001 &699861773
|
--- !u!1001 &699861773
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -15356,6 +15366,9 @@ PrefabInstance:
|
|||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
m_AddedComponents:
|
m_AddedComponents:
|
||||||
|
- targetCorrespondingSourceObject: {fileID: 8806329115733545877, guid: 77e7c27b2c5525e4aa8cc9f99d654486, type: 3}
|
||||||
|
insertIndex: -1
|
||||||
|
addedObject: {fileID: 1417949159}
|
||||||
- targetCorrespondingSourceObject: {fileID: 7917674758240283208, guid: 77e7c27b2c5525e4aa8cc9f99d654486, type: 3}
|
- targetCorrespondingSourceObject: {fileID: 7917674758240283208, guid: 77e7c27b2c5525e4aa8cc9f99d654486, type: 3}
|
||||||
insertIndex: -1
|
insertIndex: -1
|
||||||
addedObject: {fileID: 938850979}
|
addedObject: {fileID: 938850979}
|
||||||
@@ -17285,6 +17298,7 @@ MonoBehaviour:
|
|||||||
m_Flags: 0
|
m_Flags: 0
|
||||||
m_Reference: {fileID: 1927926602}
|
m_Reference: {fileID: 1927926602}
|
||||||
controllerNode: 5
|
controllerNode: 5
|
||||||
|
poseDetector: {fileID: 1417949159}
|
||||||
minPunchSpeed: 0.1
|
minPunchSpeed: 0.1
|
||||||
damageMultiplier: 10
|
damageMultiplier: 10
|
||||||
hapticAmplitude: 0.5
|
hapticAmplitude: 0.5
|
||||||
@@ -17337,6 +17351,11 @@ Rigidbody:
|
|||||||
m_Interpolate: 0
|
m_Interpolate: 0
|
||||||
m_Constraints: 0
|
m_Constraints: 0
|
||||||
m_CollisionDetection: 0
|
m_CollisionDetection: 0
|
||||||
|
--- !u!4 &938850986 stripped
|
||||||
|
Transform:
|
||||||
|
m_CorrespondingSourceObject: {fileID: 7917674758240283209, guid: 77e7c27b2c5525e4aa8cc9f99d654486, type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 755171638}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
--- !u!1 &943548852
|
--- !u!1 &943548852
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -640342,6 +640361,31 @@ MonoBehaviour:
|
|||||||
m_ShadowLayerMask: 1
|
m_ShadowLayerMask: 1
|
||||||
m_RenderingLayers: 1
|
m_RenderingLayers: 1
|
||||||
m_ShadowRenderingLayers: 1
|
m_ShadowRenderingLayers: 1
|
||||||
|
--- !u!1 &1417949158 stripped
|
||||||
|
GameObject:
|
||||||
|
m_CorrespondingSourceObject: {fileID: 8806329115733545877, guid: 77e7c27b2c5525e4aa8cc9f99d654486, type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 755171638}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
--- !u!114 &1417949159
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1417949158}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: ba5d2c8447b183c40ad8183575ee0b8e, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::VRInputPoseDetector
|
||||||
|
headTransform: {fileID: 698882382}
|
||||||
|
rightHandTransform: {fileID: 938850986}
|
||||||
|
leftHandTransform: {fileID: 434230315}
|
||||||
|
minForwardDistance: 0.15
|
||||||
|
maxForwardDistance: 0.5
|
||||||
|
minHeightOffset: -0.35
|
||||||
|
maxHeightOffset: -0.1
|
||||||
|
requiredPoseTime: -0.3
|
||||||
--- !u!1001 &1426484610
|
--- !u!1001 &1426484610
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
58
Assets/Scripts/VRInputPoseDetector.cs
Normal file
58
Assets/Scripts/VRInputPoseDetector.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public class VRInputPoseDetector : MonoBehaviour
|
||||||
|
{
|
||||||
|
[SerializeField] private Transform headTransform;
|
||||||
|
[SerializeField] private Transform rightHandTransform;
|
||||||
|
[SerializeField] private Transform leftHandTransform;
|
||||||
|
[SerializeField] private float minForwardDistance = 0.15f;
|
||||||
|
[SerializeField] private float maxForwardDistance = 0.5f;
|
||||||
|
[SerializeField] private float minHeightOffset = -0.35f;
|
||||||
|
[SerializeField] private float maxHeightOffset = -0.1f;
|
||||||
|
[SerializeField] private float requiredPoseTime = -0.3f;
|
||||||
|
private float poseTimer = 0f;
|
||||||
|
private bool isPoseMainTained = false;
|
||||||
|
public bool IsPosing => isPoseMainTained;
|
||||||
|
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
if(headTransform == null || rightHandTransform == null || leftHandTransform == null) return;
|
||||||
|
|
||||||
|
//両手の世界座標を頭を中心としたローカル座標に変換
|
||||||
|
Vector3 localRightHand = headTransform.InverseTransformPoint(rightHandTransform.position);
|
||||||
|
Vector3 localLeftHand = headTransform.InverseTransformPoint(leftHandTransform.position);
|
||||||
|
|
||||||
|
//両手が構え範囲に入っているかチェック
|
||||||
|
bool isRightHandGuarding = CheckHandPosition(localRightHand);
|
||||||
|
bool isLeftHandGuarding = CheckHandPosition(localLeftHand);
|
||||||
|
|
||||||
|
//両手が構え範囲にある場合のタイマー処理
|
||||||
|
if(isRightHandGuarding && isLeftHandGuarding)
|
||||||
|
{
|
||||||
|
poseTimer += Time.deltaTime;
|
||||||
|
if(poseTimer >= requiredPoseTime && !isPoseMainTained)
|
||||||
|
{
|
||||||
|
isPoseMainTained = true;
|
||||||
|
Debug.Log("kamaeseikou");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
poseTimer = 0f;
|
||||||
|
if(isPoseMainTained)
|
||||||
|
{
|
||||||
|
isPoseMainTained = false;
|
||||||
|
Debug.Log("kamaesippai");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
private bool CheckHandPosition(Vector3 localHandPos)
|
||||||
|
{
|
||||||
|
bool inForwardRange = localHandPos.z >= minForwardDistance && localHandPos.z <= maxForwardDistance; //Z軸:頭より前に手があるか
|
||||||
|
bool inHeightRange = localHandPos.y >= minHeightOffset && localHandPos.y <= maxHeightOffset; //Y軸:手の高さが適切か
|
||||||
|
|
||||||
|
return inForwardRange && inHeightRange;
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Scripts/VRInputPoseDetector.cs.meta
Normal file
2
Assets/Scripts/VRInputPoseDetector.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ba5d2c8447b183c40ad8183575ee0b8e
|
||||||
@@ -10,6 +10,8 @@ public class VRInputPunch : MonoBehaviour
|
|||||||
|
|
||||||
[SerializeField] private XRNode controllerNode = XRNode.RightHand;
|
[SerializeField] private XRNode controllerNode = XRNode.RightHand;
|
||||||
|
|
||||||
|
[SerializeField] private VRInputPoseDetector poseDetector;
|
||||||
|
|
||||||
[SerializeField] private float minPunchSpeed = 2.0f; //パンチとして判定する最低速度 (m/s)
|
[SerializeField] private float minPunchSpeed = 2.0f; //パンチとして判定する最低速度 (m/s)
|
||||||
|
|
||||||
[SerializeField] private float damageMultiplier = 10.0f; //ダメージ倍率
|
[SerializeField] private float damageMultiplier = 10.0f; //ダメージ倍率
|
||||||
@@ -56,10 +58,18 @@ public class VRInputPunch : MonoBehaviour
|
|||||||
if (damageble != null)
|
if (damageble != null)
|
||||||
{
|
{
|
||||||
DamageInfo info = new DamageInfo();
|
DamageInfo info = new DamageInfo();
|
||||||
|
if(poseDetector.IsPosing)
|
||||||
|
{
|
||||||
|
info.amount = (speed * damageMultiplier) * 2f;
|
||||||
|
info.isPoseBonus = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
info.amount = speed * damageMultiplier;
|
info.amount = speed * damageMultiplier;
|
||||||
|
info.isPoseBonus = false;
|
||||||
|
}
|
||||||
info.hitPosition = other.transform.position;
|
info.hitPosition = other.transform.position;
|
||||||
info.punchDirection = velocity.normalized; //パンチの進む向き
|
info.punchDirection = velocity.normalized; //パンチの進む向き
|
||||||
info.isPoseBonus = false;
|
|
||||||
damageble.TakeDamage(info);
|
damageble.TakeDamage(info);
|
||||||
Debug.Log("パンチ成功 ダメージ: {damage:F1}");
|
Debug.Log("パンチ成功 ダメージ: {damage:F1}");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user