Unity3d 使用滑块更改游戏对象的位置

Unity3d 使用滑块更改游戏对象的位置,unity3d,Unity3d,我的游戏中有4个游戏对象,我想用滑块改变这些对象的X和Y值。但我不知道我该怎么做。我需要帮忙 现在,我用下面的代码使用按钮来播放动画,但我想用滑块来改变游戏对象的位置 using System.Collections; using System.Collections.Generic; using UnityEngine; public class playbut : MonoBehaviour { public GameObject anim; public GameObject anim1

我的游戏中有4个游戏对象,我想用滑块改变这些对象的X和Y值。但我不知道我该怎么做。我需要帮忙

现在,我用下面的代码使用按钮来播放动画,但我想用滑块来改变游戏对象的位置

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class playbut : MonoBehaviour {
public GameObject anim;
public GameObject anim1;
public GameObject anim2;
public GameObject scrool;
// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

}
public void OnClick(){
    anim.GetComponent<Animator> ().Play ("div");
    anim1.GetComponent<Animator> ().Play ("div1");
    StartCoroutine(WaitandPrint(2));
    anim2.GetComponent<Animator> ().Play ("div2");
}


private IEnumerator WaitandPrint(float waitTime)
{
    yield return new WaitForSeconds (waitTime);

    scrool.SetActive (true);
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类游戏:单一行为{
公共游戏对象动画;
公共游戏对象anim1;
公共游戏对象动画2;
公共游戏对象scrool;
//用于初始化
无效开始(){
}
//每帧调用一次更新
无效更新(){
}
公共void OnClick(){
anim.GetComponent().Play(“div”);
anim1.GetComponent().Play(“div1”);
开始例行程序(等待打印(2));
anim2.GetComponent().Play(“div2”);
}
私有IEnumerator WaitandPrint(浮动等待时间)
{
返回新的WaitForSeconds(waitTime);
scrool.SetActive(真);
}
}

以下是我想要的:

所有游戏对象的位置均为X:-2.6 Y:-2.09,但当我滑动滑块时,游戏对象的位置应如下所示:

游戏对象1=X:2.5y:-0.03

游戏对象2=X:-5.74 Y:0.09

游戏对象3=X:-2.18 Y:2.48


Gameobject 4=X:-2.6y:-2.09

我建议使用屏幕空间画布,并创建一个新的滑块UI元素作为该画布的子元素

如果您对如何实现这一点感到困惑,请在线搜索Unity uGUI教程

然后,您将需要编写一个脚本来定义滑块值更改时要调用的方法;这可以通过滑块上的检查器进行设置

该脚本应该有一个对它应该移动的游戏对象的变换的引用,并且它在滑块值更改时调用的方法应该更改变换的位置成员以执行此操作


如果您对如何实现这一点感到困惑,请在线搜索Unity脚本教程。

我建议使用屏幕空间画布,并创建一个新的Slider UI元素作为该画布的子元素

如果您对如何实现这一点感到困惑,请在线搜索Unity uGUI教程

然后,您将需要编写一个脚本来定义滑块值更改时要调用的方法;这可以通过滑块上的检查器进行设置

该脚本应该有一个对它应该移动的游戏对象的变换的引用,并且它在滑块值更改时调用的方法应该更改变换的位置成员以执行此操作


如果您对如何实现这一点感到困惑,请在线搜索Unity脚本教程。

根据您的需要,我看到了几种实现方法

编辑:在你提供了额外的细节之后,我了解到你的所有游戏对象只有一个滑块。您需要根据滑块的位置在两点之间设置每个游戏对象的位置。就像线性插值一样

如果是:

  • 将以下脚本添加到所需对象(空游戏对象/滑块)
  • Size
    属性设置为
    4
    ,以处理4个对象。它将创建一个包含4个条目的数组
  • 对于每个元素
  • 拖放游戏对象以移动到
    Transform
    字段中
  • 指定“起始位置”(
    PositionA
    ),当滑块值等于
    0
  • 指定“结束位置”(
    PositionB
    ),当滑块值等于
    1
  • 更改
    点颜色
    ,以便场景视图中gizmo的颜色更易于识别
  • 确保滑块值从
    0
    1
    ,并且
    SetPosition
    onValueChanged
    事件的回调
  • 在滑块的值更改事件中添加一个新条目(仅一个)。拖放包含脚本的游戏对象,并选择组件的
    SetPosition(动态浮动)
    功能
  • 运行游戏,移动滑块以查看每个对象从其
    位置A
    移动到
    位置B
  • 使用UnityEngine;
    [系统可序列化]
    public struct TransformBetweenPoints//找不到合适的名称。。。。
    {
    [序列化字段]
    私有向量3位置a;
    [序列化字段]
    私有向量3位置b;
    [序列化字段]
    私有变换;
    公共无效设置位置(浮动t)
    {
    如果(转换!=null)
    transform.position=Vector3.Lerp(位置A、位置B、位置t);
    }
    #如果统一编辑器
    [序列化字段]
    私用色点颜色;
    公共控件
    {
    颜色gizmosColor=Gizmos.Color;
    
    if(pointsColor.a根据您的需要,我有几种方法可以做到这一点

    编辑:在你提供了额外的细节之后,我了解到你的所有游戏对象只有一个滑块。你想根据滑块的位置在两点之间设置每个游戏对象的位置。就像线性插值一样

    如果是:

  • 将以下脚本添加到所需对象(空游戏对象/滑块)
  • Size
    属性设置为
    4
    以处理4个对象。它将创建一个包含4个条目的数组
  • 对于每个元素
  • 拖放游戏对象以移动到
    Transform
    字段中
  • 指定“起始位置”(
    PositionA
    ),当滑块值等于
    0
  • 指定“结束位置”(
    PositionB
    ),当滑块值等于
    1
  • 更改
    点颜色
    ,以便场景视图中gizmo的颜色更易于识别
  • M