我在士兵动画师中有一个 Grounded 过渡,默认情况下这是从这个过渡开始的。然后我在 3 秒后执行此操作,它会在从 Grounded 到 Rifle_Aiming_Idle 的两个转换之间缓慢变化。
但是为了查看它是如何工作的以及它是否像我希望的那样工作良好,我必须关闭 FPSController Camera(FPSCamera 关闭为灰色)。因此,在运行游戏时,事件摄像机是 Main Camera 和 CM vcam1(Cinemachine 虚拟摄像机)。
但我想用这个过场动画做更多。 我希望过场动画只有在玩家 FPSController 退出门时才会开始:
此脚本附加到 FPSController:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
public class SpaceshipCutscene : MonoBehaviour
{
public Transform player;
public Transform npc;
public float cutsceneDistance = 5f;
public float speed;
private bool moveNpc = false;
// Use this for initialization
void Start()
{
}
private void Update()
{
if (moveNpc)
{
float travel = Mathf.Abs(speed) * Time.deltaTime;
Vector3 direction = (player.position - npc.position).normalized;
Quaternion lookrotation = Quaternion.LookRotation(direction);
npc.rotation = Quaternion.Slerp(npc.rotation, lookrotation, Time.deltaTime * 5);
Vector3 position = npc.position;
position = Vector3.MoveTowards(position, player.position, travel);
npc.position = position;
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.name == "Horizontal_Doors_Kit")
moveNpc = true;
}
}
我希望当玩家 FPSController 离开门时开始过场动画,并且在播放/执行过场动画时我希望同时让动画师让士兵面对 FPSController 缓慢旋转。
FPSController 退出门 > 士兵从地面慢慢改变到瞄准模式,士兵面向 FPSController 缓慢旋转。
我的问题是如何在 FPSController 离开门时启动电影机过场动画以及如何让士兵(npc)面向 FPSController 缓慢旋转。
我在脚本的更新中尝试的方法效果不佳。 它让 npc 移动,而不是像我想要的那样在过场动画中缓慢旋转。
也许对于旋转部分我应该使用 Cinemachine 而不是在脚本中这样做?也许我也应该在这里为旋转部分使用时间轴?
最佳答案
我需要的工作解决方案:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
public class SpaceshipCutscene : MonoBehaviour
{
public Transform player;
public Transform npc;
public Camera FPSCamera;
public Camera mainCamera;
public Animator anim;
public float rotationSpeed = 3f;
private bool moveNpc = false;
// Use this for initialization
void Start()
{
}
private void Update()
{
if (moveNpc)
{
Vector3 dir = player.position - npc.position;
dir.y = 0; // keep the direction strictly horizontal
Quaternion rot = Quaternion.LookRotation(dir);
// slerp to the desired rotation over time
npc.rotation = Quaternion.Slerp(npc.rotation, rot, rotationSpeed * Time.deltaTime);
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.name == "Horizontal_Doors_Kit")
{
FPSCamera.enabled = false;
mainCamera.enabled = true;
moveNpc = true;
anim.SetTrigger("SoldierAimingTrigger");
}
}
}
关于c# - 如何在更改动画师转换时让 npc 角色面向玩家缓慢旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50930802/