Предполагается, что у вас есть функция обратного вызова, которая вызывается при нажатии на Button
, и другая, которая вызывается при изменении значения Slider
. Я не могу сказать, делаете ли вы это из редактора, но по тому, как названы ваши функции, мы не можем сказать, какая из них вызывается во время Button
клика или Slider
изменения значения...
Поместите код Instantiate
в функцию обратного вызова Button
, затем поместите код перемещения куба в функцию обратного вызова Slider
для изменения значения.
В коде Raycast
, обнаруживающем щелчок по кубу, сохраните ссылку Transform
куба на глобальную переменную Transform
. Это сохраненное Transform
— это то, что вы будете использовать для перемещения куба в вашей функции обратного вызова изменения значения Slider
.
Вы подписываетесь на событие клика Button
с помощью Button.onClick.AddListener(instantiateButtonCallBackFunction);
, затем на событие изменения значения ползунка с помощью Slider.onValueChanged.AddListener(delegate { sliderCallBackFunction(cubeSlider.value); });
Вот как это должно выглядеть. Все делается с помощью кода. Просто перетащите префаб Cube, Slider
и Button
в нужный слот, и он должен работать. При нажатии на Button
создается экземпляр Cube. При нажатии на куб вы сможете перемещать его с помощью ползунка.
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class instantiate : MonoBehaviour
{
public GameObject cubePrefab;
public Slider cubeSlider;
public Button instantiateButton;
public float speed = 0f;
public float pos = 0f;
private Transform currentObjectToDrag = null;
// Use this for initialization
void Start()
{
//Set Slider Values
cubeSlider.minValue = 0f;
cubeSlider.maxValue = 50f;
cubeSlider.value = 0f;
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, 1000.0f))
{
GameObject objHit = hit.collider.gameObject;
Debug.Log("We Clicked on : " + objHit.name);
//Check if this is cube
if (objHit.CompareTag("Cube"))
{
Debug.Log("Cube selected. You can now drag the Cube with the Slider!");
//Change the current GameObject to drag
currentObjectToDrag = objHit.transform;
}
}
}
}
public void instantiateCube()
{
//Instantiate(cubePrefab, new Vector3(0, 0, 0), Quaternion.identity);
Instantiate(cubePrefab, new Vector3(-15.1281f, 0.67f, 7.978208f), Quaternion.identity);
}
public void rotatess(float newspeed)
{
speed = newspeed;
}
public void positions(float newpos)
{
pos = newpos;
}
//Called when Instantiate Button is clicked
void instantiateButtonCallBack()
{
Debug.Log("Instantiate Button Clicked!");
instantiateCube();
}
//Called when Slider value changes
void sliderCallBack(float value)
{
Debug.Log("Slider Value Moved : " + value);
//Move the Selected GameObject in the Z axis with value from Slider
if (currentObjectToDrag != null)
{
currentObjectToDrag.position = new Vector3(0, 0, value);
Debug.Log("Position changed!");
}
}
//Subscribe to Button and Slider events
void OnEnable()
{
instantiateButton.onClick.AddListener(instantiateButtonCallBack);
cubeSlider.onValueChanged.AddListener(delegate { sliderCallBack(cubeSlider.value); });
}
//Un-Subscribe to Button and Slider events
void OnDisable()
{
instantiateButton.onClick.RemoveListener(instantiateButtonCallBack);
cubeSlider.onValueChanged.RemoveListener(delegate { sliderCallBack(cubeSlider.value); });
}
}
person
Programmer
schedule
26.08.2016