CharacterController.Moveが非アクティブなコントローラーで呼び出されました

要するに、動くことができない、動くことができない!

要するに、動くことができない、動くことができない!

要するに、動くことができない、動くことができない!

インターネット上のそれらの束、.Move().SimpleMove()

ネットは何かを言う

誰がApiを呼び出すことができないか、問題はそれを動かすことができないということです、それをどのように解決するのですか?

2つのAPIの違いについて話さなければならない人もいます。ソースコードを見てみましょう。

わかった。見えない

    /// <summary>
    ///   <para>Moves the character with speed.</para>
    /// </summary>
    /// <param name="speed"></param>
    public bool SimpleMove(Vector3 speed) => CharacterController.INTERNAL_CALL_SimpleMove(this, ref speed);

    [GeneratedByOldBindingsGenerator]
    [MethodImpl(MethodImplOptions.InternalCall)]
    private static extern bool INTERNAL_CALL_SimpleMove(CharacterController self, ref Vector3 speed);

    /// <summary>
    ///   <para>A more complex move function taking absolute movement deltas.</para>
    /// </summary>
    /// <param name="motion"></param>
    public CollisionFlags Move(Vector3 motion) => CharacterController.INTERNAL_CALL_Move(this, ref motion);

上記から明らかなように、(デルタ時間ではなく)速度でキャラクターを動かしますか?

SimpleMove()とMove()はどちらも内部内部メソッドAPIを使用しますが、simpleMove

いいえ

no delta吗

SimpleMoveがデルタなしでスムーズな動きをする方法がわかりません(上記のコメントによると)

あなたは.SimpleMove()を使うのが大好きですあなたはそれを自分で使います

しかし、問題はまだあります。CharacterController.Move()を使用すると移動できません。

 

テストの結果、問題は自分でカプセル化した関数、または自分で作成したBUGで発生していることがわかりました。

	//	HandleMovement();
	}

	private void LateUpdate()
	{
		HandleMovement();
		//ce测试过,可以移动 
		//GetComponent<CharacterController>().Move(new Vector3(0.1f, 0, 0) * Time.deltaTime);
	}

最後の解決策は、HandleMovement()を調整することです。これは、以前はMove()の下位コンポーネントであったはずであり、異常が発生して移動できなくなります。

おすすめ

転載: blog.csdn.net/avi9111/article/details/122776624