【问题标题】:How to transform a gameObject to a desired position and return to starting position?如何将游戏对象转换到所需位置并返回起始位置?
【发布时间】:2014-07-01 21:31:25
【问题描述】:

我是 UnityScript 的新手,我有以下代码可以在“Z”轴上向前移动游戏对象,但需要一些改进。让我解释一下。

当单击 GUI.Button 时脚本运行。游戏对象开始移动……直到无穷远。 我试图让它移动到所需的位置(例如一个空的游戏对象位置),但根本没有用。

我应该如何优化此代码 sn-p 以在第一次 GUI.Button 单击时将游戏对象移动到所需位置并在返回单击时返回到起始位置?

此外,是否可以在同一个 GUI.Button 点击​​时逐步进行此动作?

这里是sn-p的代码:

#pragma strict

// member variables (declared outside any function)
var startPos: Vector3;
var endPos : Vector3;
var cachedTransform : Transform;
private static var isforward = false;

// save pos before moving:
startPos = transform.position;

// make the gameObject transform, then restore the initial position when needed:
transform.position = startPos;

function Awake() {
startPos = transform.localPosition;
}

function Start() {
cachedTransform = transform;
startPos = cachedTransform.position;
}

function FixedUpdate() {

if(isforward){

var translation : float;

if (cachedTransform.position.x == endPos)
 {
  cachedTransform.position = startPos;
 }
 else
 {
    translation = Time.deltaTime * 2;
    cachedTransform.Translate(0, 0, translation);
    cachedTransform.Translate(Vector3.forward * translation);
 }
}
}
 static function doforward ()
{
    isforward = !isforward;
}

提前感谢大家的回答。

【问题讨论】:

    标签: user-interface unity3d position transform game-physics


    【解决方案1】:

    如果您将脚本附加到游戏对象,则可以轻松移动游戏对象,然后(在 JavaScript 中)

    #pragma strict    
    
    var startPosition;
    
    // Record the starting position when the scene loads
    function Start () {
    startPosition = gameObject.transform.position;
    
    }
    
    // Call this to move you object to wherever
    function moveObject () {
    
    var newPos = new Vector3 (10,20,0); //(where ever you need it to go) 
    
    gameObject.transform.position = newPos;   
    
    }
    
    // Call this to move the object to starting position, using variable we made at start
    function moveToStart () {
    gameObject.transform.position = startPosition;
    }
    

    然后,您只需在需要移动对象时调用这些函数。

    【讨论】:

    • 你好@user3183542。感谢您对我的问题的答复。我已将您发布的脚本附加到游戏对象并使用 GUI.Button 使其运行,但没有任何反应。我在这里错过了什么吗?此外,在我的原始代码 sn-p 中,如何将游戏对象移回原始位置?
    • 除非你调用脚本中的函数,否则脚本不会做任何事情。在那里查看您的脚本,我不确定(isforward)变量是什么,以及它来自哪里。看起来 endPos 只是一个空的 Vector3。还 cachedTransform.position.x == endPos 永远不会返回 true 因为 endPos 是 Vector3 所以你需要 endPos.x
    • (isforward) 变量用于作为 GUI.Button 与另一个脚本交互。如何调用脚本中的函数?需要编写更多代码?能否提供示例代码?
    • 我会得到脚本并像这样调用函数 GameObject.Find('nameOfTheGameObject').GetComponent(YourScriptName).moveToStart();
    • s oyou 的按钮上有我的脚本,所以无论您从哪里控制动作,在该脚本中使用我刚刚发布的内容来查找游戏对象及其脚本,然后调用该函数它。
    【解决方案2】:

    您可能想研究Vector3.Lerp 方法。这需要两个向量(点)和一个浮点数作为参数,然后返回一个点,该点是它们之间距离的一小部分。例如,Lerp(from, to, 0.3f) 将在两点之间的 30% 处为您提供一个点。然后,一旦你有了这个,你需要做的就是设置你的对象的变换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多