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度的当前角色(或两者)。但相反,它并没有进行旋转,因此我认为在z轴上某些程度上改变的角色会不断地走出地形。
我猜我在Quaternion.Slerp系列上做错了。
答案 0 :(得分:0)
由于你有两个同名的游戏对象,你的GameObject.Find(c.name)
行总会返回相同的一行,无论Collider
实际触发了什么{。}}。
GameObject.Find
的gameObject属性相比, Collider
也非常慢,所以您要避免尽可能频繁地使用“查找”。
以下是修改后的版本:
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);
}
这只是一个相当随机,非常小的数字。