我怎样才能在碰撞时旋转平滑角色?

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 仅用于更新

这只是一个相当随机的数字,否则非常小。