Results 1 to 3 of 3
  1. #1

    Default UTBotのSeePlayerについて

    UTBotのGlobalで定義されてるSeePlayerイベントに関して質問です。

    1行目の条件式の!WorldInfo.GRI.OnSameTeam(self, SeenPlayer)の!は不要だと思うのですが。
    というのも、この場合selfとSeenPlayerが同じチームの場合に2つ目の条件式に移 りますよね?
    で、Squadがnoneでないのはチームゲームの場合のみなので、
    チームゲームの場合、敵チームプレイヤーには何も処理せず味方チームプレイヤーにはSetEnemy()で 判定するという処理が行われます。

    これは逆な気がするんですが、何か理由があってこのような条件なのでしょうか?


    Code:
    event SeePlayer(Pawn SeenPlayer)
    {
    	if (Squad == None || !WorldInfo.GRI.OnSameTeam(self, SeenPlayer))
    	{
    		// maybe scripted pawn; just notify Kismet
    		Pawn.TriggerEventClass(class'SeqEvent_AISeeEnemy', SeenPlayer);
    	}
    	else if (UTSquadAI(Squad).SetEnemy(self, SeenPlayer))
    	{
    		// check for any Kismet scripts that might care
    		Pawn.TriggerEventClass(class'SeqEvent_AISeeEnemy', SeenPlayer);
    
    		WhatToDoNext();
    	}
    	if ( Enemy == SeenPlayer )
    	{
    		VisibleEnemy = Enemy;
    		EnemyVisibilityTime = WorldInfo.TimeSeconds;
    		bEnemyIsVisible = true;
    	}
    }

  2. #2

    Default

    私もUTBotのSeePlayerでやってる内容がいまいちよく分からなかったんですが、
    最終的に以下のように実装しています。
    (グローバルのSeePlayer()命令ではないんですが)

    Code:
    	event SeePlayer(Pawn SeenPlayer)
    	{
    		if ( !WorldInfo.GRI.OnSameTeam(self, SeenPlayer) )//敵の場合
    		{
    			Focus = SeenPlayer;
    			Enemy = SeenPlayer;
    			DoRangedAttackOn(SeenPlayer);
    		}
    		else//味方の場合
    		{
    			//何もしない
    		}
    	}
    これで、敵を見たなら攻撃に移って、味方なら何もしないという流れにできました。
    参考までに。

  3. #3

    Default

    僕も結局!を取り除くことで同等の機能を実現しました。
    SquadAIが存在する場合は敵を設定するときにSetEnemyを利用した方が、チーム全体で敵の情報 が共有されるため良い気がします。


 

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Copyright ©2009-2011 Epic Games, Inc. All Rights Reserved.
Digital Point modules: Sphinx-based search vBulletin skin by CompletevB.com.