Commit cf048ec3 authored by 15박보승's avatar 15박보승 Committed by Merseong

와이어 액션 구현

parent 9552248a
This diff is collapsed.
...@@ -6,6 +6,8 @@ public class CameraController : MonoBehaviour ...@@ -6,6 +6,8 @@ public class CameraController : MonoBehaviour
{ {
public Transform target; public Transform target;
public Vector3 offset;
[SerializeField] [SerializeField]
private float distance = 10.0f; private float distance = 10.0f;
private float currentX = 0.0f; private float currentX = 0.0f;
...@@ -30,8 +32,8 @@ public class CameraController : MonoBehaviour ...@@ -30,8 +32,8 @@ public class CameraController : MonoBehaviour
{ {
Vector3 dir = new Vector3(0, 0, -distance); Vector3 dir = new Vector3(0, 0, -distance);
Quaternion rotation = Quaternion.Euler(currentY, currentX, 0); Quaternion rotation = Quaternion.Euler(currentY, currentX, 0);
transform.position = target.position + rotation * dir; transform.position = offset + target.position + rotation * dir;
target.rotation = Quaternion.Euler(0, currentX, 0); target.rotation = Quaternion.Euler(0, currentX, 0);
transform.LookAt(target.position); transform.LookAt(target.position + offset);
} }
} }
...@@ -20,18 +20,24 @@ public class DistanceJoint3D : MonoBehaviour ...@@ -20,18 +20,24 @@ public class DistanceJoint3D : MonoBehaviour
//distance = Vector3.Distance(rb.position, ConnectedRigidbody.position); //distance = Vector3.Distance(rb.position, ConnectedRigidbody.position);
} }
private void Update()
{
if (distance > 0)
{
distance = Mathf.Max(0, distance - 50 * Time.deltaTime);
}
}
private void FixedUpdate() private void FixedUpdate()
{ {
var connection = rb.position - ConnectedRigidbody.position; var connection = rb.position - ConnectedRigidbody.position;
var distanceDiscrepancy = distance - connection.magnitude; var distanceDiscrepancy = distance - connection.magnitude;
rb.position += distanceDiscrepancy * connection.normalized; //rb.position += distanceDiscrepancy * connection.normalized;
var velocityTarget = connection + rb.velocity; var velocityTarget = connection + rb.velocity;
var projectOnConnect = Vector3.Project(velocityTarget, connection); var projectOnConnect = Vector3.Project(velocityTarget, connection);
rb.velocity = (velocityTarget - projectOnConnect) / (1 + damper * Time.fixedDeltaTime); rb.velocity = (velocityTarget - projectOnConnect + distanceDiscrepancy * connection.normalized) / (1 + damper * Time.fixedDeltaTime);
//rb.velocity = connection.normalized * Physics.gravity.y + Physics.gravity;
} }
} }
...@@ -20,15 +20,16 @@ public class HookBehaviour : MonoBehaviour ...@@ -20,15 +20,16 @@ public class HookBehaviour : MonoBehaviour
private void Update() private void Update()
{ {
Debug.Log(rb.velocity);
lr.SetPosition(0, transform.position); lr.SetPosition(0, transform.position);
lr.SetPosition(1, player.position); lr.SetPosition(1, player.position);
} }
private void OnCollisionEnter(Collision collision) private void OnCollisionEnter(Collision collision)
{ {
Debug.Log(collision.gameObject);
rb.velocity = Vector3.zero; rb.velocity = Vector3.zero;
rb.isKinematic = true; rb.isKinematic = true;
player.GetComponent<PlayerController>().ActiveWire();
} }
public void EnableHook(Vector3 velocity) public void EnableHook(Vector3 velocity)
......
...@@ -6,13 +6,17 @@ using UnityEngine; ...@@ -6,13 +6,17 @@ using UnityEngine;
public class PlayerController : MonoBehaviour public class PlayerController : MonoBehaviour
{ {
public float distance = 10.0f; public float distance = 10.0f;
private CharacterController cc; //private CharacterController cc;
float velocityY = 0.0f; float velocityY = 0.0f;
const float gravity = 9.8f; const float gravity = 9.8f;
public HookBehaviour hook; public HookBehaviour hook;
private Rigidbody rb;
private DistanceJoint3D joint;
private bool isWired;
#if UNITY_EDITOR #if UNITY_EDITOR
private void OnDrawGizmos() private void OnDrawGizmos()
{ {
...@@ -22,8 +26,10 @@ public class PlayerController : MonoBehaviour ...@@ -22,8 +26,10 @@ public class PlayerController : MonoBehaviour
private void Start() private void Start()
{ {
cc = GetComponent<CharacterController>(); //cc = GetComponent<CharacterController>();
Cursor.lockState = CursorLockMode.Locked; Cursor.lockState = CursorLockMode.Locked;
joint = GetComponent<DistanceJoint3D>();
rb = GetComponent<Rigidbody>();
} }
private void Update() private void Update()
{ {
...@@ -40,12 +46,20 @@ public class PlayerController : MonoBehaviour ...@@ -40,12 +46,20 @@ public class PlayerController : MonoBehaviour
ReturnHook(); ReturnHook();
} }
if (!isWired)
{
/*
if (Input.GetButtonDown("Jump") && cc.isGrounded)
velocityY = 5.0f;
if (!cc.isGrounded)
velocityY -= gravity * Time.deltaTime;
cc.Move(horizontal * transform.right + vertical * transform.forward + new Vector3(0, velocityY, 0) * Time.deltaTime);
*/
}
else
{
if (Input.GetButtonDown("Jump") && cc.isGrounded) }
velocityY = 5.0f;
if (!cc.isGrounded)
velocityY -= gravity * Time.deltaTime;
cc.Move(horizontal * transform.right + vertical * transform.forward + new Vector3(0, velocityY, 0) * Time.deltaTime);
} }
private void LateUpdate() private void LateUpdate()
...@@ -55,13 +69,27 @@ public class PlayerController : MonoBehaviour ...@@ -55,13 +69,27 @@ public class PlayerController : MonoBehaviour
private void FireHook() private void FireHook()
{ {
joint.enabled = false;
hook.gameObject.SetActive(true); hook.gameObject.SetActive(true);
hook.transform.position = transform.position; hook.transform.position = transform.position;
hook.EnableHook((transform.position - Camera.main.transform.position) * 50); hook.EnableHook((transform.position - Camera.main.transform.position).normalized * 200);
} }
private void ReturnHook() private void ReturnHook()
{ {
joint.enabled = false;
hook.DisableHook(); hook.DisableHook();
isWired = false;
rb.useGravity = true;
//cc.enabled = true;
}
public void ActiveWire()
{
joint.enabled = true;
joint.distance = Vector3.Distance(transform.position, hook.transform.position);
isWired = true;
rb.useGravity = false;
//cc.enabled = false;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment