我尝试使用统一的新UI图像系统实现健康到我的播放器.但它不工作.任何人都帮助我.谢谢.
using UnityEngine.UI;
if (health_value == 3) {
GameObject.Find("health").GetComponent<Image>().color.a = 1;
GameObject.Find("health1").GetComponent<Image>().color.a = 1;
GameObject.Find("health2").GetComponent<Image>().color.a = 1;
}
Run Code Online (Sandbox Code Playgroud)
我得到这个错误.
error CS1612: Cannot modify a value type return value of `UnityEngine.UI.Graphic.color'. Consider storing the value in a temporary variable
Run Code Online (Sandbox Code Playgroud) 我正在OS X 10.10上开发Unity 2D游戏项目,我无法拖动文件或文件夹,它会显示此错误.
No Drag&Drop has been setup. Please
UnityEditor.DockArea:OnGUI()
Run Code Online (Sandbox Code Playgroud)
我试过了:
Assets文件夹并选择Reimport All但它似乎不起作用,如何解决它?
我正在尝试使用Singleton作为我在Unity中制作的游戏中的任务组织的全局数据结构.
我的Singleton类代码如下:
public class TaskManager : MonoBehaviour
{
private List<Task> Tasks;
private static TaskManager instance;
private TaskManager()
{
Tasks = new List<Task>();
}
public static TaskManager Instance
{
get
{
if(instance == null)
{
instance = new TaskManager();
}
return instance;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我用这个例子作为我班级的基础:https: //msdn.microsoft.com/en-us/library/ff650316.aspx
但是,问题是,当我尝试在不同的脚本中访问TaskManager时,值不会被保存.
例如,我在一个脚本中执行以下操作:
TaskManager tm = TaskManager.Instance;
Task newTask = new Task();
tm.PushTask(newTask);
print(tm.GetTaskList().Count);
Run Code Online (Sandbox Code Playgroud)
通过这个我可以看到TaskManager的计数为1,显示了新任务.
但是我的另一个脚本试图从TaskManager中读取:
TaskManager tm = TaskManager.Instance;
List<Task> l = tm.GetTaskList();
print(l.Count);
Run Code Online (Sandbox Code Playgroud)
当我这样做时,Count返回0,表明上面的任务来自世界尚未保存到TaskManager.
我很确定这个错误是因为我误解了如何使用Singletons.我是否需要为TaskManager实例实现set属性?或者我正在制造另一个错误?
谢谢!
编辑:
PushTask()代码如下:
public void PushTask(Task …Run Code Online (Sandbox Code Playgroud) 我有一个简单的旋转动画,可以在其轴上旋转一个对象.目前它的旋转太快了,我想放慢速度,我试过增加样品?但我对动画知之甚少,所以我可能会很富裕.如何减慢动画速度?它只有两个键.
我想使用 Unitys 排序图层对我的精灵进行排序。我将自定义着色器附加到我的一个 Sprite 上。遗憾的是,带有这个着色器的精灵总是拖在其他精灵后面,不尊重排序层。
如何在我的着色器中实现排序层方面?
这就是有问题的着色器:提前致谢
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Main Tex (RGBA)", 2D) = "white" {}
_Progress ("Progress", Range(0.0,1.0)) = 0.0
}
SubShader {
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
uniform sampler2D _MainTex;
uniform float4 _Color;
uniform float _Progress;
struct v2f {
float4 pos : POSITION;
float2 uv : TEXCOORD0;
};
v2f vert (appdata_base v)
{
v2f o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.uv = TRANSFORM_UV(0);
return o;
} …Run Code Online (Sandbox Code Playgroud) 在Unity UI中,LayoutElement具有最小,首选和固定大小,但没有max size属性。
例如,如果我有一个text1和
layoutElement.flxibleWith = 1
layoutElement.minHeight = 19
Run Code Online (Sandbox Code Playgroud)
text1 一行txt:
但是,当我在text1其中加载文本时,它的高度会无限扩展:
我已经编写了一个脚本:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
[ExecuteInEditMode]
[RequireComponent(typeof(LayoutElement))]
public class LayoutElementMaxSize : MonoBehaviour
{
private LayoutElement layoutElement;
private ContentSizeFitter contentSizeFitter;
private RectTransform rectransform;
public bool controllWidth;
public bool controllHeight;
public float maxHight;
public float maxWidth;
void Start()
{
layoutElement = GetComponent<LayoutElement>();
rectransform = GetComponent<RectTransform>();
}
public void Update()
{
if(rectransform.hasChanged)
{
rectransform.hasChanged = false;
if (controllHeight)
{
layoutElement.preferredHeight = -1;
layoutElement.CalculateLayoutInputHorizontal();
layoutElement.CalculateLayoutInputVertical(); …Run Code Online (Sandbox Code Playgroud) 我对 Unity 还很陌生,如果您对这个问题有任何帮助,我将不胜感激。
我的设置可以很好地使用我设计的屏幕分辨率。我相信当我更改分辨率时,UI 元素可以很好地缩放,但我刚刚发现我制作的碰撞器(图像中的红线)却不能。目前,我正在使用添加到画布上的边缘碰撞器。我还尝试向每个面板添加单独的边缘碰撞器。然后我尝试了盒子碰撞器。我尝试过将面板+碰撞器变成预制件。一切都无济于事。我还尝试通过脚本设置边缘碰撞器的点,以便它们始终包裹在面板周围,但我无法得到任何碰撞(注意:我不知道如何显示/渲染这个运行时生成的碰撞器所以我不能完全确定它们是否正是我想要的样子)。
太棒了;有人知道如何使碰撞器缩放或环绕它们所绑定的 UI 元素吗?
我有一个 LineRenderer 路径来显示高尔夫球的路径。请参见图片中的栗色路径。
private void createTrail()
{
lineRenderer.SetColors(tracerColor, tracerColor);
lineRenderer.SetVertexCount(maxVertexCount);
for (int idx = 0; idx < (maxVertexCount - 2); idx++)
{//Add another vertex to show ball's roll
lineRenderer.SetPosition(idx, new Vector3((float)pts[idx * (int)positionSampling].z, (float)pts[idx * (int)positionSampling].y, (float)pts[idx * (int)positionSampling].x));
}
lineRenderer.SetPosition(maxVertexCount - 2, new Vector3((float)pts[goal - 1].z, (float)pts[goal - 1].y, (float)pts[goal - 1].x));
lineRenderer.SetPosition(maxVertexCount - 1, transform.position);
}
Run Code Online (Sandbox Code Playgroud)
路径是使用 中的点绘制的pts[] array。
在重复显示时,我需要清除旧路径以重新绘制相同的路径。如何清除旧路径?
unity3d-2dtools ×10
c# ×5
unity5 ×2
animation ×1
cg ×1
game-physics ×1
shader ×1
singleton ×1
unity3d-gui ×1
unityscript ×1