应该提到我正在尝试使用C#,但对JS选项开放。
所以我的想法是让我的CharacterController点击我附加了OnTriggerEnter函数的水对象,导致发生三件事:
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来说很新#
干杯
编辑过的脚本。
答案 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));
会更加安全。
希望这有帮助,