unityzgy/Assets/ThirdPackages/VRPackage/SteamVR/InteractionSystem/Longbow/Scripts/BalloonSpawner.cs
ayuan9957 bf12e02276 feat: 多语言本地化系统 - 支持中/英/法/俄实时切换
- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg)
- LoginPanel: InputField placeholder本地化、字体颜色保持
- HistoryPanel: 用时数据本地化、placeholder本地化
- RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建)
- AppraiseWindowBase: 评价等级本地化、操作消息重建
- EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized
- StudentOperateRecorder: 新增InjectOperateMsgLocalized方法
- LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选
- 字体切换时保留颜色和verticalOverflow
2026-07-16 10:05:59 +08:00

122 lines
2.8 KiB
C#

//======= Copyright (c) Valve Corporation, All rights reserved. ===============
//
// Purpose: Spawns balloons
//
//=============================================================================
using UnityEngine;
using System.Collections;
namespace Valve.VR.InteractionSystem
{
//-------------------------------------------------------------------------
public class BalloonSpawner : MonoBehaviour
{
public float minSpawnTime = 5f;
public float maxSpawnTime = 15f;
private float nextSpawnTime;
public GameObject balloonPrefab;
public bool autoSpawn = true;
public bool spawnAtStartup = true;
public bool playSounds = true;
public SoundPlayOneshot inflateSound;
public SoundPlayOneshot stretchSound;
public bool sendSpawnMessageToParent = false;
public float scale = 1f;
public Transform spawnDirectionTransform;
public float spawnForce;
public bool attachBalloon = false;
public Balloon.BalloonColor color = Balloon.BalloonColor.Random;
//-------------------------------------------------
void Start()
{
if ( balloonPrefab == null )
{
return;
}
if ( autoSpawn && spawnAtStartup )
{
SpawnBalloon( color );
nextSpawnTime = Random.Range( minSpawnTime, maxSpawnTime ) + Time.time;
}
}
//-------------------------------------------------
void Update()
{
if ( balloonPrefab == null )
{
return;
}
if ( ( Time.time > nextSpawnTime ) && autoSpawn )
{
SpawnBalloon( color );
nextSpawnTime = Random.Range( minSpawnTime, maxSpawnTime ) + Time.time;
}
}
//-------------------------------------------------
public GameObject SpawnBalloon( Balloon.BalloonColor color = Balloon.BalloonColor.Red )
{
if ( balloonPrefab == null )
{
return null;
}
GameObject balloon = Instantiate( balloonPrefab, transform.position, transform.rotation ) as GameObject;
balloon.transform.localScale = new Vector3( scale, scale, scale );
if ( attachBalloon )
{
balloon.transform.parent = transform;
}
if ( sendSpawnMessageToParent )
{
if ( transform.parent != null )
{
transform.parent.SendMessage( "OnBalloonSpawned", balloon, SendMessageOptions.DontRequireReceiver );
}
}
if ( playSounds )
{
if ( inflateSound != null )
{
inflateSound.Play();
}
if ( stretchSound != null )
{
stretchSound.Play();
}
}
balloon.GetComponentInChildren<Balloon>().SetColor( color );
if ( spawnDirectionTransform != null )
{
balloon.GetComponentInChildren<Rigidbody>().AddForce( spawnDirectionTransform.forward * spawnForce );
}
return balloon;
}
//-------------------------------------------------
public void SpawnBalloonFromEvent( int color )
{
// Copy of SpawnBalloon using int because we can't pass in enums through the event system
SpawnBalloon( (Balloon.BalloonColor)color );
}
}
}