【发布时间】:2018-03-13 18:06:18
【问题描述】:
我尝试从 Brackeys 教程中做简单的 AI,它可以工作,但是当我离立方体太近时,它会“消耗”我。我无法摆脱它。我没有任何玩家角色模型,我只有相机,我烤了地板(不管是什么意思,我在 cmets 上找到了这个技巧,它帮助 AI 移动)。 第二件事是立方体从地图下方的一半开始,如果我将其抬起,则它根本不会移动。我还有一个骨架资产模型,如何使用它成为敌人的模型?同样在 cmets 中我读到它不适用于第二个立方体,我应该改变什么来拥有多个敌人?这是我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerManager : MonoBehaviour {
#region Singleton
public static PlayerManager instance;
void Awake()
{
instance = this;
}
#endregion
public GameObject player;
}
第二个脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class EnemyControler : MonoBehaviour {
public float LookRadius = 10f;
Transform target;
NavMeshAgent agent;
void Start ()
{
agent = GetComponent<NavMeshAgent>();
target = PlayerManager.instance.player.transform;
}
void Update () {
float distance = Vector3.Distance(target.position, transform.position);
if (distance <= LookRadius)
{
agent.SetDestination(target.position);
if (distance < agent.stoppingDistance)
{
FaceTarget();
}
}
}
void FaceTarget ()
{
Vector3 direction = (target.position = transform.position).normalized;
Quaternion lookRotation = Quaternion.LookRotation(new Vector3(direction.x, 0, direction.z));
transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, Time.deltaTime * 5f);
}
private void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(transform.position, LookRadius);
}
}
字符控制器:mysz=mouse 和 klawiatura=keybord,其余单词是高度、速度值等。
using UnityEngine;
using System.Collections;
public class PlayerControler : MonoBehaviour
{
//Obiekt odpowiedzialny za ruch gracza.
public CharacterController characterControler;
public float predkoscPoruszania = 9.0f;
public float wysokoscSkoku = 7.0f;
public float aktualnaWysokoscSkoku = 0f;
public float predkoscBiegania = 7.0f;
public float czuloscMyszki = 3.0f;
public float myszGoraDol = 0.0f;
public float zakresMyszyGoraDol = 90.0f;
void Start()
{
characterControler = GetComponent<CharacterController>();
}
void Update()
{
klawiatura();
myszka();
}
private void klawiatura()
{
float rochPrzodTyl = Input.GetAxis("Vertical") * predkoscPoruszania;
float rochLewoPrawo = Input.GetAxis("Horizontal") * predkoscPoruszania;
if (characterControler.isGrounded && Input.GetButton("Jump"))
{
aktualnaWysokoscSkoku = wysokoscSkoku;
}
else if (!characterControler.isGrounded)
{
aktualnaWysokoscSkoku += Physics.gravity.y * Time.deltaTime;
}
Debug.Log(Physics.gravity.y);
if (Input.GetKeyDown("left shift"))
{
predkoscPoruszania += predkoscBiegania;
}
else if (Input.GetKeyUp("left shift"))
{
predkoscPoruszania -= predkoscBiegania;
}
Vector3 ruch = new Vector3(rochLewoPrawo, aktualnaWysokoscSkoku, rochPrzodTyl);
ruch = transform.rotation * ruch;
characterControler.Move(ruch * Time.deltaTime);
}
private void myszka()
{
if (!PauseMenu.GameIsPaused)
{
float myszLewoPrawo = Input.GetAxis("Mouse X") * czuloscMyszki;
transform.Rotate(0, myszLewoPrawo, 0);
myszGoraDol -= Input.GetAxis("Mouse Y") * czuloscMyszki;
myszGoraDol = Mathf.Clamp(myszGoraDol, -zakresMyszyGoraDol, zakresMyszyGoraDol);
Camera.main.transform.localRotation = Quaternion.Euler(myszGoraDol, 0, 0);
}
}
}
【问题讨论】:
-
" 烤了地板(不管是什么意思,我在 cmets 上发现了这个技巧,它帮助 AI 移动)",如果你使用的是 NavMesh 系统,这意味着有一个平面 2d 地图AI可以导航。这比在 3d 空间中导航要快得多。因此,使用预烘焙的地图,它可以正常运行。
-
"第二件事是立方体从地图下方的一半开始,如果我把它抬起来" 立方体是 AI 吗?人工智能应该靠近你吗?
-
艾应该会走向我并攻击我(但我目前没有任何战斗系统,我会添加它),我希望它像在天际一样工作,问题立方体是“进入”播放器的,我不知道它是因为我没有播放器模型还是只是一个糟糕的脚本。我还检查了烘焙区域,它不像 2d,它检测到我在地形上制作的丘陵和山脉,但立方体仍在地图下方的一半
标签: unity3d artificial-intelligence