Player bug fix

This commit is contained in:
brausjonas
2022-05-13 14:52:26 +02:00
parent 1fe20dbb5d
commit 5d729f584a
3 changed files with 184 additions and 48 deletions
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SwUserDefinedSpecifications">
<option name="specTypeByUrl">
<map />
</option>
</component>
</project>
+4 -36
View File
@@ -599,8 +599,6 @@ GameObject:
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 1789911868} - component: {fileID: 1789911868}
- component: {fileID: 1789911869}
- component: {fileID: 1789911867}
- component: {fileID: 1789911870} - component: {fileID: 1789911870}
m_Layer: 0 m_Layer: 0
m_Name: Player m_Name: Player
@@ -609,22 +607,6 @@ GameObject:
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!54 &1789911867
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1789911866}
serializedVersion: 2
m_Mass: 1
m_Drag: 0
m_AngularDrag: 0.05
m_UseGravity: 1
m_IsKinematic: 0
m_Interpolate: 0
m_Constraints: 112
m_CollisionDetection: 0
--- !u!4 &1789911868 --- !u!4 &1789911868
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -633,27 +615,13 @@ Transform:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1789911866} m_GameObject: {fileID: 1789911866}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 150, y: 50, z: 150} m_LocalPosition: {x: 150, y: 50.039, z: 150}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 1934992309} - {fileID: 1934992309}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 1 m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!136 &1789911869
CapsuleCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1789911866}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
m_Radius: 0.4
m_Height: 1.9
m_Direction: 1
m_Center: {x: 0, y: 0, z: 0}
--- !u!114 &1789911870 --- !u!114 &1789911870
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -667,8 +635,8 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
mouseSpeed: 4 mouseSpeed: 4
moveSpeed: 5 walkSpeed: 5
jumpForce: 5 jumpForce: 8
world: {fileID: 948138834} world: {fileID: 948138834}
--- !u!1 &1934992308 --- !u!1 &1934992308
GameObject: GameObject:
@@ -696,7 +664,7 @@ Transform:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1934992308} m_GameObject: {fileID: 1934992308}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.585, z: 0} m_LocalPosition: {x: 0, y: 1.484, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 1789911868} m_Father: {fileID: 1789911868}
+172 -12
View File
@@ -7,11 +7,23 @@ public class Player : MonoBehaviour
{ {
//game //game
[SerializeField] private float mouseSpeed; [SerializeField] private float mouseSpeed;
[SerializeField] private float moveSpeed; [SerializeField] private float walkSpeed = 5;
[SerializeField] private float jumpForce; [SerializeField] private float jumpForce;
[SerializeField] private World world; [SerializeField] private World world;
private float playerWidth = 0.15f;
private float playerOffsetWidth = 0.1f;
private float horizontal;
private float vertical;
private float mouseX;
private float mouseY;
private Vector3 velocity = new Vector3(0, 0, 0);
private float rotX = 0;
private float verticalMomentum = 0;
private bool jumpRequest;
private bool isGrounded = true;
private float gravity = -20f;
private Camera camera = null; private Camera camera = null;
private Rigidbody rigidbody;
private Vector3 lastPosition = new Vector3(); private Vector3 lastPosition = new Vector3();
//network //network
@@ -19,7 +31,6 @@ public class Player : MonoBehaviour
private void Start() private void Start()
{ {
rigidbody = GetComponent<Rigidbody>();
client = world.GetClient(); client = world.GetClient();
Cursor.lockState = CursorLockMode.Locked; Cursor.lockState = CursorLockMode.Locked;
camera = GetComponentInChildren<Camera>(); camera = GetComponentInChildren<Camera>();
@@ -27,10 +38,22 @@ public class Player : MonoBehaviour
world.GetHeight((byte)transform.position.x, (byte)transform.position.z) + 2, (byte)transform.position.z); world.GetHeight((byte)transform.position.x, (byte)transform.position.z) + 2, (byte)transform.position.z);
} }
private void Jump()
{
verticalMomentum = jumpForce;
isGrounded = false;
jumpRequest = false;
}
private void FixedUpdate() private void FixedUpdate()
{ {
transform.Translate(Input.GetAxisRaw("Horizontal") * moveSpeed * Time.fixedDeltaTime, 0, if (jumpRequest)
Input.GetAxisRaw("Vertical") * moveSpeed * Time.fixedDeltaTime); {
Jump();
}
CalculateVelocity();
transform.Translate(velocity, Space.World);
Vector3 position = transform.position; Vector3 position = transform.position;
@@ -44,17 +67,23 @@ public class Player : MonoBehaviour
private void Update() private void Update()
{ {
transform.Rotate(0, Input.GetAxis("Mouse X") * mouseSpeed, 0); horizontal = Input.GetAxisRaw("Horizontal");
camera.transform.Rotate(-Input.GetAxis("Mouse Y") * mouseSpeed, 0, 0); vertical = Input.GetAxisRaw("Vertical");
mouseX = Input.GetAxis("Mouse X");
mouseY = Input.GetAxis("Mouse Y");
if (Input.GetKeyDown(KeyCode.Space)) if (isGrounded && Input.GetButton("Jump"))
{ {
if (Physics.Raycast(transform.position, Vector3.down, 0.96f)) jumpRequest = true;
{
rigidbody.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
} }
rotX -= mouseY * 1.4f;
rotX = Mathf.Clamp(rotX, -90, 90);
camera.transform.localRotation = Quaternion.Euler(rotX, 0, 0);
transform.Rotate(0, mouseX, 0);
if (Input.GetMouseButtonDown(0)) if (Input.GetMouseButtonDown(0))
{ {
if (Physics.Raycast(camera.transform.position, camera.transform.forward, out RaycastHit hit)) if (Physics.Raycast(camera.transform.position, camera.transform.forward, out RaycastHit hit))
@@ -73,4 +102,135 @@ public class Player : MonoBehaviour
} }
} }
} }
private void CalculateVelocity()
{
if (verticalMomentum > gravity)
{
verticalMomentum += Time.fixedDeltaTime * gravity;
}
velocity = ((transform.forward * vertical) + (transform.right * horizontal)) * Time.fixedDeltaTime * walkSpeed;
velocity += Vector3.up * verticalMomentum * Time.fixedDeltaTime;
if ((velocity.z > 0 && front) || (velocity.z < 0 && back))
{
velocity.z = 0;
}
if ((velocity.x > 0 && right) || (velocity.x < 0 && left))
{
velocity.x = 0;
}
if (velocity.y < 0)
{
velocity.y = CheckDownSpeed(velocity.y);
}
else if (velocity.y > 0)
{
velocity.y = CheckUpSpeed(velocity.y);
}
else
{
velocity.y = 0;
}
}
private float CheckDownSpeed(float downSpeed)
{
if (
world.CheckBlock(new Vector3(transform.position.x - playerWidth, transform.position.y + downSpeed, transform.position.z - playerWidth)) ||
world.CheckBlock(new Vector3(transform.position.x + playerWidth, transform.position.y + downSpeed, transform.position.z - playerWidth)) ||
world.CheckBlock(new Vector3(transform.position.x + playerWidth, transform.position.y + downSpeed, transform.position.z + playerWidth)) ||
world.CheckBlock(new Vector3(transform.position.x - playerWidth, transform.position.y + downSpeed, transform.position.z + playerWidth))
)
{
isGrounded = true;
return 0;
}
isGrounded = false;
return downSpeed;
}
private float CheckUpSpeed(float upSpeed)
{
if (
world.CheckBlock(new Vector3(transform.position.x - playerWidth, transform.position.y + upSpeed + 2f, transform.position.z - playerWidth)) ||
world.CheckBlock(new Vector3(transform.position.x + playerWidth, transform.position.y + upSpeed + 2f, transform.position.z - playerWidth)) ||
world.CheckBlock(new Vector3(transform.position.x + playerWidth, transform.position.y + upSpeed + 2f, transform.position.z + playerWidth)) ||
world.CheckBlock(new Vector3(transform.position.x - playerWidth, transform.position.y + upSpeed + 2f, transform.position.z + playerWidth))
)
{
return 0;
}
return upSpeed;
}
public bool front
{
get
{
if (
world.CheckBlock(new Vector3(transform.position.x, transform.position.y, transform.position.z + playerWidth + playerOffsetWidth)) ||
world.CheckBlock(new Vector3(transform.position.x, transform.position.y + 1f, transform.position.z + playerWidth + playerOffsetWidth))
)
{
return true;
}
return false;
}
}
public bool back
{
get
{
if (
world.CheckBlock(new Vector3(transform.position.x, transform.position.y, transform.position.z - playerWidth - playerOffsetWidth)) ||
world.CheckBlock(new Vector3(transform.position.x, transform.position.y + 1f, transform.position.z - playerWidth - playerOffsetWidth))
)
{
return true;
}
return false;
}
}
public bool left
{
get
{
if (
world.CheckBlock(new Vector3(transform.position.x - playerWidth - playerOffsetWidth, transform.position.y, transform.position.z )) ||
world.CheckBlock(new Vector3(transform.position.x - playerWidth - playerOffsetWidth, transform.position.y + 1f, transform.position.z))
)
{
return true;
}
return false;
}
}
public bool right
{
get
{
if (
world.CheckBlock(new Vector3(transform.position.x + playerWidth + playerOffsetWidth, transform.position.y, transform.position.z)) ||
world.CheckBlock(new Vector3(transform.position.x + playerWidth + playerOffsetWidth, transform.position.y + 1f, transform.position.z))
)
{
return true;
}
return false;
}
}
} }