天道酬勤,学无止境

unity3d

Detecting if user is playing music from another app

问题 我的游戏有游戏内配乐,如果用户从 Android 或 iOS 上的媒体应用程序播放他们自己的音乐,我想暂停音乐。 有没有一种方法可以有效地在 update() 函数中运行? 提前致谢! 回答1 您可以检查音乐是否按照这篇文章中的描述播放。 AudioManager manager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE); if(manager.isMusicActive()) { // do something - or do it not } 将它包裹在 Java 中的一个类中,然后在AndroidJavaClass API 的帮助下从 C# 调用它。 但这需要Java。 您可以使用该代码并将其转换为完全不使用 Java 的 C#。 获取 UnityPlayerPlayer、Activity 和 Context。 其余的可以由AndroidJavaClass处理。 这是不需要 Java 插件的移植 C# 版本。 bool isMusicPlaying() { const string AUDIO_SERVICE = "audio"; AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player

2022-05-17 03:00:16    分类:技术分享    c#   android   ios   unity3d   audio-player   android-music-player

Collision Detection for fast moving game object in Unity [duplicate]

问题 这个问题在这里已经有了答案: 如何防止对撞机相互穿过? (8 个回答) 2年前关闭。 我正在开发一款基本的太空射击游戏,但在使用触发对撞机时遇到了问题。 在游戏中,我有一个 Bullet 预制件,上面附有一个 Capsule Trigger Collider,而敌人现在是一个附有盒子碰撞器的基本立方体。 当我运行游戏时,我开始射击子弹,直到几次射击后敌人立方体才消失。 这是我的子弹预制代码: void OnTriggerEnter(Collider col) { if (col.tag == "Enemy") { Destroy (col.gameObject); } } 以及我的每个游戏对象的属性截图: 子弹预制件: 这是敌人的立方体: 这是一个链接到正在发生的事情的视频...... https://youtu.be/NjHK6oVP0OQ 回答1 我知道这个问题可能与评论中发布的问题相似,但是我确实找到了另一种解决方案,它可能对有这个确切问题的人有用。 发生错误是因为我的“Bullet”预制件移动得太快以至于无法检测到碰撞。 修复:我将 Bullet 预制刚体的碰撞检测属性更改为连续动态,因为它移动得很快。 对刚体碰撞检测模式的完整参考链接如下。 https://docs.unity3d.com/ScriptReference/Rigidbody

2022-05-17 02:50:33    分类:技术分享    c#   unity3d   collider

Pass large arrays of structs from C# unity script to C++ dll using GCHandle crashes after C++ function execution

问题 我想将结构数组从 C# 统一脚本传递给 C++ 本机插件。 我做了如下操作,我可以访问数据,但是在执行 c++ 函数后我的应用程序崩溃了,我不知道为什么。 C# 方面: [StructLayout(LayoutKind.Sequential)] public struct SimpleVector3 { public float Vx, Vy, Vz, Nx, Ny, Nz; public SimpleVector3(float x, float y, float z, float xx, float yy, float zz) { Vx = x; Vy = y; Vz = z; Nx = xx; Ny = yy; Nz = zz; } } [DllImport(DLL)] public static extern int getSomeInt(); [DllImport(DLL, CallingConvention = CallingConvention.Cdecl)] public static extern bool PopulateVerts([In] IntPtr verts, int numOfVertices); void Start () { Vector3 sceneOrigin = Camera.main.transform.position; Debug

2022-05-16 21:50:04    分类:技术分享    c#   c++   unity3d   native

Unity - Clamp Rotation between arbitrary angles

问题 我有一个任务,我必须在其他两个角度之间夹一个角度。 问题是限制可以> 360或< 0 (例如 [-45,45] 或 [275,45])。 考虑到所有特殊情况,有没有一种干净的方法来做到这一点? (例如,范围 [-45,45] 和 225 的输入角度应为 -45)。 提前致谢! PS我正在使用统一,所以我手头有所有默认的四元数方法。 当前代码: Quaternion inputAngle = Quaternion.identity; if (Character.IsFacingRight) inputAngle = Quaternion.FromToRotation(forwardVector, playerInput); else inputAngle = Quaternion.FromToRotation(playerInput, forwardVector); Quaternion minAngle = Quaternion.Euler(0F, 0F, addedForce.force.angle); Quaternion angleRange = Quaternion.Euler(0F, 0F, addedForce.force.angleRange); Quaternion maxAngle = angleRange * minAngle; // var yaw =

2022-05-16 17:29:24    分类:技术分享    c#   unity3d   rotation   angle   quaternions

Camera units in Unity5

问题 我目前正在编写一个 2D 俯视图统一游戏。 我想设置相机,例如,只有一个特定的区域是可见的。 这意味着我知道我的区域的大小,并且当跟随玩家的相机当前到达该区域的边界时,我想要可见的停止。 所以这是我的问题:我知道摄像机在哪里以及它如何跟随玩家,但我不知道如何计算场地边界和摄像机看到的边界之间的距离。 我怎样才能做到这一点? 回答1 本质上,将您的可玩区域视为一个矩形。 然后,在该矩形内创建一个较小的矩形,以适应相机的正交尺寸。 在计算水平边界时不要忘记包含相机的纵横比。 Rect myArea; // this stores the bounds of your playable area Camera cam; // this is your orthographic camera, probably Camera.main GameObject playerObject; // this is your player float newX = Mathf.Clamp( playerObject.transform.position.x, myArea.xMin + cam.orthographicSize * cam.aspect, myArea.xMax - cam.orthographicSize * cam.aspect ); float newY = Mathf

2022-05-16 15:49:08    分类:技术分享    c#   unity3d   camera   unity5

Sending data using intent from Unity app to Android app

问题 我有两个独立的应用程序,AppA(使用 Android Studio 开发)和 AppB(使用 Unity 开发)。 AppA 将启动 AppB(这是一个游戏应用程序)。 用户玩完游戏(AppB)并点击退出按钮后,它会将游戏记录(字符串数组)发送回 AppA。 目前,AppA 能够启动 AppB,但我无法让 AppB 将游戏记录(使用意图)发送回 AppA。 AppA 的 StartGameActivity : Intent launchGameIntent = getPackageManager().getLaunchIntentForPackage("com.joy.AppB"); startActivity(launchGameIntent); retrieveGameRecords = (Button) findViewById(R.id.retrieveRecordsButton); retrieveGameRecords.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //Retrieving game records from game app database = new gameDbHelper(StartGameActivity.this

2022-05-16 14:09:04    分类:技术分享    java   c#   android   android-intent   unity3d

Unity:How to check if area inside camera view?

问题 我正在构建一个僵尸生存游戏,在游戏中我有一些游戏对象充当僵尸的生成点。我想在生成点不在相机视图中时生成僵尸,所以我如何检查是否生成点位于相机视图之外,以便生成它们。 下面是我的敌人生成脚本。 敌人产卵 public class EnemyManager : MonoBehaviour { PlayerHealth playerHealth; // Reference to the player's heatlh. public GameObject enemy; // The enemy prefab to be spawned. public float spawnTime = 3f; // How long between each spawn. public Transform[] spawnPoints; // An array of the spawn points this enemy can spawn from. void Start () { // Call the Spawn function after a delay of the spawnTime and then continue to call after the same amount of time. playerHealth = GameObject.FindWithTag("Player

2022-05-16 11:30:43    分类:技术分享    unity3d

Unity3D - Light deactivated when facing opposite direction

问题 我在我的场景中放了一盏灯。 当我面对那盏灯时,它照亮了地面,但是当我转向相反的方向时,地面上的灯就消失了。 我认为这可能是 Unity 的一些默认行为。 有没有办法可以解决这个问题? 回答1 Unity 使用平截头体剔除来节省性能,因此它只绘制相机可视区域内的项目。 因此,您身后的粒子不会被绘制,附着在它们上的任何灯光也不会被绘制。 场景关键的灯光通常不附加到粒子上,因此如果它们与粒子一起隐藏,通常不必担心。 对于常规灯光(未附加到粒子),Unity 应该渲染灯光,只要它影响相机平截头体内的对象。 如果您使用传统灯,您应该会看到更好的效果。 回答2

2022-05-16 05:35:03    分类:技术分享    unity3d   lighting

Load Image from Stream/StreamReader to Image OR RawImage component

问题 我正在使用 AWS Unity (v3.3.50.0):从 https://aws.amazon.com/mobile/sdk/ 下载的 S3 SDK (AWSSDK.S3.3.3.5.4.unitypackage)。 我的 Unity 版本是 5.5.1。 我想下载一个放在 S3 存储桶上的图像,存储桶已配置并且可以下载。 我将字符串视为响应数据。 但我无法在 S3 示例 GetObject() 函数中将返回的 StreamReader 转换为 UnityEngine.UI.Image.sprite 或 UnityEngine.UI.RawImage.texture 。 private void GetObject() { ResultText.text = string.Format("fetching {0} from bucket {1}", SampleFileName, S3BucketName); Client.GetObjectAsync(S3BucketName, SampleFileName, (responseObj) => { string data = null; var response = responseObj.Response; if (response.ResponseStream != null) { using

2022-05-16 03:24:13    分类:技术分享    c#   unity3d   amazon-s3   aws-sdk   streamreader

PlayerPrefs not saving on Android

问题 我在 unity3d 5.4 中遇到了 PlayerPrefs 的一些问题。 (我使用 5.4 是因为 5.5 中有一个破坏游戏的错误。) 这是代码: void OnApplicationQuit() { PlayerPrefs.SetInt("numerator", numerator); } 这在编辑器中运行良好,但在移动设备上却是另一回事。 它什么也没做。 回答1 在 PlayerPrefs.SetInt 之后调用PlayerPrefs.SetInt 。 这可能会解决您的问题。 void OnApplicationQuit() { PlayerPrefs.SetInt("numerator", numerator); PlayerPrefs.Save(); } 如果这不能解决您的问题,请在 OnApplicationPause 或OnDisable函数中执行保存操作。 void OnApplicationPause(bool pauseStatus) { if (pauseStatus) { PlayerPrefs.SetInt("numerator", numerator); PlayerPrefs.Save(); } } 如果这两个都失败,请看这里如何使用 Json 保存和加载游戏数据。

2022-05-16 03:07:10    分类:技术分享    c#   unity3d