summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ROUNDS/LevelMapper.cs1
-rw-r--r--ROUNDS/_Player/CharacterData.cs11
-rw-r--r--ROUNDS/_Player/Gravity.cs20
-rw-r--r--ROUNDS/_Player/LegRaycasters.cs11
-rw-r--r--ROUNDS/_Player/PlayerVelocity.cs2
5 files changed, 34 insertions, 11 deletions
diff --git a/ROUNDS/LevelMapper.cs b/ROUNDS/LevelMapper.cs
index 63e1e06..9d0f13e 100644
--- a/ROUNDS/LevelMapper.cs
+++ b/ROUNDS/LevelMapper.cs
@@ -1,6 +1,7 @@
using System;
using UnityEngine;
+// 没用
public class LevelMapper : MonoBehaviour
{
private CharacterData data;
diff --git a/ROUNDS/_Player/CharacterData.cs b/ROUNDS/_Player/CharacterData.cs
index 561a49b..b52663c 100644
--- a/ROUNDS/_Player/CharacterData.cs
+++ b/ROUNDS/_Player/CharacterData.cs
@@ -54,6 +54,8 @@ public class CharacterData : MonoBehaviour
private bool wasWallGrabLastFrame;
+ // 从离地开始算的时间(不是着地),着地状态下一直为0
+ // 关联到gravity
public float sinceGrounded;
// 经过测试,isGrounded可以指示是否着地
@@ -257,7 +259,8 @@ public class CharacterData : MonoBehaviour
}
// 比较重要,但是把isGrounded=true注释掉不影响在地面的移动,会影响腿的渲染
- // 有且只有这个方法设置了 isGrounded = true
+ // 有且只有这个方法设置了 isGrounded = true, groundPos
+ // LegRaycaster
public void TouchGround(Vector3 pos, Vector3 groundNormal, Rigidbody2D groundRig, Transform groundTransform = null)
{
//this.gameObject.name = "Player_" + pos.ToString() + "_" + (groundTransform != null ? groundTransform.gameObject.name : "null");
@@ -266,10 +269,12 @@ public class CharacterData : MonoBehaviour
{
currentJumps = jumps;
}
+
if (TouchGroundAction != null)
{
TouchGroundAction(sinceGrounded, pos, groundNormal, groundTransform);
}
+
if (groundRig == null)
{
standOnRig = null;
@@ -278,6 +283,7 @@ public class CharacterData : MonoBehaviour
{
standOnRig = groundRig;
}
+
if (playerVel.velocity.y < -20f && !isGrounded)
{
for (int i = 0; i < landParts.Length; i++)
@@ -289,10 +295,11 @@ public class CharacterData : MonoBehaviour
}
GamefeelManager.instance.AddGameFeel(Vector2.down * Mathf.Clamp((sinceGrounded - 0.5f) * 1f, 0f, 4f));
}
+
groundPos = pos;
wasGroundedLastFrame = true;
isGrounded = true;
- sinceGrounded = 0f;
+ sinceGrounded = 0f; // 很重要,如果注释掉会让角色无阻碍穿过地面
}
public void TouchWall(Vector2 normal, Vector3 pos)
diff --git a/ROUNDS/_Player/Gravity.cs b/ROUNDS/_Player/Gravity.cs
index 0c8b459..5e51441 100644
--- a/ROUNDS/_Player/Gravity.cs
+++ b/ROUNDS/_Player/Gravity.cs
@@ -19,19 +19,29 @@ public class Gravity : MonoBehaviour
private void FixedUpdate()
{
- float num = data.sinceGrounded;
- if (data.sinceWallGrab < num)
+ float num = data.sinceGrounded;// 从离地开始算的时间(不是着地),着地状态下一直为0
+ if (data.sinceWallGrab < num)
{
num = data.sinceWallGrab;
}
+
+ Vector3 gravity = Vector3.zero;
+
// 施加向下的重力
if (num > 0f)
{
- rig.AddForce(Vector3.down * TimeHandler.timeScale * Mathf.Pow(num, exponent) * gravityForce * rig.mass, ForceMode2D.Force);
+ gravity = Vector3.down * TimeHandler.timeScale * Mathf.Pow(num, exponent) * gravityForce * rig.mass;
+ rig.AddForce(gravity, ForceMode2D.Force);
}
else
{
- rig.AddForce(Vector3.down * TimeHandler.timeScale * num * gravityForce * rig.mass, ForceMode2D.Force);
+ gravity = Vector3.down * TimeHandler.timeScale * num * gravityForce * rig.mass;
+ rig.AddForce(gravity, ForceMode2D.Force);
}
- }
+
+ // 着地状态下gravity为0,0,0
+
+ //this.gameObject.name = "Player_" + gravity;
+
+ }
}
diff --git a/ROUNDS/_Player/LegRaycasters.cs b/ROUNDS/_Player/LegRaycasters.cs
index 4426342..fa3066e 100644
--- a/ROUNDS/_Player/LegRaycasters.cs
+++ b/ROUNDS/_Player/LegRaycasters.cs
@@ -35,8 +35,9 @@ public class LegRaycasters : MonoBehaviour
data = GetComponentInParent<CharacterData>();
}
- //! 重要,这个代码会让角色站在地面上,不会陷下去
+ //! 重要,这个代码会让角色站在地面上,不会陷下去(属于模拟跑步时一上一下的附加效果,主要还是要看playercollision的fixedupdate)
// 和PlayerCollision的FixedUpdate代码配合
+ // 关键代码是TouchGround,addforce不关键
private void FixedUpdate()
{
totalStepTime = 0f;
@@ -61,19 +62,23 @@ public class LegRaycasters : MonoBehaviour
}
}
+ // 向上施加一个力,让身体离开地面,高于腿,模拟跑步时一上一下
private void HitGround(Transform leg, RaycastHit2D hit)
{
if (!(data.sinceJump < 0.2f) && !(Vector3.Angle(Vector3.up, hit.normal) > 70f))
{
+ // touch ground 很重要
data.TouchGround(hit.point, hit.normal, hit.rigidbody);
+
+ // 施加向上的力
Vector3 vector = ((Vector3)hit.point - leg.transform.position) / base.transform.root.localScale.x;
if (data.input.direction.x != 0f)
{
vector.y += wobbleCurve.Evaluate(totalStepTime) * base.transform.root.localScale.x;
rig.AddForce(Vector3.up * forceCurve.Evaluate(totalStepTime) * rig.mass);
}
- rig.AddForce(animationCurve.Evaluate(Mathf.Abs(vector.y)) * Vector3.up * rig.mass * force);
- rig.AddForce(animationCurve.Evaluate(Mathf.Abs(vector.y)) * (0f - rig.velocity.y) * Vector2.up * rig.mass * drag);
+ rig.AddForce(animationCurve.Evaluate(Mathf.Abs(vector.y)) * Vector3.up * rig.mass * force);//一个垂直向上的力
+ rig.AddForce(animationCurve.Evaluate(Mathf.Abs(vector.y)) * (0f - rig.velocity.y) * Vector2.up * rig.mass * drag);//一个垂直想让的阻力
}
}
}
diff --git a/ROUNDS/_Player/PlayerVelocity.cs b/ROUNDS/_Player/PlayerVelocity.cs
index 9355a5d..8d07513 100644
--- a/ROUNDS/_Player/PlayerVelocity.cs
+++ b/ROUNDS/_Player/PlayerVelocity.cs
@@ -57,7 +57,7 @@ public class PlayerVelocity : MonoBehaviour
}
// 静止的时候速度为0,0
- this.gameObject.name = "Player_" + bAsign + "_"+ velocity + "_"+ preVel;
+ // this.gameObject.name = "Player_" + data.sinceGrounded + "_"+ bAsign + "_"+ velocity + "_"+ preVel;
}
internal void AddForce(Vector2 force, ForceMode2D forceMode)