fix: update logic move on ground.

feat: add btn jump.
This commit is contained in:
Tungdv
2025-12-17 10:40:29 +07:00
parent df792f0560
commit 97bf433381
7 changed files with 366 additions and 51 deletions
@@ -0,0 +1,272 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &6426564401230013186
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3325367652782365102}
- component: {fileID: 6868997766477093256}
- component: {fileID: 2867419621240194058}
m_Layer: 5
m_Name: Text (TMP)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3325367652782365102
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6426564401230013186}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 266017875005995358}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0.9228058, y: 0.69200134}
m_SizeDelta: {x: -78.8826, y: -78.8826}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &6868997766477093256
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6426564401230013186}
m_CullTransparentMesh: 1
--- !u!114 &2867419621240194058
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6426564401230013186}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: JUMP
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4281479730
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 44.7
m_fontSizeBase: 24
m_fontWeight: 400
m_enableAutoSizing: 1
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &6792439420010771896
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 266017875005995358}
- component: {fileID: 5557092053757495849}
- component: {fileID: 3695308113943472152}
- component: {fileID: 1194531703109065144}
- component: {fileID: 4432331937269434665}
m_Layer: 5
m_Name: JumpBtn
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &266017875005995358
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6792439420010771896}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3325367652782365102}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: -61, y: 46}
m_SizeDelta: {x: 200, y: 200}
m_Pivot: {x: 1, y: 0}
--- !u!222 &5557092053757495849
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6792439420010771896}
m_CullTransparentMesh: 1
--- !u!114 &3695308113943472152
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6792439420010771896}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &1194531703109065144
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6792439420010771896}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 3695308113943472152}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!114 &4432331937269434665
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6792439420010771896}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a6149141837cadc4baae427c4864833e, type: 3}
m_Name:
m_EditorClassIdentifier:
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 0104938c092195b40ab7f3b6e5bf342e
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -19,27 +19,7 @@ namespace BrewMonster
}
if (Input.GetKeyDown(KeyCode.Space))
{
//if (bInAutoMode) return;
if (IsJumpInWater() || IsFlying())
return;
if (IsUnderWater())
{
if (!CanTakeOffWater())
return;
else if (_JumpTime <= 0)
{
_JumpTime = Time.realtimeSinceStartup;
return;
}
else if ((Time.realtimeSinceStartup - _JumpTime) < 1f) // logic in c++, _JumpTime is milisecond
return;
else
_JumpTime = -1f;
}
m_GndInfo.bOnGround = GroundCheck(out lastGroundHit);
OnMsgHstJump();
OnClickBtnJump();
}
}
@@ -208,5 +188,29 @@ namespace BrewMonster
PlayAction((int)PLAYER_ACTION_TYPE.ACT_JUMP_LOOP, false, 0, true);
}
public void OnClickBtnJump()
{
//if (bInAutoMode) return;
if (IsJumpInWater() || IsFlying())
return;
if (IsUnderWater())
{
if (!CanTakeOffWater())
return;
else if (_JumpTime <= 0)
{
_JumpTime = Time.realtimeSinceStartup;
return;
}
else if ((Time.realtimeSinceStartup - _JumpTime) < 1f) // logic in c++, _JumpTime is milisecond
return;
else
_JumpTime = -1f;
}
m_GndInfo.bOnGround = GroundCheck(out lastGroundHit);
OnMsgHstJump();
}
}
}
+29 -28
View File
@@ -124,7 +124,7 @@ namespace BrewMonster
if ((pEnvTrc.dwCheckFlag & CDR_EVN.CDR_TERRAIN) == CDR_EVN.CDR_TERRAIN)
{
float fFractionTerrain = 0f;
dir = vDelta;
dir = vDelta;
if (Physics.Raycast(vTerStart, dir.normalized, out RaycastHit hit, vDelta.magnitude, 1<<6))
{
fFractionTerrain = (hit.distance) / vDelta.magnitude;
@@ -264,7 +264,6 @@ namespace BrewMonster
//bool hasHit = CollideWithEnv_BoxCast(vStart, vDelta, vExt, mask,
// out RaycastHit hit, out float fFraction, out Vector3 hitNormal, out bool bStartSolid);
Vector3 posFoot = vStart - Vector3.up * vExt.y;
if (Physics.Raycast(vStart, (vStart + Vector3.down).normalized, out RaycastHit hit, vExt.y, mask))
{
if (hit.point.y > posFoot.y)
@@ -272,22 +271,24 @@ namespace BrewMonster
posFoot.y = hit.point.y;
}
}
//bool bClear = !Physics.Raycast(posFoot, (posFoot + vDelta).normalized, out hit, fDeltaDist, mask);
trcInfo.vStart = CDRInfo.vCenter;
trcInfo.vDelta = EC_Utility.ToA3DVECTOR3(vDelta);
trcInfo.vTerStart = EC_Utility.ToA3DVECTOR3(posFoot);
//trcInfo.vTerStart.y -= vExt.y; //foot
bool bClear = !CollideWithEnv(ref trcInfo);
bool bClear = !Physics.Raycast(posFoot, (posFoot + vDelta).normalized, out hit, fDeltaDist, mask);
//trcInfo.vStart = CDRInfo.vCenter;
//trcInfo.vDelta = EC_Utility.ToA3DVECTOR3(vDelta);
//trcInfo.vTerStart = EC_Utility.ToA3DVECTOR3(posFoot);
////trcInfo.vTerStart.y -= vExt.y; //foot
//bool bClear = !CollideWithEnv(ref trcInfo);
nTry++;
if (bClear)
{
Debug.DrawLine(posFoot, posFoot + vDelta, Color.yellow, 10f);
//Debug.DrawLine(posFoot, posFoot + vDelta, Color.yellow, 10f);
vFinalPos = vStart + vDelta;
CDRInfo.fMoveDist += fDeltaDist;
break;
}
//vStart = hit.point + Vector3.up * vExt.y;
vStart = vDelta * trcInfo.fFraction + Vector3.up * vExt.y;
vStart = hit.point + Vector3.up * vExt.y;
//vStart += vDelta * trcInfo.fFraction + Vector3.up * vExt.y;
vFinalPos = vStart;
@@ -297,32 +298,32 @@ namespace BrewMonster
//float skin = 0.01f;
posFoot = vStart - Vector3.up * vExt.y + Vector3.up * CDRInfo.fStepHeight;
Vector3 vStartUp = new Vector3(0f, CDRInfo.fStepHeight, 0f);
//bPull = !Physics.Raycast(posFoot, (Vector3.up).normalized, out hit, CDRInfo.fStepHeight, mask);
bPull = !Physics.Raycast(posFoot, (Vector3.up).normalized, out hit, CDRInfo.fStepHeight, mask);
env_trace_t tmpInfo = new env_trace_t();
tmpInfo.vStart = EC_Utility.ToA3DVECTOR3(vStart);
tmpInfo.vDelta = new A3DVECTOR3(0.0f, CDRInfo.fStepHeight, 0.0f);
tmpInfo.vExt = CDRInfo.vExtent;
//@note : need check terrain?? By Kuiwu[8/10/2005]
tmpInfo.dwCheckFlag = CDR_EVN.CDR_BRUSH | CDR_EVN.CDR_TERRAIN;
tmpInfo.vTerStart = EC_Utility.ToA3DVECTOR3(posFoot);
//env_trace_t tmpInfo = new env_trace_t();
//tmpInfo.vStart = EC_Utility.ToA3DVECTOR3(vStart);
//tmpInfo.vDelta = new A3DVECTOR3(0.0f, CDRInfo.fStepHeight, 0.0f);
//tmpInfo.vExt = CDRInfo.vExtent;
////@note : need check terrain?? By Kuiwu[8/10/2005]
//tmpInfo.dwCheckFlag = CDR_EVN.CDR_BRUSH | CDR_EVN.CDR_TERRAIN;
//tmpInfo.vTerStart = EC_Utility.ToA3DVECTOR3(posFoot);
//bPull = !CollideWithEnv(ref tmpInfo);
bPull = !CollideWithEnv(ref tmpInfo);
if (bPull)
{
vStart += Vector3.up * CDRInfo.fStepHeight;
posFoot = vStart - Vector3.up * vExt.y;
//bool bMove = !Physics.Raycast(posFoot, (posFoot + vVelocity).normalized, out hit, fDeltaDist, mask);
bool bMove = !Physics.Raycast(posFoot, (posFoot + vVelocity).normalized, out hit, fDeltaDist, mask);
tmpInfo.vStart = EC_Utility.ToA3DVECTOR3(vStart);
tmpInfo.vDelta = EC_Utility.ToA3DVECTOR3(vDelta);
tmpInfo.vTerStart = EC_Utility.ToA3DVECTOR3(posFoot);
bool bMove = !CollideWithEnv(ref tmpInfo);
//tmpInfo.vStart = EC_Utility.ToA3DVECTOR3(vStart);
//tmpInfo.vDelta = EC_Utility.ToA3DVECTOR3(vDelta);
//tmpInfo.vTerStart = EC_Utility.ToA3DVECTOR3(posFoot);
//bool bMove = !CollideWithEnv(ref tmpInfo);
if (!bMove)
{
//vDelta2 *= frac2;
vFinalPos = vDelta * tmpInfo.fFraction + Vector3.up * vExt.y;
vFinalPos = hit.point + Vector3.up * vExt.y;
//vFinalPos = vStart + vDelta * tmpInfo.fFraction + Vector3.up * vExt.y;
}
else
{
@@ -647,7 +648,7 @@ namespace BrewMonster
vFinalPos = new A3DVECTOR3(vStart);
int nTry = 0;
bool bClear = true;
env_trace_t trcInfo;
env_trace_t trcInfo = new env_trace_t();
trcInfo.bWaterSolid = true;
trcInfo.dwCheckFlag = CDR_EVN.CDR_TERRAIN | CDR_EVN.CDR_BRUSH | CDR_EVN.CDR_WATER;
trcInfo.vExt = vExt;
+29
View File
@@ -0,0 +1,29 @@
using BrewMonster.Network;
using UnityEngine;
using UnityEngine.UI;
namespace BrewMonster.UI
{
public class JumpBtn : MonoBehaviour
{
Button jumpBtn;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
if(jumpBtn == null)
{
jumpBtn = GetComponent<Button>();
jumpBtn.onClick.AddListener(OnClickBtnJump);
}
}
private void OnClickBtnJump()
{
if(EC_Game.GetGameRun()?.GetHostPlayer() != null)
{
EC_Game.GetGameRun()?.GetHostPlayer().OnClickBtnJump();
}
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a6149141837cadc4baae427c4864833e
+2 -2
View File
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5f0e60c802cf01eacf4cb214f00e8b7e04dcae61d68d6ed1ce599f2ee0f09db9
size 200516379
oid sha256:b5fc1f6b6826ba51b15f551fabb6aa4e0e2d1fb53b1d30f22f33341e654470fd
size 200520807