レイの活用その3(オブジェクトを掴む)

オブジェクトを掴む
using UnityEngine;
public class RayController : MonoBehaviour
{
public Transform anchor;
private float maxDistance = 100;
private InputSystem_Actions isa;
private LineRenderer line;
public GameObject effectPrefab;
void Start()
{
isa = new InputSystem_Actions();
isa.Enable();
line = GetComponent<LineRenderer>();
}
void Update()
{
RaycastHit hit;
Ray ray = new Ray(anchor.position, anchor.forward);
line.SetPosition(0, ray.origin);
if (Physics.Raycast(ray, out hit, maxDistance))
{
line.SetPosition(1, hit.point);
GameObject target = hit.collider.gameObject;
// ★追加(掴む)
if (target.CompareTag("Catch"))
{
if (isa.Player.Attack.IsPressed())
{
target.transform.parent = anchor.transform;
target.GetComponent<Rigidbody>().isKinematic = true;
}
else if (isa.Player.Attack.WasReleasedThisFrame())
{
target.transform.parent = null;
target.GetComponent<Rigidbody>().isKinematic = false;
target.transform.rotation = Quaternion.Euler(0, 0, 0);
}
}
if (isa.Player.Attack.triggered)
{
if (target.CompareTag("Burst"))
{
Destroy(target.gameObject);
GameObject effect = Instantiate(effectPrefab, target.transform.position, Quaternion.identity);
Destroy(effect, 0.75f);
}
if (target.CompareTag("Push"))
{
if (hit.rigidbody)
{
hit.rigidbody.AddForce(-hit.normal * 1000);
}
}
}
}
else
{
line.SetPosition(1, ray.origin + (ray.direction * maxDistance));
}
}
void OnDisable()
{
isa.Disable();
}
}


オブジェクトを掴む
using UnityEngine;
public class RayController : MonoBehaviour
{
public Transform anchor;
private float maxDistance = 100;
private InputSystem_Actions isa;
private LineRenderer line;
public GameObject effectPrefab;
void Start()
{
isa = new InputSystem_Actions();
isa.Enable();
line = GetComponent<LineRenderer>();
}
void Update()
{
RaycastHit hit;
Ray ray = new Ray(anchor.position, anchor.forward);
line.SetPosition(0, ray.origin);
if (Physics.Raycast(ray, out hit, maxDistance))
{
line.SetPosition(1, hit.point);
GameObject target = hit.collider.gameObject;
// ★追加(掴む)
if (target.CompareTag("Catch"))
{
if (isa.Player.Attack.IsPressed())
{
target.transform.parent = anchor.transform;
target.GetComponent<Rigidbody>().isKinematic = true;
}
else if (isa.Player.Attack.WasReleasedThisFrame())
{
target.transform.parent = null;
target.GetComponent<Rigidbody>().isKinematic = false;
target.transform.rotation = Quaternion.Euler(0, 0, 0);
}
}
if (isa.Player.Attack.triggered)
{
if (target.CompareTag("Burst"))
{
Destroy(target.gameObject);
GameObject effect = Instantiate(effectPrefab, target.transform.position, Quaternion.identity);
Destroy(effect, 0.75f);
}
if (target.CompareTag("Push"))
{
if (hit.rigidbody)
{
hit.rigidbody.AddForce(-hit.normal * 1000);
}
}
}
}
else
{
line.SetPosition(1, ray.origin + (ray.direction * maxDistance));
}
}
void OnDisable()
{
isa.Disable();
}
}

レイの活用その3(オブジェクトを掴む)