我创建了一个Unity3d项目,我在对象后面使用了一些聚光灯来获取它们的阴影.我试图获得一次反映在地板上的阴影的真实尺寸(使用我的比例).有没有办法做到这一点?
我是品牌新Unity3D 5,我有我的第一个2D游戏,涉及碰撞检测的问题。我的移动物体是一个球,有 Rigidbody2D 和 CircleCollider2D。我的固定“碰撞器或触发器”是一个 BoxCollider 并附有一个脚本。OnTriggerEnter2D 应该在球穿过固定框时触发。我也试过 OnCollisionEnter2D 但我相当肯定我应该使用 OnTriggerEnter2D 因为我的固定框被标记为触发器。
我的代码:
public class LoseCollider : MonoBehaviour {
public LevelManager levelManager;
void OnCollisionEnter2D(Collision2D collision)
{
print("collide");
levelManager.LoadLevel("Lose");
}
void OnTriggerEnter2D(Collider2D trigger)
{
print("trigger");
levelManager.LoadLevel("Lose");
}
void OnCollisionEnter(Collision collision)
{
print("collide");
levelManager.LoadLevel("Lose");
}
void OnTriggerEnter(Collider trigger)
{
print("trigger");
levelManager.LoadLevel("Lose");
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在测试所有变体,但没有调用任何变体。这是我的对象的 Unity 属性:
和
我确定我错过了一些简单的东西,如果有人可以请向我指出。
我正在尝试将图像从 url 加载到 GameObject。
我找到了下一个教程:
https://www.youtube.com/watch?v=8UK2EsKBzv8
下载成功,但是看不到图片。
我究竟做错了什么?
// Use this for initialization
void Start () {
StartCoroutine(loadSpriteImageFromUrl("https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/408px-Google_2015_logo.svg.png"));
}
IEnumerator loadSpriteImageFromUrl(string URL)
{
// Check internet connection
if (Application.internetReachability == NetworkReachability.NotReachable)
{
yield return null;
}
var www = new WWW(URL);
Debug.Log("Download image on progress");
yield return www;
if (string.IsNullOrEmpty(www.text))
{
Debug.Log("Download failed");
}
else
{
Debug.Log("Download succes");
Texture2D texture = new Texture2D(1, 1);
www.LoadImageIntoTexture(texture);
Sprite sprite = Sprite.Create(texture,
new Rect(0, 0, texture.width, texture.height),
Vector2.one / 2);
GetComponent<SpriteRenderer>().sprite = sprite; …Run Code Online (Sandbox Code Playgroud) 我有一个名为Player的GameObject 和一个Canvas。该HealthBar游戏对象是画布的孩子(画布> HealthBar) 。在播放器后面有脚本的HP酒吧。它应该跟随玩家在其上方的固定位置,因此它位于精灵顶部附近。这是HP Follow Script的“关注”部分。
void Update ()
{
Vector3 currentPos = transform.position;
Vector3 playerPos = Camera.main.WorldToViewportPoint (Player.transform.position);
transform.position = playerPos;
Run Code Online (Sandbox Code Playgroud)
问题是HP条随角色移动,但移动速度却很小。例如,如果玩家移动一个单位,则小节移动0.1个单位。
所以目前我有一个8秒长的音频剪辑。但是,我希望能够在发生特定情况时停止播放。像这样:
private AudioSource soundPlayer2D;
private AudioClip sound;
void Start(){
GameObject new2DsoundPlayer = new GameObject ("2DSoundPlayer");
soundPlayer2D = new2DsoundPlayer.AddComponent<AudioSource> ();
new2DsoundPlayer.transform.parent = transform;
}
void Update() {
if(shouldPlayAudio){
soundPlayer2D.PlayOneShot (sound, fxVolumePercentage * allVolumePercentage);
} else if(shouldStopAudio){
//Stop Audio <--
}
}
Run Code Online (Sandbox Code Playgroud)
编辑1:注意,我只想停止特定的音频剪辑,而不是音频源
我有txt包含游戏中地图数据的文件.问题是文件存储在中,Application.persistentDataPath所以我甚至可以从我的Android设备(创建的地图创建者)更改它,那么如何在我的PC上创建包含基本地图的txt文件,并在persistentDataPath安装时将其显示在我的Android设备上应用?
我已经将一个脚本附加到Unity游戏对象.该脚本包含各种公共属性,包括我自己的一些类.如下面的简化代码所示,其中TestMonoBehaviorClass附加到游戏对象并且TestClass' TestString在检查器中显示.
public class TestMonoBehaviorClass : MonoBehaviour
{
public TestClass Test;
}
[System.Serializable]
public class TestClass
{
public string TestString;
public TestClass ()
{
Debug.Log ("TestClass creator called.");
this.TestString = "Reset String";
}
}
Run Code Online (Sandbox Code Playgroud)
当我将脚本附加到游戏对象时,我希望调用一次TestClass(编辑:不是从MonoBehavior派生的构造函数)的构造函数.但如果我在Unity编辑器中运行程序然后停止程序,则会调用它四次.如果我将脚本附加到两个游戏对象上,则会七次.至少我多次在控制台中看到Debug.Log的输出.
不过,如果我TestString在编辑器中更改属性的内容,我手动输入的内容不会被覆盖!
为什么构造函数经常调用?何时在Unity的执行顺序中调用(Unity的事件函数执行顺序)?我可以忽略调用,还是必须在构造函数中添加特殊处理?到目前为止,我没有看到任何实际问题或副作用.
编辑:似乎只调用没有参数的构造函数.如果我只有带参数的构造函数,则不调用任何构造函数.
如何使用HEX值更改Unity中的按钮颜色?
我尝试了这个,但它不起作用,也许我在这里犯了一个错误:
btn.image.color = ColorUtility.TryParseHtmlString(DADADAFF, out color);
Run Code Online (Sandbox Code Playgroud) 使用Unity,我正在开发一款游戏,所有Gameobjects带有某个标签的游戏都会定期消失/重新出现(平均每10秒钟).我GameObject.FindGameObjectsWithTag()用来创建一个Gameobject[]通过我每次枚举对象需要可见/不可见的通过.我不能在Start上调用它一次,因为Gameobjects在播放时会创建新的.我认为Gameobject[]每次创建/销毁某些内容时访问和更改都会更糟.有没有更好的方法来处理这个问题.我知道GameObject.Find方法对性能的影响有多严重......
我刚刚开始使用 Unity,试图制作一个简单的 3D 平台游戏,在实现这一点之前,我需要降低运动速度。当玩家跳跃时我的问题就出现了。当他们跳跃时,他们可以在空中随心所欲地跳跃。我希望它只跳一次。有人可以帮忙吗?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Playermovement : MonoBehaviour
{
public Rigidbody rb;
void Start ()
}
void Update()
{
bool player_jump = Input.GetButtonDown("DefaultJump");
if (player_jump)
{
rb.AddForce(Vector3.up * 365f);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)