在团结中,我试图“伪造浮动”我的角色控制器,重力关闭,但仍然向下拉(Y方向)

时间:2017-06-18 18:36:12

标签: c# unity3d

应该提到我正在尝试使用C#,但对JS选项开放。

所以我的想法是让我的CharacterController点击我附加了OnTriggerEnter函数的水对象,导致发生三件事:

  1. 我的动画从空闲/步行/跑步变为TreadWater(工作正常,只需要调整)
  2. 关闭刚体(角色控制器)的重力
  3. 将刚体的Y位置设置为水面,使其看起来漂浮
  4. CharacterController controller; Animator Animator; bool WaterImpact; GameObject WaterProDaytime; public Rigidbody Model; void Start() { Animator = GetComponent<Animator>(); Model = GetComponent<Rigidbody> (); Model.velocity = Vector3.zero; Model.angularVelocity = Vector3.zero; } void OnTriggerEnter (Collider col) { if (col.gameObject.name == "WaterProDaytime") { WaterImpact = true; //PlayerController.gravity = 0; } Debug.Log (col.gameObject.name); Debug.Log (WaterImpact); } void Update() { if (WaterImpact) { transform.position = new Vector3 (transform.position.x, -1.4f, transform.position.z); //Debug.Log (PlayerController.gravity); //Debug.Log ("WaterHit"); } }

    尝试使用void Update()函数并在每次更新时设置位置,并且当它发挥作用时,似乎存在相反的力量导致角色非常快速地“抖动”。

    理想情况下,我希望关闭所有对立的力量并将transform.position.y锁定在水面上。

    一直在看这个2天,不管怎样都会感激不尽,但请放轻松我,对Unity和C来说很新#

    干杯

    编辑过的脚本。

1 个答案:

答案 0 :(得分:1)

可能只是由this.GetComponent<Rigidbody> ().useGravity = true;行造成的? 我猜你的解释点 2。应该是this.GetComponent<Rigidbody> ().useGravity = false;

另请注意,您只需拨打GetComponent<Rigidbody>()而不是this.GetComponent<Rigidbody>()

最后一点:在处理物理时,尽量始终坚持使用提供的引擎工具。当你随意改变物体的位置时,transform.position = new Vector3 (transform.position.x, -1.5f, transform.position.z);线会弄乱物理。致电GetComponent<Rigidbody>().MovePosition(new Vector3 (transform.position.x, -1.5f, transform.position.z));会更加安全。

希望这有帮助,