-1

我统一创建了一个对象

GameObject monsterclone = 
      (GameObject)Instantiate(monsterPrefab, floorPosition, Quaternion.identity);

该对象应以波浪形式从 limit1 移动到 limit2。

然后从limit2回到limit1。

Y 位置以及 x 位置必须以特定方式改变。

Vector3 nPos = mfloorPos + new Vector3(2f, 0f, 0f);
Vector3 oPos = mfloorPos  + new Vector3(-2f, 0f, 0f);   

我该怎么做?

在此处输入图像描述

4

3 回答 3

1

在不知道更具体的情况下,我无法完全编写代码,但我认为这个问题已经被问到任何这个链接将帮助你将MOVE OBJECT 作为波

编辑:

我认为 flat up 和 float down 功能将适用于您将一个点移动到另一个示例:

var floatup;
function Start(){
floatup = false;
}
function Update(){
if(floatup)
floatingup();
else if(!floatup)
floatingdown();
}
function floatingup(){
transform.position.y += 0.3 * Time.deltaTime;
yield WaitForSeconds(1);
floatup = false;
}
function floatingdown(){
transform.position.y -= 0.3 * Time.deltaTime;;
yield WaitForSeconds(1);
floatup = true;
}

示例取自

于 2013-04-05T09:18:14.037 回答
1
float amplitudeX = -25.0f;
float amplitudeY = 5.0f;
float omegaX = 0.5f;
float omegaY = 4.0f;
float index;

void Update () {
    index += Time.deltaTime;
    float x = amplitudeX*Mathf.Cos (omegaX*index);      
    float y = Mathf.Abs (amplitudeY*Mathf.Sin (omegaY*index));
    if(transform.position.x > 24){
            transform.eulerAngles = new Vector3(270, -90, 0);
    }
    if(transform.position.x < -24){
            transform.eulerAngles = new Vector3(270, 90, 0);
    }   
    transform.localPosition= new Vector3(x,y,20);
}
于 2013-07-11T10:26:52.833 回答
0

如果这是一个持续的波浪并且不依赖于速度,我会使用动画来创建 Position.Y 值的文字波浪曲线(与 Ravindra Shekhawat 解释的原理大致相同。)您可以在此处找到有关动画的更多信息。

这是一些您可以关闭的代码(未经测试)。它在 c# 中,所以我希望它证明放入 JavaScript 没有问题。

bool monsterMoving = false;

void Update(){
    //check monster moving to start updating position
    if(monsterMoving == true){

        //moving animation controls up and down "wave" movement
        animation.CrossFade('moving'); 

        //Lerp changes position
        Transform.Lerp(transform.Position, oPos, Time.deltaTime); 

        if (transform.Position == oPos) {
            //We are at destination, stop movement
            monsterMoving = false;
        }

    } else {
        // if monster stopped moving, return to idle animation (staying still)
        animation.CrossFade('idle');
    }
}

// function to send a new position to the monster object
void MoveTo(Vector3 newPos){
    oPos = newPos;
    monsterMoving = true;
}
于 2013-04-05T13:20:20.397 回答