C# 当玩家移动时,如何使我的枪停止射击?

C# 当玩家移动时,如何使我的枪停止射击?,c#,unity3d,C#,Unity3d,我正在制作一个射击脚本,但我不知道如何在玩家跑步时禁用射击。有人能帮我吗 void Shoot() { MuzzleFlash.Play(); RaycastHit hit; if (Physics.Raycast(cam.transform.position, cam.transform.forward, out hit, Range)) { Debug.Log(hit.transform.name); EnemyHealt

我正在制作一个射击脚本,但我不知道如何在玩家跑步时禁用射击。有人能帮我吗

void Shoot()
{
    MuzzleFlash.Play();


    RaycastHit hit;
    if (Physics.Raycast(cam.transform.position, cam.transform.forward, out hit, Range))
    {
        Debug.Log(hit.transform.name);

        EnemyHealth enemy = hit.transform.GetComponent<EnemyHealth>();
        if (enemy != null)
        {
            enemy.TakeDamage(Damage);
        }

    }
}

创建一个布尔值
isMoving
,当它们移动时,将其设置为true,当它们停止时设置为false。然后,在你的
无效射击中
为移动布尔做一个if语句,只有当它为false时才开火。

你可以在其他脚本中设置变量,如下所示:

[Serialize Field]
private GameObject objectWithYourScriptYouNeed; 
private ClassOfScriptYouNeed pS; 


void Start()
{     
    pS = objectWithYourScript.GetComponent<ClassOfScriptYouNeed>();    
    pS.varName = 12345;
}
[序列化字段]
使用您需要的脚本创建私有游戏对象对象;
需要pS的脚本的私有类;
void Start()
{     
pS=objectWithYourScript.GetComponent();
pS.varName=12345;
}

所以,在你的拍摄脚本中:

Public Bool isMoving;

void Shoot()
{
    //I'm assuming you also dont want muzzleflash to play.
    if (isMoving != true)
    {
        MuzzleFlash.Play();    

        RaycastHit hit;
        if (Physics.Raycast(cam.transform.position, cam.transform.forward, out hit, Range))
        {

            Debug.Log(hit.transform.name);

            EnemyHealth enemy = hit.transform.GetComponent<EnemyHealth>();
            if (enemy != null)
            {
                enemy.TakeDamage(Damage);
            }
        }
    }
}
Public Bool正在移动;
空射()
{
//我想你也不想让muzzleflash玩。
如果(isMoving!=真)
{
口吻闪光。播放();
雷卡斯特击中;
if(物理光线投射(cam.transform.position,cam.transform.forward,out hit,Range))
{
Log(hit.transform.name);
EnemyHealth敌人=hit.transform.GetComponent();
如果(敌人!=null)
{
敌人。遭受伤害(损害);
}
}
}
}
你的动作脚本:

//put your shooting scripts name below.
private ShootScript shootScript; 

void start()
{    

    shootScript = GetComponent<ShootScript>();

}

void Movement()
{
    shootScript.isMoving = Input.GetAxis("Vertical") != 0f 
                           || Input.GetAxis("Horizontal") != 0f ; 

    transform.Translate(Vector3.forward * Input.GetAxis("Vertical") 
                        * WalkSpeed * Time.deltaTime);
    transform.Translate(Vector3.right * Input.GetAxis("Horizontal") 
                        * WalkSpeed * Time.deltaTime);

    // GetKey is true on every frame that shift is held down, and false when it isn't
    // GetKeyDown is only true on the first frame in a row that shift is held down    
    if (Input.GetKey(KeyCode.LeftShift))
    {
        WalkSpeed = RunSpeed;
    }
    else 
    {
        WalkSpeed = DefaultSpeed;
    }
}
//将您的拍摄脚本名称放在下面。
私人射击脚本;
void start()
{    
shootScript=GetComponent();
}
空位移动()
{
shootScript.isMoving=Input.GetAxis(“垂直”)!=0f
||输入。GetAxis(“水平”)!=0f;
transform.Translate(Vector3.forward*Input.GetAxis(“垂直”)
*步行速度*Time.deltaTime);
transform.Translate(Vector3.right*Input.GetAxis(“水平”)
*步行速度*Time.deltaTime);
//按住shift键的每一帧上的GetKey都为true,否则为false
//GetKeyDown仅在按住shift键的行的第一帧上为真
if(Input.GetKey(KeyCode.LeftShift))
{
行走速度=运行速度;
}
其他的
{
步行速度=默认速度;
}
}

唯一的问题是,控制移动的角色控制器脚本在父对象上,而拍摄脚本连接到子对象。好的,这有点帮助,但我仍然不知道如何为其生成if语句。它只是给了我一个private parentScript=pS的错误;我建议查阅一些关于如何引用其他脚本变量的视频。我不想这件事拖得太长,让人讨厌。有很多视频,一旦你有了,如果你理解它,其他的逻辑应该会起作用。很抱歉给您带来不便,我很难在moment@EthanK-B我修正了这个问题中的一些语法错误。你从来没有提到你的脚本类的名称,所以我不能把确切的术语放进去。希望它们有意义。再次感谢鲁齐姆的出色工作!希望这能解决你的问题,伊森。
//put your shooting scripts name below.
private ShootScript shootScript; 

void start()
{    

    shootScript = GetComponent<ShootScript>();

}

void Movement()
{
    shootScript.isMoving = Input.GetAxis("Vertical") != 0f 
                           || Input.GetAxis("Horizontal") != 0f ; 

    transform.Translate(Vector3.forward * Input.GetAxis("Vertical") 
                        * WalkSpeed * Time.deltaTime);
    transform.Translate(Vector3.right * Input.GetAxis("Horizontal") 
                        * WalkSpeed * Time.deltaTime);

    // GetKey is true on every frame that shift is held down, and false when it isn't
    // GetKeyDown is only true on the first frame in a row that shift is held down    
    if (Input.GetKey(KeyCode.LeftShift))
    {
        WalkSpeed = RunSpeed;
    }
    else 
    {
        WalkSpeed = DefaultSpeed;
    }
}