Unity CharacterController的transform赋值无效(一直下落)问题

Posted Excel2016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity CharacterController的transform赋值无效(一直下落)问题相关的知识,希望对你有一定的参考价值。

使用 CharacterController 后 , 坐标系统会变得混乱,各系统之间使用自己的缓存来保持数据,玩家为了模拟重力 不得不持续进行运算。

这样就会令其他坐标操作指令出现无效化或者混乱

unity 也提供了一个简单的解决方案 就是每计算一次之前 都去同步其他坐标操作的结果

Physics.autoSyncTransforms = true; 

有了同步 就不会混乱或者静止不动了。

虽然很简单,但是对于新手来说 没人指导会浪费你的时间 我就浪费了点时间

我上网查了好一会才知道为什么。。。

所以 如果你有条件的话 还是把整个游戏都做成物理系统接管算了。 作者:东边的BiLi https://www.bilibili.com/read/cv19573814/ 出处:bilibili

Unity3D角色控制器(CharacterController)

1 简介

​ 控制角色移动的组件主要有:Transform 组件Rigidbody 组件、CharacterController 组件。Transform 组件通过控制角色位置实现移动,Rogidbody 组件通过控制角色速度实现移动,CharacterController 组件通过控制角色速度和模拟碰撞实现移动。Transform 组件和 Rogidbody 组件不便于控制角色爬坡和爬梯,CharacterController 组件能够很方便地实现角色在各种复杂地形中运动。

​ CharacterController 继承 Collider(见→碰撞体组件Collider),其属性面板如下:

  • Slope Limit:爬坡最大角度
  • Step Offset:爬梯最大高度
  • Skin Width:皮肤厚度
  • Min Move Distance:最小移动距离
  • Center、Radius、Height:角色用于检测碰撞的胶囊体中心、半径、高

​ 说明:CharacterController 继承 Collider,并且其碰撞体是一个胶囊体。

​ CharacterController 中控制角色移动的方法如下:

public CollisionFlags Move(Vector3 motion)
public bool SimpleMove(Vector3 speed)

2 应用

1)游戏对象

​ 创建 2 个楼梯(每个楼梯由 5 个 Cube 对象拼成)和 2 个斜坡以及一个胶囊体,如下:

2)脚本组件

​ PlayerController.cs

using UnityEngine;

public class PlayerController : MonoBehaviour 
	private CharacterController character;
	private float speedRate = 4f;

	private void Start () 
		character = GetComponent<CharacterController>();
	

	private void Update () 
		float hor = Input.GetAxis("Horizontal");
        float ver = Input.GetAxis("Vertical");
		Vector3 speed = new Vector3(hor, 0, ver) * speedRate;
		character.SimpleMove(speed);
	

​ 说明: PlayerController 脚本组件挂在胶囊体上。

3)运行效果

​ 声明:本文转自【Unity3D】角色控制器(CharacterController)

以上是关于Unity CharacterController的transform赋值无效(一直下落)问题的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D角色控制器(CharacterController)

Unity-CharacterController(角色控制器)

Unity CharacterController的transform赋值无效(一直下落)问题

Unity3D日常开发实现角色移动行走之CharacterController组件

[Unity3d]How to control your player to move and rotate by using CharacterController

unity---小球击打围墙