我怎样才能在碰撞时旋转平滑角色?
How can i rotate smooth the characters back on colliding?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BoxCollider : MonoBehaviour {
private float degree = 180f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter(Collider c)
{
GameObject character = GameObject.Find(c.name);
character.transform.rotation = Quaternion.Slerp(character.transform.rotation, Quaternion.Euler(0, 0, degree), Time.deltaTime);
}
}
我有两个 ThirdPersonController 角色。
当事件 OnTriggerEnter 被触发时,我在 c.Name "ThirdPersonController"
中看到
我还添加了 4 个空游戏对象,每个都添加了一个盒子碰撞器设置 IsTrigger,并且还附加了每个游戏对象这个脚本。
而且我检查了当角色到达墙壁时他们停止移动但继续在原地行走。
现在我希望触发事件的当前角色(或两者)旋转 180 度。但是它并没有使 character/s 继续走出地形,我认为在 z 轴上发生了某种程度的变化。
我想我在 Quaternion.Slerp 行做错了。
使用Collider.gameObject
因为您有两个同名的游戏对象,所以您的 GameObject.Find(c.name)
行将始终返回相同的对象,无论哪个 Collider
实际触发了碰撞。
与直接使用 Collider
的游戏对象 属性 相比,GameObject.Find
也非常慢,因此您要尽可能避免使用 Find。
这是修改后的版本:
void OnTriggerEnter(Collider c)
{
// Don't use GameObject.Find here - just use the gameObject ref on the given collider:
GameObject character = c.gameObject;
character.transform.rotation = Quaternion.Slerp(character.transform.rotation, Quaternion.Euler(0, 0, degree), Time.deltaTime);
}
Time.deltaTime 仅用于更新
这只是一个相当随机的数字,否则非常小。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BoxCollider : MonoBehaviour {
private float degree = 180f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter(Collider c)
{
GameObject character = GameObject.Find(c.name);
character.transform.rotation = Quaternion.Slerp(character.transform.rotation, Quaternion.Euler(0, 0, degree), Time.deltaTime);
}
}
我有两个 ThirdPersonController 角色。 当事件 OnTriggerEnter 被触发时,我在 c.Name "ThirdPersonController"
中看到我还添加了 4 个空游戏对象,每个都添加了一个盒子碰撞器设置 IsTrigger,并且还附加了每个游戏对象这个脚本。
而且我检查了当角色到达墙壁时他们停止移动但继续在原地行走。
现在我希望触发事件的当前角色(或两者)旋转 180 度。但是它并没有使 character/s 继续走出地形,我认为在 z 轴上发生了某种程度的变化。
我想我在 Quaternion.Slerp 行做错了。
使用Collider.gameObject
因为您有两个同名的游戏对象,所以您的 GameObject.Find(c.name)
行将始终返回相同的对象,无论哪个 Collider
实际触发了碰撞。
Collider
的游戏对象 属性 相比,GameObject.Find
也非常慢,因此您要尽可能避免使用 Find。
这是修改后的版本:
void OnTriggerEnter(Collider c)
{
// Don't use GameObject.Find here - just use the gameObject ref on the given collider:
GameObject character = c.gameObject;
character.transform.rotation = Quaternion.Slerp(character.transform.rotation, Quaternion.Euler(0, 0, degree), Time.deltaTime);
}
Time.deltaTime 仅用于更新
这只是一个相当随机的数字,否则非常小。