【发布时间】:2016-12-17 01:40:42
【问题描述】:
我将尝试以最简单的方式解释这一点。我正在为敌方玩家制作一些 AI。如果它的光线投射击中玩家,我希望 AI 向后移动,但是我遇到了一个严重的问题。 [我将在下面的代码中解释]
代码;
using UnityEngine;
using System.Collections;
public class NewEnemyAI : MonoBehaviour
{
public GameObject enemy;
public Transform target;
public float movementSpeed = 2f;
private CharacterController enemyCharacterController;
private bool enemyHit;
private Vector3 startPos;
private Vector3 endPos;
private float distance = 7f;
private float lerpTime = 0.3f;
private float currentLerpTime = 0f;
private bool avoid;
private bool updateOn = true;
private bool hitPlayer = false;
// Use this for initialization
void Start ()
{
avoid = false;
}
// Update is called once per frame
void Update ()
{
//raycasting
if (Physics.Raycast(transform.position, transform.forward, 2))
{
startPos = enemy.transform.position;
endPos = enemy.transform.position + Vector3.back * distance;
avoid = true;
}
else
{
avoid = false;
}
if (avoid == true)
{
currentLerpTime += Time.deltaTime;
if (currentLerpTime >= lerpTime)
{
currentLerpTime = lerpTime;
}
float perc = currentLerpTime/lerpTime;
enemy.transform.position = Vector3.Lerp(startPos, endPos, perc);
avoid = false;
}
if (avoid == false)
{
currentLerpTime = 0;
transform.LookAt(target);
transform.Translate(Vector3.forward * Time.deltaTime * movementSpeed);
}
}
}
当敌人的射线投射到玩家身上时,我将一个布尔值设置为 true,当它为 true 时,它会让玩家向后移动。然而,由于玩家正在向后移动,光线投射不再击中玩家,然后整个过程又重新开始,敌人只是橡皮筋,因为它在代码之间跳跃。有没有办法让代码忽略光线投射 if 语句并将避免布尔值永久设置为 true,直到另有说明。谢谢! [我对 C# 比较陌生,所以请不要过多批评我的代码]。
【问题讨论】:
标签: c# variables unity3d unity5 raycasting