mirror of
https://github.com/ApfelTeeSaft/Slender.git
synced 2026-08-27 03:43:28 +00:00
172 lines
3.6 KiB
C#
172 lines
3.6 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
[Serializable]
|
|
[RequireComponent(typeof(CharacterController))]
|
|
public class FirstPersonControl : MonoBehaviour
|
|
{
|
|
public Joystick moveTouchPad;
|
|
|
|
public Joystick rotateTouchPad;
|
|
|
|
public Transform cameraPivot;
|
|
|
|
public float forwardSpeed;
|
|
|
|
public float backwardSpeed;
|
|
|
|
public float sidestepSpeed;
|
|
|
|
public float jumpSpeed;
|
|
|
|
public float inAirMultiplier;
|
|
|
|
public Vector2 rotationSpeed;
|
|
|
|
public float tiltPositiveYAxis;
|
|
|
|
public float tiltNegativeYAxis;
|
|
|
|
public float tiltXAxisMinimum;
|
|
|
|
private Transform thisTransform;
|
|
|
|
private CharacterController character;
|
|
|
|
private Vector3 cameraVelocity;
|
|
|
|
private Vector3 velocity;
|
|
|
|
private bool canJump;
|
|
|
|
public FirstPersonControl()
|
|
{
|
|
forwardSpeed = 4f;
|
|
backwardSpeed = 1f;
|
|
sidestepSpeed = 1f;
|
|
jumpSpeed = 8f;
|
|
inAirMultiplier = 0.25f;
|
|
rotationSpeed = new Vector2(50f, 25f);
|
|
tiltPositiveYAxis = 0.6f;
|
|
tiltNegativeYAxis = 0.4f;
|
|
tiltXAxisMinimum = 0.1f;
|
|
canJump = true;
|
|
}
|
|
|
|
public virtual void Start()
|
|
{
|
|
thisTransform = (Transform)GetComponent(typeof(Transform));
|
|
character = (CharacterController)GetComponent(typeof(CharacterController));
|
|
GameObject gameObject = GameObject.Find("PlayerSpawn");
|
|
if ((bool)gameObject)
|
|
{
|
|
thisTransform.position = gameObject.transform.position;
|
|
}
|
|
}
|
|
|
|
public virtual void OnEndGame()
|
|
{
|
|
moveTouchPad.Disable();
|
|
if ((bool)rotateTouchPad)
|
|
{
|
|
rotateTouchPad.Disable();
|
|
}
|
|
enabled = false;
|
|
}
|
|
|
|
public virtual void Update()
|
|
{
|
|
Vector3 motion = thisTransform.TransformDirection(new Vector3(moveTouchPad.position.x, 0f, moveTouchPad.position.y));
|
|
motion.y = 0f;
|
|
motion.Normalize();
|
|
Vector2 vector = new Vector2(Mathf.Abs(moveTouchPad.position.x), Mathf.Abs(moveTouchPad.position.y));
|
|
if (!(vector.y <= vector.x))
|
|
{
|
|
if (!(moveTouchPad.position.y <= 0f))
|
|
{
|
|
motion *= forwardSpeed * vector.y;
|
|
}
|
|
else
|
|
{
|
|
motion *= backwardSpeed * vector.y;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
motion *= sidestepSpeed * vector.x;
|
|
}
|
|
if (character.isGrounded)
|
|
{
|
|
bool flag = false;
|
|
Joystick joystick = null;
|
|
joystick = ((!rotateTouchPad) ? moveTouchPad : rotateTouchPad);
|
|
if (!joystick.IsFingerDown())
|
|
{
|
|
canJump = true;
|
|
}
|
|
if (canJump && joystick.tapCount >= 2)
|
|
{
|
|
flag = true;
|
|
canJump = false;
|
|
}
|
|
if (flag)
|
|
{
|
|
velocity = character.velocity;
|
|
velocity.y = jumpSpeed;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
velocity.y += Physics.gravity.y * Time.deltaTime;
|
|
motion.x *= inAirMultiplier;
|
|
motion.z *= inAirMultiplier;
|
|
}
|
|
motion += velocity;
|
|
motion += Physics.gravity;
|
|
motion *= Time.deltaTime;
|
|
character.Move(motion);
|
|
if (character.isGrounded)
|
|
{
|
|
velocity = Vector3.zero;
|
|
}
|
|
if (!character.isGrounded)
|
|
{
|
|
return;
|
|
}
|
|
Vector2 vector2 = Vector2.zero;
|
|
if ((bool)rotateTouchPad)
|
|
{
|
|
vector2 = rotateTouchPad.position;
|
|
}
|
|
else
|
|
{
|
|
Vector3 acceleration = Input.acceleration;
|
|
float num = Mathf.Abs(acceleration.x);
|
|
if (!(acceleration.z >= 0f) && !(acceleration.x >= 0f))
|
|
{
|
|
if (!(num < tiltPositiveYAxis))
|
|
{
|
|
vector2.y = (num - tiltPositiveYAxis) / (1f - tiltPositiveYAxis);
|
|
}
|
|
else if (!(num > tiltNegativeYAxis))
|
|
{
|
|
vector2.y = (0f - (tiltNegativeYAxis - num)) / tiltNegativeYAxis;
|
|
}
|
|
}
|
|
if (!(Mathf.Abs(acceleration.y) < tiltXAxisMinimum))
|
|
{
|
|
vector2.x = (0f - (acceleration.y - tiltXAxisMinimum)) / (1f - tiltXAxisMinimum);
|
|
}
|
|
}
|
|
vector2.x *= rotationSpeed.x;
|
|
vector2.y *= rotationSpeed.y;
|
|
vector2 *= Time.deltaTime;
|
|
thisTransform.Rotate(0f, vector2.x, 0f, Space.World);
|
|
cameraPivot.Rotate(0f - vector2.y, 0f, 0f);
|
|
}
|
|
|
|
public virtual void Main()
|
|
{
|
|
}
|
|
}
|