2

iTweenと物理アクセラレーションを組み合わせようとしています。

パスのトップ ビュー

こちらが上から見た道です。GameObject茶色の長方形は、iTweenPathコンポーネント (4 つのノード) が接続された立方体によって作成されます。パスの名前はPath1. 左側には、アクターとして機能する球体 (はっきりと見えない場合があります) があり、RigidBody取り付けられた (質量 = 3) で、床から数ユニット上に配置されています。

次に、次のようなスクリプトをアクターに割り当てました。

void OnCollisionEnter(Collision collison) {
  iTween.MoveTo(gameObject, iTween.Hash("path", iTweenPath.GetPath("Path1"), "time", 5));
}

ボールが重力によって地面にぶつかると、iTween.MoveTo(). 上記は期待どおりに機能します。

ただし、次の物理アクセラレーション スクリプトと組み合わせたいと考えています。

void FixedUpdate() {
  rigidbody.AddForce(transform.forward * 5.0f, ForceMode.Acceleration);
}

しかし、iTween が動きを支配しているためAddForce()FixedUpdate()まったく効果がありませんでした。これら2つをどのように組み合わせることができますか?

4

1 に答える 1

1

このソリューションでは iTween を使用していません。パスを生成するために、配列内の空のゲームオブジェクトの数を使用しました。パス内のゲームオブジェクトが多いほど、パスがスムーズになります。

using UnityEngine;
using System.Collections;

public class RollBall : MonoBehaviour 
{
    public float speed=10;
    public Transform target;
    public Transform[] pathPoints;
    public int c;


void Start () 
    {
        c=0;
    }
    
    void Update () 
    {
        target.position=new Vector3(transform.position.x,transform.position.y+1f,transform.transform.position.z);
        if(target.position.z>=pathPoints[c].position.z)
        {
            if(c<pathPoints.Length)
                c++;
        }
        target.LookAt(pathPoints[c]);

        if(Input.GetKey(KeyCode.UpArrow))
        {
            rigidbody.AddForce(target.forward*speed);
        }
    }

}

このターゲットには、球体に方向を与えるために球体と共に移動する空のゲーム オブジェクトがあります。pathPoints は、曲線パスを生成する空のゲームオブジェクトの配列です (順序が重要です)。このコードを球体に取り付けて試してみてください。不明な点があれば、ここでお知らせください。

于 2014-02-06T07:23:03.230 に答える