有人可以下载并查看我的项目吗?这很简单,但不像教程那样有效。
在我的项目中,我在其中一个字符的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;
}
}
}
答案 0 :(得分:0)
一旦碰撞器成为触发器,它就不再与物体发生碰撞,最好的办法是放置一个具有碰撞器并将其设置为触发器的子物体,这样原始碰撞器仍然会与地面碰撞。
至于你的另一个问题,你如何引用你的第三人称角色,你是将它从场景拖到检查器中,还必须将导航网格烘焙到你的场景中。我没有看过你的项目,因为这需要花费很多时间,但可能会再次阅读教程,看看他们如何引用这个角色。使用内置字符,您通常必须首先访问命名空间。