我需要一些帮助,为我的游戏中的敌人创建一个脚本!我正在制作一款2.5D游戏,你在那里追逐露营者并试图杀死它们。我主要完成游戏,但我不能让AI工作!我现在四处寻找脚本和帮助了几天,但找不到与我游戏其余部分相符的任何东西......请帮忙!
对于我来说,我有一个在x轴上旋转35°的平面,这对我来说效果非常好(到处移动角色并放置障碍物)。
此时我正在处理这个脚本;
#pragma strict
//Attack button
var attackButton : Joystick;
var anim : Animator;
var delay = 5.0;
//Player can kill
var CanKill = false;
//Score
var scoreValue : int;
var killValue : int;
var playerControl : PlayerControl;
//AI
var speed : int = 2;
var Damp: float = 1.0;
var isRun: boolean = false;
var Target: Transform;
var detectionRange: int = 5;
private var character : CharacterController;
function Start ()
{
anim = GetComponent("Animator");
var playerControlObject : GameObject = GameObject.FindWithTag ("Player");
character = GetComponent(CharacterController);
}
function WaitAndDestroy()
{
yield WaitForSeconds(delay);
Destroy (gameObject);
}
function Update()
{
//Can the player kill?
if (attackButton.tapCount == 1)
CanKill = true;
else CanKill = false;
//AI
var FromPlayer = Vector3(Target.position.x - transform.position.x, 0);
if(FromPlayer.magnitude <= detectionRange){
isRun = true;
}
if(FromPlayer.magnitude >= detectionRange) {
isRun = false;
}
if(isRun) {
RunAway();
anim.SetBool("Walk", true);
}
else anim.SetBool("Walk", false);
}
function OnTriggerEnter (Other : Collider){
if(Other.gameObject.tag == "Player" && CanKill == true) {
playerControl.AddScore (scoreValue);
playerControl.AddKills (killValue);
anim.SetTrigger("Dead");
WaitAndDestroy();
}
}
function RunAway()
{
var moveDirection : Vector3 = transform.position;
character.Move(moveDirection.normalized * speed * Time.deltaTime);
}`
哪种方式有效,但由于某种原因,角色停在关卡的中间并且只是在原地运行......如果我(玩家)抓住并运行,我也希望他转向另一个方向在他前面。 (如果代码有点乱,我道歉,但正如我所说,我是Javascript的新手。)
答案 0 :(得分:1)
我会做那两个改变。
起初:
var FromPlayer = transform.position - Player.transform.position;
因为你想要减去整个矢量而不仅仅是x坐标 第二个:
function RunAway( FromPlayer :vector3 )
{
character.Move(FromPlayer.normalized * speed * Time.deltaTime);
}
如果您已经有了向量FromPlayer
,则可以直接使用它来移动角色
我个人从未使用过团结,但这就是你在其他地方做到的。它当然假设位置可以减去为矢量
答案 1 :(得分:0)
你希望露营者远离玩家吗?然后你应该做
Vector3 moveDirection = transform.position - Player.transform.position
获取他们应该进入的方向。然后选择你已经拥有的线
character.Move(moveDirection.normalized * speed * Time.deltaTime);