繁体   English   中英

我正在尝试使用 Unity 制作 FPS 足球游戏,但我的脚本不起作用

[英]I am trying to make an FPS soccer game using Unity, but my script isn't working

所以,我正在尝试从头开始创建一个足球游戏......到目前为止我所做的只是设置球。 这就是我希望它的工作方式:当玩家与球发生碰撞时,球会向前跳一点。 如果您开始奔跑,球将被推得更远。

现在,这是我的球脚本(我使用标准 FPSController 作为角色):

 using UnityEngine;
 using System.Collections;

 public class BallController : MonoBehaviour {

     private Rigidbody rb;

     public GameObject character;
     public float moveSpeed = 1000;
     public float shootSpeed = 2000;

     bool isTurnedUp = false;
     bool isTurnedDown = false;
     bool done = false;

     // Use this for initialization
     void Start () {
         rb = GetComponent<Rigidbody>();

     }

     // Update is called once per frame
     void FixedUpdate () {

         //Debug.Log(isTurnedUp + ", " + isTurnedDown);

         switch (character.GetComponent<UnityStandardAssets.Characters.FirstPerson.FirstPersonController>().m_IsWalking)
         {
             case true:
                 if (isTurnedUp == false)
                 {
                     moveSpeed = moveSpeed / 1.4f;
                     isTurnedUp = true;
                     isTurnedDown = false;
                 }
                 break;

             case false:
                 if (isTurnedDown == false)
                 {
                     moveSpeed = moveSpeed * 1.4f;
                     isTurnedDown = true;
                     isTurnedUp = false;
                 }
                 break;
         }
     }

     void Update()
     {

         if (Input.GetMouseButtonDown(0))
         {     
             if (Vector3.Distance(gameObject.transform.position, character.transform.position) <= 5)
             {
                 float distance = Vector3.Distance(gameObject.transform.position, character.transform.position);
             }
         }

     }


     void OnCollisionEnter(Collision collision) {

         FixedUpdate();
         if (done == false) {
             rb.AddForce(Vector3.forward * moveSpeed, ForceMode.Impulse);
             done = true;
         }
         else {

             done = false;

         }      
     }     

     //other
     void OnDrawGizmosSelected()
     {
         Gizmos.color = Color.yellow;
         Gizmos.DrawWireSphere(transform.position, 2);
     }
 }

我的问题是球没有按照我想要的方式运行……如果我触摸它时球会向前跳,感觉就像是运气。 有人能告诉我我做错了什么吗?

OnCollisionEnter内部,您需要确保球只能由玩家踢。 您可以通过检查碰撞的名称或标签来检查玩家是否与球发生碰撞。 以下示例使用该名称并假设您的玩家 GameObject 名为“Player”。

删除done标志,因为这将只允许玩家在每次碰撞时踢球,并删除FixedUpdate()调用,因为FixedUpdate()已经在每次物理计算时自动调用。

最后,如果您想将球踢离玩家,那么您需要计算远离碰撞点的方向,而不是使用Vector3.forward ,如下所示。

void OnCollisionEnter(Collision collision)
{
    if(collision.gameObject.name == "Player")
    {
        Vector3 direction = (collision.transform.position - transform.position).normalized;
        rb.AddForce(-direction * moveSpeed, ForceMode.Impulse);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM