大家好!
我已经尝试了几个小时了,我是一个新手,所以我知道我一定是漏掉了什么。我有一个3D游戏,玩家是一个灰尘球,可以捡起灰尘块,这些灰尘块可以让玩家进行双跳,每次跳跃都会消耗一个灰尘块,所有这一切都在工作得很好,但我的问题是,我有一个脚本来收集灰尘,还有一个脚本来处理双跳/移动,我没有问题地在灰尘脚本中添加更多灰尘,但是否有办法从灰尘脚本的运动脚本中减少1个灰尘?
参考代码:
灰尘脚本
private void OnTriggerEnter(Collider collision)
{
if (collision.CompareTag("Dust"))
{
AddDust(1);
UpdateUI();
audioSource.PlayOneShot(DustSound, DustVolume);
Destroy(collision.gameObject);
}
}
void AddDust(int amount)
{
currentDust += amount;
Debug.Log("Dust: " + currentDust);
if (currentDust > maxDust)
{
currentDust = maxDust;
}
UpdateUI();
}
双跳脚本
void Start()
{
currentDust = GetComponent<DustScript>().currentDust;
rb = GetComponent<Rigidbody>();
audioSource = GetComponent<AudioSource>();
wasGrounded = IsGrounded();
}
if (Input.GetKeyDown(KeyCode.Space))
{
if (timeSinceGrounded <= coyoteTime && !jumpLocked)
{
jumpLocked = true;
lastGroundedTime = -100f;
jumpHoldTimer = jumpHoldTime;
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
audioSource.PlayOneShot(jumpSound, jumpVolume);
}
else if (Dust > 0 && !jumpLocked)
{
rb.linearVelocity = Vector3.zero;
jumpLocked = true;
lastGroundedTime = -100f;
jumpHoldTimer = jumpHoldTime;
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
audioSource.PlayOneShot(jumpSound, jumpVolume);
SubtractDust(1);
}
}
public void SubtractDust(int amount)
{
Dust -= amount;
}
public bool IsGrounded()
{
Vector3 center = transform.position + new Vector3(raycastCenterX, 0, 0);
Vector3 left = transform.position + new Vector3(raycastLeftX, 0, 0);
Vector3 right = transform.position + new Vector3(raycastRightX, 0, 0);
return Physics.Raycast(center, Vector3.down, raycastDistance, groundLayer)
|| Physics.Raycast(left, Vector3.down, raycastDistance, groundLayer)
|| Physics.Raycast(right, Vector3.down, raycastDistance, groundLayer);
}
解决方案:
你可以在灰尘脚本中添加一个新的方法,例如SubtractDustFromMovementScript(int amount),这个方法可以接受一个灰尘数量参数,减少灰尘数量,并且在运动脚本中调用这个方法。
灰尘脚本
void SubtractDustFromMovementScript(int amount)
{
Dust -= amount;
}
双跳脚本
else if (Dust > 0 && !jumpLocked)
{
rb.linearVelocity = Vector3.zero;
jumpLocked = true;
lastGroundedTime = -100f;
jumpHoldTimer = jumpHoldTime;
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
audioSource.PlayOneShot(jumpSound, jumpVolume);
GetComponent<DustScript>().SubtractDustFromMovementScript(1);
}
这样一来,灰尘脚本就可以从运动脚本中减少1个灰尘了。
评论 (0)