私は Unity Learn を通じて Unity でのゲームの作成を学習しており、ようやく C# の使用に慣れ始めています。残念ながら、コードに問題が発生しました。私は顧客がレジに向かうゲームを作成しています。顧客をランダムな座標セットからスポーンして、設定されたポイントまで歩く必要があります。
いくつかの異なるチュートリアルやヒントを見ながら、過去に作成したコードを使用してみましたが、すべて同じ結果で終わりました。 ((-7, 5), 7.8, -19) の間でスポーンしてから (-1, 7.8, -7.5) に移動する必要があります。何を試しても、顧客は空中に出現し、目的地よりも上に浮かんでしまいます。座標数値が 2 倍になっているように見えますが、数値を半分にしてもまったく同じことになります。 Rigidbody を追加すれば解決するかもしれないと考えましたが、それは顧客がポイント B だと思われる場所に到達したときに際限なく落下するだけでした。何か提案はありますか?
これは私が現在取り組んでいるコードです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CustomerMovement : MonoBehaviour
{
private Vector3 beginPos = new Vector3(-1f, 7.8f, -19f);
private Vector3 endPos = new Vector3(-1f, 7.8f, -7.5f);
public float time = 5;
// Start is called before the first frame update
void Start()
{
StartCoroutine(Move(beginPos, endPos, time));
}
IEnumerator Move(Vector3 beginPos, Vector3 endPos, float time)
{
for(float t = 0; t < 1; t += Time.deltaTime / time)
{
transform.position = Vector3.Lerp(beginPos, endPos, t);
yield return null;
}
}
// Update is called once per frame
void Update()
{
}
}
このコードをテストすることはできないので、さらに問題が発生した場合はお知らせください。
移動関数を呼び出す前に、初期位置をターゲット範囲内のランダムな座標に設定するだけです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CustomerMovement : MonoBehaviour
{
private Vector3 beginPos = new Vector3(-1f, 7.8f, -19f);
private Vector3 endPos = new Vector3(-1f, 7.8f, -7.5f);
public float time = 5;
void Start()
{
Vector3 randomSpawnPos = new Vector3(Random.Range(-7f, 7f), 7.8f, Random.Range(-19f, 7.8f));
// Initial pos of customers
transform.position = randomSpawnPos;
StartCoroutine(Move(randomSpawnPos, endPos, time));
}
IEnumerator Move(Vector3 beginPos, Vector3 endPos, float time)
{
float startY = transform.position.y;
for(float t = 0; t < 1; t += Time.deltaTime / time)
{
Vector3 intermediatePos = Vector3.Lerp(beginPos, endPos, t);
transform.position = intermediatePos;
yield return null;
}
//
transform.position = endPos;
}
void Update()
{
}
}