129 lines
3.1 KiB
C#
129 lines
3.1 KiB
C#
|
|
using System.Collections;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
[System.Serializable]
|
||
|
|
public class CharProperties
|
||
|
|
{
|
||
|
|
public float moveSpeed;
|
||
|
|
public float moveSpeedPlus;
|
||
|
|
public float rotSpeed;
|
||
|
|
public float gravity;
|
||
|
|
public float jumpHeight;
|
||
|
|
}
|
||
|
|
|
||
|
|
public class CharProxyMain : MonoBehaviour
|
||
|
|
{
|
||
|
|
float deltaTime;
|
||
|
|
public Camera viewCam;
|
||
|
|
public CharacterController characterController;
|
||
|
|
public bool isHeadShake;
|
||
|
|
public Animation headShakeAnim;
|
||
|
|
string animationRecord;
|
||
|
|
|
||
|
|
public CharProperties charProperties;
|
||
|
|
public Vector3 moveDir;
|
||
|
|
public Vector3 rotDir;
|
||
|
|
float moveSpeedPlusTemp;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
void Start()
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
void Update()
|
||
|
|
{
|
||
|
|
deltaTime = Time.deltaTime;
|
||
|
|
|
||
|
|
//
|
||
|
|
CursuorAction();
|
||
|
|
CameraAction();
|
||
|
|
MoveAction();
|
||
|
|
|
||
|
|
if(Input.GetKeyDown(KeyCode.Escape))
|
||
|
|
{
|
||
|
|
Application.Quit();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public void CursuorAction()
|
||
|
|
{
|
||
|
|
if (Input.GetMouseButton(1))
|
||
|
|
{
|
||
|
|
Cursor.lockState = CursorLockMode.Locked;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
Cursor.lockState = CursorLockMode.None;
|
||
|
|
Cursor.visible = true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public void CameraAction()
|
||
|
|
{
|
||
|
|
if (Input.GetMouseButton(1))
|
||
|
|
{
|
||
|
|
rotDir.x += Input.GetAxis("Mouse X") * charProperties.rotSpeed * deltaTime;
|
||
|
|
rotDir.y -= Input.GetAxis("Mouse Y") * charProperties.rotSpeed * deltaTime;
|
||
|
|
rotDir.y = Mathf.Clamp(rotDir.y, -90, 90);
|
||
|
|
viewCam.transform.localRotation = Quaternion.Euler(new Vector3(rotDir.y, 0, 0));
|
||
|
|
transform.rotation = Quaternion.Euler(new Vector3(0, rotDir.x, 0));
|
||
|
|
}
|
||
|
|
|
||
|
|
if (isHeadShake && (characterController.isGrounded && (moveDir.x != 0 || moveDir.z != 0)))
|
||
|
|
{
|
||
|
|
if (animationRecord != "ANIM_HeadShake")
|
||
|
|
{
|
||
|
|
animationRecord = "ANIM_HeadShake";
|
||
|
|
headShakeAnim.CrossFade(animationRecord, 0.25f);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
animationRecord = "ANIM_HeadShakeEnd";
|
||
|
|
headShakeAnim.CrossFade(animationRecord, 0.25f);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public void MoveAction()
|
||
|
|
{
|
||
|
|
if (Input.GetKey(KeyCode.LeftShift))
|
||
|
|
{
|
||
|
|
moveSpeedPlusTemp = charProperties.moveSpeedPlus;
|
||
|
|
headShakeAnim[animationRecord].speed = charProperties.moveSpeedPlus / 2f;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
moveSpeedPlusTemp = 1;
|
||
|
|
headShakeAnim[animationRecord].speed = 1;
|
||
|
|
}
|
||
|
|
|
||
|
|
//
|
||
|
|
moveDir.x = Input.GetAxis("Horizontal") * charProperties.moveSpeed * moveSpeedPlusTemp;
|
||
|
|
moveDir.z = Input.GetAxis("Vertical") * charProperties.moveSpeed * moveSpeedPlusTemp;
|
||
|
|
|
||
|
|
if (characterController.isGrounded)
|
||
|
|
{
|
||
|
|
if (Input.GetButtonDown("Jump"))
|
||
|
|
{
|
||
|
|
moveDir.y = charProperties.jumpHeight;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
moveDir.y = -1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
moveDir.y -= charProperties.gravity;
|
||
|
|
}
|
||
|
|
|
||
|
|
moveDir = transform.TransformDirection(moveDir);
|
||
|
|
characterController.Move(moveDir * deltaTime);
|
||
|
|
}
|
||
|
|
}
|