は、私は、このリンクで最初の答えをステートマシンを使用するように助言された。私はまだRaycastHitとLookAtの問題を解決することができません。
が、私は今のことを必要とIIFはよく分かりません。私の問題は解決しやすいはずです。私はまた、ステートマシンの使い方をまだ理解していませんでした。
RaycastHitとLookAtを使用している最初の部分では、マウスの周りをマウスで動かすと回転してマウスの位置に向いています。この部分は私のデフォルトアイドル状態でなければなりません。ゲームを実行しているときに、プレーヤーが歩いて目標ポイントに達するたびに(マウスをクリックした位置)
他の2つの状態は、アイドルとウォーキングであり、両方とも、ヒューマノイドウォークおよびヒューマノイドイドルを使用するアニメーション状態である。私がマウスボタンをクリックすると、プレイヤーはクリックされたマウスの位置を目標に「歩く」ことになり、そこに到達すると「アイドル」になり、LookAtモードに戻り、再びマウスを動かすことができます。回転してマウスに面します。
しかし、キャラクターがマウスクリックポイントに到達したときに、彼はクレイジーナンバーストップのように回転し始めます。マウスを動かすと、マウスの動きに沿って歩くことになります。これは私が望むものではありません。
私は1.0fから2.0fまでの距離をテストのため3.0fに変更しようとしましたが、問題のいずれも解決しませんでした。
ゲームを実行すると、文字がマウスが何とかこの部分の結合すべき位置をクリック到達したとき、メインアイドル状態:
_animator.CrossFade("Idle", 0);
これを:アイドル状態で
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit) && hit.collider.name != "ThirdPersonController")
{
transform.LookAt(hit.point);
}
else
{
transform.LookAt(ray.GetPoint(100));
}
をスクリプトです:
using UnityEngine;
using System.Collections;
public class MoveObjects : MonoBehaviour {
private Animator _animator;
void Start()
{
_animator = GetComponent<Animator>();
_animator.CrossFade("Idle", 0);
}
void Update()
{
MovePlayerWithMouse();
}
private void MovePlayerWithMouse()
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit) && hit.collider.name != "ThirdPersonController")
{
transform.LookAt(hit.point);
}
else
{
transform.LookAt(ray.GetPoint(100));
}
if (Input.GetMouseButtonDown(0))
{
if ((transform.position - hit.point).magnitude < 1.0f)
{
_animator.CrossFade("Idle", 0);
}
else
{
_animator.CrossFade("Walk", 0);
}
}
}