Implemented arm grabby thing

This commit is contained in:
Jan Groß
2021-06-13 02:19:17 +02:00
parent a2eff81009
commit d5b997e819
18 changed files with 4288 additions and 35 deletions

View File

@@ -0,0 +1,128 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Grapparoni : MonoBehaviour
{
public float radius;
public GameObject grabSpot;
public GameObject grabbedObject;
private LineRenderer lineRenderer;
// Start is called before the first frame update
void Start()
{
lineRenderer = GetComponent<LineRenderer>();
lineRenderer.enabled = false;
}
void DrawLineToClosest()
{
Collider[] items = Physics.OverlapSphere(grabSpot.transform.position, radius);
if (items.Length < 1) { lineRenderer.enabled = false; return; }
GameObject closest = items[0].gameObject;
foreach (Collider item in items)
{
Rigidbody rb = item.gameObject.GetComponent<Rigidbody>();
if (rb)
{
float dist = Vector3.Distance(item.transform.position, transform.position);
if (dist < Vector3.Distance(closest.transform.position, transform.position))
{
closest = item.gameObject;
}
}
}
Rigidbody closestRb = closest.transform.GetComponent<Rigidbody>();
if (closestRb)
{
lineRenderer.enabled = true;
lineRenderer.SetPosition(0, grabSpot.transform.position);
lineRenderer.SetPosition(1, closest.transform.position);
} else
{
lineRenderer.enabled = false;
}
}
// Update is called once per frame
void Update()
{
Vector3 directionVector = transform.parent.position - transform.parent.parent.position;
transform.rotation = transform.parent.parent.rotation;//Quaternion.LookRotation(directionVector);
DrawLineToClosest();
}
public void GrabClosest()
{
if (grabbedObject) //We already have stuff, let go!
{
grabbedObject.transform.SetParent(null);
grabbedObject.GetComponent<Rigidbody>().isKinematic = false;
grabbedObject = null;
return;
}
Collider[] items = Physics.OverlapSphere(grabSpot.transform.position, radius);
if (items.Length < 1) { return; }
GameObject closest = items[0].gameObject;
foreach (Collider item in items)
{
Rigidbody rb = item.gameObject.GetComponent<Rigidbody>();
if(rb)
{
float dist = Vector3.Distance(item.transform.position, transform.position);
if (dist < Vector3.Distance(closest.transform.position, transform.position)) {
closest = item.gameObject;
}
}
}
Rigidbody closestRb = closest.transform.GetComponent<Rigidbody>();
if (closestRb)
{
closest.transform.SetParent(gameObject.transform);
closest.transform.position = grabSpot.transform.position;
closestRb.isKinematic = true;
grabbedObject = closest.gameObject;
}
}
private void OnDrawGizmos()
{
Gizmos.DrawWireSphere(grabSpot.transform.position, radius);
Collider[] items = Physics.OverlapSphere(grabSpot.transform.position, radius);
if(items.Length < 1) { return; }
GameObject closest = items[0].gameObject;
foreach (Collider item in items)
{
Rigidbody rb = item.gameObject.GetComponent<Rigidbody>();
if (rb)
{
Debug.DrawRay(grabSpot.transform.position, (item.transform.position - grabSpot.transform.position), Color.gray);
float dist = Vector3.Distance(item.transform.position, transform.position);
if (dist < Vector3.Distance(closest.transform.position, transform.position))
{
closest = item.gameObject;
}
} else
{
Debug.DrawRay(grabSpot.transform.position, (item.transform.position - grabSpot.transform.position), Color.red);
}
}
Debug.DrawRay(grabSpot.transform.position, (closest.transform.position - grabSpot.transform.position), Color.green);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e87edfb1d767ebb4c8fbb533f8a6afae
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -10,6 +10,7 @@ public class RobotArmController : MonoBehaviour
public bool isInUse = false;
public GameManager gameManager;
public Grapparoni grabber;
public CinemachineVirtualCamera localCamera;
public GameObject target;
public float armSpeed = 1;
@@ -22,6 +23,7 @@ public class RobotArmController : MonoBehaviour
void Start()
{
gameManager = GameObject.Find("GameManager").GetComponent<GameManager>();
target.GetComponent<Animator>().speed = 1f;
}
private void Update()
@@ -50,6 +52,12 @@ public class RobotArmController : MonoBehaviour
gameManager.previousNode.SetActiveNode();
}
//return to network view with x
if (Keyboard.current.spaceKey.wasPressedThisFrame)
{
grabber.GrabClosest();
}
//Hoch/Runter
if (Keyboard.current.ctrlKey.isPressed && target.transform.position.y > transform.position.y)
{