0
私は単純なパトロールスクリプトに取り組んでいますが、すべてがうまくいきますが、周りを回るときに文字がランダムに床を転がっています。ここではそれらの短いクリップ...ここ なぜ私のキャラクターは床にひっくり返っていますか?
は私のスクリプトです...public class Patrol : MonoBehaviour
{
public float speed = 5;
public float directionChangeInterval = 1;
public float maxHeadingChange = 30;
public bool useRootMotion;
CharacterController controller;
float heading;
Vector3 targetRotation;
Vector3 forward
{
get { return transform.TransformDirection(Vector3.forward); }
}
void Awake()
{
controller = GetComponent<CharacterController>();
// Set random initial rotation
heading = Random.Range(0, 360);
transform.eulerAngles = new Vector3(0, heading, 0);
StartCoroutine(NewHeadingRoutine());
}
void Update()
{
transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, targetRotation, Time.deltaTime * directionChangeInterval);
if (useRootMotion)
{
return;
}
else
{
controller.SimpleMove(forward * speed);
}
}
void OnControllerColliderHit(ControllerColliderHit hit)
{
if (hit.gameObject.tag == "Player")
{
// Bounce off the obstacle and change direction
var newDirection = Vector3.Reflect(forward, hit.normal);
transform.rotation = Quaternion.FromToRotation(Vector3.forward, newDirection);
heading = transform.eulerAngles.y;
NewHeading();
}
if (hit.gameObject.tag == "Boundary")
{
// Bounce off the obstacle and change direction
var newDirection = Vector3.Reflect(forward, hit.normal);
transform.rotation = Quaternion.FromToRotation(Vector3.forward, newDirection);
heading = transform.eulerAngles.y;
NewHeading();
}
}
/// Finds a new direction to move towards.
void NewHeading()
{
var floor = transform.eulerAngles.y - maxHeadingChange;
var ceil = transform.eulerAngles.y + maxHeadingChange;
heading = Random.Range(floor, ceil);
targetRotation = new Vector3(0, heading, 0);
}
/// Repeatedly calculates a new direction to move towards.
IEnumerator NewHeadingRoutine()
{
while (true)
{
NewHeading();
yield return new WaitForSeconds(directionChangeInterval);
}
}
}
は、私が文字に剛体を追加すると回転を制約しようとしたが、それdoesntの作業があります。奇妙なことに、キャラクターコントロールは全く回転していません。シーンビューではキャラクターのコライダーがそのままになっているのを見ることができますが、キャラクターはそれ自身でメッシュをめくっていきます。
私はそれを私のOnColliderHitメソッドに追加しようとしましたが、デバッグメッセージをスローすることができません。 –
シーン内のキャラクターが1つだけで、壁に衝突するたびにデバッグをスローすることができますか、実際にコーナーで急速に衝突しているかどうかを確認することができますか? –