- Home /
Question by
AlexThe18709 · Oct 24, 2017 at 09:18 AM ·
raycastinginstantiate prefabobject movement
When attempting to place an object from prefab, the object continually jumps up to the camera and back down quickly.
Ok, so I'm pretty new to coding in general, but I've been making a lot of progress. However, I can't seem to get this right. I've included a gif of the error that I'm getting below, as well as the script that I'm using. The idea is that when the subButton is clicked, the placeableobjects is created at the mouse point, until it's clicked again, at which points it's placed on the terrain. While it's being placed, it can be rotated with the r key. Gif: https://gyazo.com/d0e53d2e731d9264ea31cc7bf6bca7ee (Also how do I make the object not placeable if the cursor is over the ui?)
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SubButton : MonoBehaviour
{
public Button subButton;
public GameObject placeableObjectPrefab;
private GameObject currentPlaceableObject;
public float buildingRotation = 10f;
void Start()
{
currentPlaceableObject = null;
}
private void Update()
{
subButton.onClick.AddListener(ButtonClicked);
if (currentPlaceableObject != null)
{
MoveCurrentPlaceableObjectToMouse();
RotateCurrentPlaceableObject();
ReleaseIfClicked();
}
}
private void ReleaseIfClicked()
{
if (Input.GetMouseButtonDown(2))
{
currentPlaceableObject = null;
}
}
private void RotateCurrentPlaceableObject()
{
if (Input.GetKey("r"))
{
currentPlaceableObject.transform.Rotate(Vector3.up, buildingRotation * 10f);
}
}
private void MoveCurrentPlaceableObjectToMouse()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitinfo;
if (Physics.Raycast(ray, out hitinfo))
{
currentPlaceableObject.transform.position = hitinfo.point;
currentPlaceableObject.transform.rotation = Quaternion.FromToRotation(Vector3.up, hitinfo.normal);
}
}
public SubButton Constructor()
{
SubButton capture = new SubButton();
capture.subButton = subButton;
return capture;
}
void ButtonClicked()
{
if (currentPlaceableObject == null)
{
Debug.Log("Attempting to create" + placeableObjectPrefab.name);
currentPlaceableObject = Instantiate(placeableObjectPrefab);
}
else
{
//Destroy(currentPlaceableObject);
}
}
}
Comment