我正在創建一個跑步游戲,你有一個向前奔跑的角色,你必須躲避障礙。但是,我的角色不會與任何東西發生碰撞,而是穿過它們。
這是控制我的角色移動的代碼(向前移動是自動完成的,玩家控制橫向移動):
public class CharacterControllertest : MonoBehaviour
{
public float sidewaysSpeed = 5.0f;
public float forwardSpeed = 50.0f;
Vector3 target;
private void Start()
{
SetNewTarget(new Vector3(
transform.position.x,
transform.position.y,
transform.position.z 10
));
}
// Update is called once per frame
void Update()
{
Vector3 direction = target - transform.position;
transform.Translate(direction.normalized * forwardSpeed * Time.deltaTime, Space.World);
SetNewTarget(new Vector3(
transform.position.x,
transform.position.y,
transform.position.z 10
)); ;
float translation = Input.GetAxis("Horizontal") * sidewaysSpeed;
translation *= Time.deltaTime;
transform.Translate(translation, 0, 0);
}
void SetNewTarget(Vector3 newTarget)
{
target = newTarget;
transform.LookAt(target);
}
} ```
uj5u.com熱心網友回復:
你的玩家可能沒有與任何東西發生碰撞的原因之一是因為它上面沒有碰撞器。如果添加適當的碰撞器或網格碰撞器,則應該開始發生碰撞。另一個原因是你試圖站立的東西上沒有碰撞器。嘗試向您的物件添加對撞機,您應該會很好!:)
uj5u.com熱心網友回復:
每當涉及物理時,您都不想使用Transformin移動任何東西Update。這會導致不自然的運動并破壞物理和碰撞檢測。
如果您正在使用CharacterController,則實際使用它而不是Translate使用CharacterController.Move
CharacterController 不受力的影響,只有在呼叫 Move 函式時才會移動。然后它將執行運動,但會受到碰撞的限制。
所以像例如
// Reference via the Inspector
[SerializeField] private CharacterController _characterController;
private void Awake ()
{
// Or as fallback get once
if(!_characterController) _characterController = GetComponent<CharacterController>();
}
private void Update ()
{
var direction = (target - transform.position).normalized;
_characterController.Move(direction * forwardSpeed * Time.deltaTime);
SetNewTarget(transform.position Vector3.forward * 10);
var horizontal = Input.GetAxis("Horizontal") * sidewaysSpeed * Time.deltaTime;
_characterController.Move(Vector3.right * horizontal);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408562.html
標籤:
