77 lines
1.8 KiB
C#
77 lines
1.8 KiB
C#
using UnityEngine;
|
|
using Oculus.Interaction;
|
|
|
|
public class MapPlacementCubeMovement : MonoBehaviour
|
|
{
|
|
public float moveSpeed = 5f;
|
|
public InteractableUnityEventWrapper interactable;
|
|
|
|
private float fixedY;
|
|
private float fixedX;
|
|
private float fixedZ;
|
|
private bool isGrabbed = false;
|
|
|
|
void Start()
|
|
{
|
|
fixedY = transform.position.y;
|
|
fixedX = transform.position.x;
|
|
fixedZ = transform.position.z;
|
|
|
|
if (interactable != null)
|
|
{
|
|
interactable.WhenSelect.AddListener(OnGrab);
|
|
interactable.WhenUnselect.AddListener(OnRelease);
|
|
}
|
|
else
|
|
{
|
|
Debug.LogWarning("InteractableUnityEventWrapper not assigned on " + gameObject.name);
|
|
}
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if (!isGrabbed)
|
|
{
|
|
transform.position = new Vector3(fixedX, fixedY, fixedZ);
|
|
}
|
|
else
|
|
{
|
|
float h = Input.GetAxis("Horizontal");
|
|
float v = Input.GetAxis("Vertical");
|
|
|
|
Vector3 direction = new Vector3(h, 0, v).normalized;
|
|
transform.position += direction * moveSpeed * Time.deltaTime;
|
|
|
|
Vector3 pos = transform.position;
|
|
transform.position = new Vector3(pos.x, fixedY, pos.z);
|
|
|
|
fixedX = pos.x;
|
|
fixedZ = pos.z;
|
|
}
|
|
|
|
transform.rotation = new Quaternion(0, 0, 0, 0);
|
|
}
|
|
|
|
private void OnGrab()
|
|
{
|
|
isGrabbed = true;
|
|
}
|
|
|
|
private void OnRelease()
|
|
{
|
|
Vector3 pos = transform.position;
|
|
fixedX = pos.x;
|
|
fixedZ = pos.z;
|
|
isGrabbed = false;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (interactable != null)
|
|
{
|
|
interactable.WhenSelect.RemoveListener(OnGrab);
|
|
interactable.WhenUnselect.RemoveListener(OnRelease);
|
|
}
|
|
}
|
|
}
|