有人可以下载并查看我的项目吗?这很简单,但不像教程中那样工作。
在我的项目中,我将其中一个字符的
IsTrigger
或 ThirdPersonController
中的 AIThirdPersonController
设置为 true。这会使角色从飞机上掉下来。
我还更改了其中一个被标记为
Player
的字符,并将状态从 PATROL
更改为 CHASE
但这没有任何改变。其他玩家永远不会追逐/跟随我控制和移动的玩家。
当我在项目中将
IsTrigger
设置为 true 时,为什么玩家会摔倒?
我在视频中看到教练正在使用迷宫飞机。这是我应该在资产中导入的包还是它已经在资产中的某个位置?我现在只是添加了常规飞机,因为我找不到迷宫飞机。
这是我的 OneDrive 中我的项目的链接。文件名为 Demo
AI.rar
:
这是我尝试遵循的视频教程的链接。我想这应该很简单:
这是我在项目中使用的
BasicAi
类,与教程视频中的脚本相同:
using System.Collections;
using UnityStandardAssets.Characters.ThirdPerson;
public class BasicAi : MonoBehaviour {
public NavMeshAgent agent;
public ThirdPersonCharacter character;
public enum State {
PATROL,
CHASE
}
public State state;
private bool alive;
// Variables for patrolling
public GameObject[] waypoints;
private int waypointInd = 0;
public float patrolSpeed = 0.5f;
// Variable for chasing
public float chaseSpeed = 1f;
public GameObject target;
// Use this for initialization
void Start () {
agent = GetComponent<NavMeshAgent> ();
character = GetComponent<ThirdPersonCharacter>();
agent.updatePosition = true;
agent.updateRotation = false;
state = BasicAi.State.PATROL;
alive = true;
StartCoroutine ("FSM");
}
IEnumerator FSM()
{
while (alive)
{
switch (state)
{
case State.PATROL:
Patrol ();
break;
case State.CHASE:
Chase ();
break;
}
yield return null;
}
}
void Patrol()
{
agent.speed = patrolSpeed;
if (Vector3.Distance (this.transform.position, waypoints [waypointInd].transform.position) >= 2) {
agent.SetDestination (waypoints [waypointInd].transform.position);
character.Move (agent.desiredVelocity, false, false);
} else if (Vector3.Distance (this.transform.position, waypoints [waypointInd].transform.position) <= 2) {
waypointInd += 1;
if (waypointInd > waypoints.Length) {
waypointInd = 0;
}
}
else
{
character.Move (Vector3.zero, false, false);
}
}
void Chase()
{
agent.speed = chaseSpeed;
agent.SetDestination (target.transform.position);
character.Move (agent.desiredVelocity, false, false);
}
void OnTriggerEnter(Collider coll)
{
if (coll.tag == "Player")
{
state = BasicAi.State.CHASE;
target = coll.gameObject;
}
}
}
一旦碰撞器成为触发器,它就不再与物体碰撞,最好的选择是放置一个具有碰撞器的子物体并将其设置为触发器,这样原始碰撞器仍会与地面碰撞。
至于你的另一个问题,你如何引用你的第三人称角色,你是否将它从场景拖到检查器中,并且你还必须将你的导航网格烘焙到你的场景中。我没有看过你的项目,因为这会花费很多时间,但也许会再次浏览一下教程,看看他们如何引用这个角色。使用内置字符,您通常必须首先访问名称空间。