存档

‘游戏开发’ 分类的存档

GameObject.GetComponent

2010年11月16日 没有评论

function GetComponent (type : Type) : Component

描述

返回游戏对象(gameObject)中附着的元件的类型(component of Type),如果没有附着,则返回一个Null。你可以通过内建元件或者带有这个功能的脚本来访问。

GetComponent是访问其他元件的主要方法。在Javascript脚本中,这种脚本的类型总是在项目视图中所看到的脚本的名称。

示例:

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Start() {
        Transform curTransform;
        curTransform = gameObject.GetComponent<Transform>();
        curTransform = gameObject.transform;
    }
    void Update() {
        ScriptName other = gameObject.GetComponent<ScriptName>();
        other.DoSomething();
        other.someVariable = 5;
    }
}

function GetComponent (type : string) : Component

描述

返回游戏对象(gameObject)中所附着的元件的名称(the component with name type),如果没有附着,则返回一个Null。

以为性能的缘故,最好使用GetComponent来获取元件类型,而不是元件名称。有时候,你可能不需要获取类型,比如当你试图从Javascript脚本中去访问C#脚本。这种情况下,你可以简单的通过名称访问元件,而不是通过类型。

示例:

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Update() {
        ScriptName other;
        other = gameObject.GetComponent("ScriptName") as ScriptName;
        other.DoSomething();
        other.someVariable = 5;
    }
}
分类: 游戏开发 标签:

Camera.ScreenToWorldPoint

2010年11月15日 没有评论

function ScreenToWorldPoint (position : Vector3) : Vector3

描述

将屏幕空间的位置转换为世界空间的位置。

屏幕空间是以像素点来描述的。屏幕的左下角的座标为(0,0);右上角的座标为(pixelWidth,pixelHeight)。Z值位置是以世界单位到相机的距离。

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnDrawGizmosSelected() {
        Vector3 p = camera.ScreenToWorldPoint(new Vector3(100, 100, camera.nearClipPlane));
        Gizmos.color = Color.yellow;
        Gizmos.DrawSphere(p, 0.1F);
    }
}
分类: 游戏开发 标签:

Input.mousePosition

2010年11月13日 没有评论

static var mousePosition : Vector3

描述
当前鼠标的位置(像素点坐标系,只读)。
窗口或屏幕的左下方为坐标系的(0, 0)。窗口或屏幕的右上方为坐标系的(Screen.width, Screen.height)。

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public GameObject particle;
    void Update() {
        if (Input.GetButtonDown("Fire1")) {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray))
                Instantiate(particle, transform.position, transform.rotation);

        }
    }
}
分类: 游戏开发 标签:

血条或进度条的效果

2010年11月9日 没有评论

用Unity做血条或进度条真的很方便,GUI里scrollbar就可以轻松实现,再加上lerp一个血条或进度条就完成了。

using UnityEngine;  
using System.Collections;  

public class BloodBarTest : MonoBehaviour {  

    public GUISkin theSkin;  
    public float bloodValue = 0.0f;  
    private float tmpValue;  
    private Rect rctBloodBar;  
    private Rect rctUpButton;  
    private Rect rctDownButton;  
    private bool onoff;  

    // Use this for initialization  
    void Start () {  
        rctBloodBar = new Rect (20,20,20,200);  
        rctUpButton = new Rect (50,20,40,20);  
        rctDownButton = new Rect (50,50,40,20);  
        tmpValue = bloodValue;  
    }  

    void OnGUI (){  
        GUI.skin = theSkin;  
        if (GUI.Button (rctUpButton,"加血")){  
            tmpValue = -1.0f;  
        }  
        if (GUI.Button (rctDownButton,"减血")){  
            tmpValue += 0.1f;  
        }  
        if (bloodValue > 0.0f) tmpValue = 0.0f;  
        if (bloodValue < -1.0f) tmpValue = -1.0f;  
        bloodValue = Mathf.Lerp(bloodValue,tmpValue,0.05f);  
        //~ Debug.Log (bloodValue + " " + tmpValue);  
        GUI.VerticalScrollbar(rctBloodBar, 1.0f, bloodValue,0.0f, 1.0f,GUI.skin.GetStyle("verticalScrollbar"));  
    }  

    // Update is called once per frame  
    void Update () {  

    }  
}
分类: 游戏开发 标签:

Unity3D 音乐开关及音量控制 [转载]

2010年11月9日 没有评论

在Component — Audio下创造一个Audio Source 附于一个GameObject上,加上音乐,

把playOnAwake勾去掉,然后将控制脚本附于它,再建一个GUI按钮来调用AudioSwitch()这个函数就OK了。

var myAudio;  
myAudio = GetComponent(AudioSource);   
private var scrollVol : float = 0.5;   
function AudioSwitch (){  
if(!myAudio.playOnAwake)   
{  
myAudio.Play();  
myAudio.playOnAwake=true;  
}  
else  
{  
myAudio.Stop();  
myAudio.playOnAwake=false;  
}  
}  
function OnGUI()  
{  
if(myAudio.playOnAwake)  
{  
scrollVol = GUI.HorizontalSlider (Rect (150,175,100,20), scrollVol, 0.0, 1.0);   
myAudio.volume = scrollVol;  
}  
}
分类: 游戏开发 标签:

Unity3d Physics 类[转载]

2010年11月9日 没有评论

Physics.RaycastAll

static function RaycastAll (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : RaycastHit[]
static function RaycastAll (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layermask : int = kDefaultRaycastLayers) : RaycastHit[]
函数描述
发射一条穿过整个场景的射线,返回他所有碰到的物体

参数理解:

ray : Ray       结构体,包含射线的源(origin : Vector3),和目标(direction : Vector3),即

用来表示射线投射点和方向

distance : float       浮点变量 射线长度

layerMask : int       层遮罩或深度,个人理解,这个参数决定射线能碰到物体的最大个数,很有用,大场景时,你不希望返回所有的物体吧,会增加系统开销

———————————–

static function Raycast (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
参数
名称                       描述
ray                         同上
distance                同上
layerMask              同上

返回
在射线范围内只要有 collider对象就返回true

———————————–
static function Raycast (ray : Ray, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
参数
名字                      描述
ray                         同上
distance                同上
hitInfo rayhit          输出信息,这里指定一个 RaycastHit 变量 保存撞击信息
layerMask              同上

返回
撞击任何Collider对象返回true
———————————–
Physics.OverlapSphere
static function OverlapSphere (position : Vector3, radius : float, layerMask : int = kAllLayers) : Collider[]
参数
名字                        描述
position                  位置信息
radius                      以‘位置信息’为中心,以radius为半径的的一个范围
layerMask              同上

描述
返回一个Collider类型数组,保存radius内,layerMask深度内的Collider对象

   //被击中的collder变为半透明  
   var hits : RaycastHit[];       //定义一个RaycastHit数组           
   hits = Physics.RaycastAll (Camera.main.transform.position,   Camera.main.transform.forward,50);     //主相机的方向发射一条长50的射线,射线碰到的物体保存在数组hits中  
   Debug.DrawRay (Camera.main.transform.position, Camera.main.transform.forward *10, Color.green);  
//这个是调试中才看的到了,吧这条射线画出来  
   var hit : RaycastHit = hits[0];    //取碰到的第一个RaycastHit  
   var renderer = hit.collider.renderer;  
   if (renderer)  
   {  
    renderer.material.shader = Shader.Find("Transparent/Diffuse");  
    if (renderer.material.color.a !=0.3)  
    {  
     renderer.material.color.a = 0.3;  
    }  
    else  
    {  
     renderer.material.color.a = 1;  
    }  
   }
分类: 游戏开发 标签:

Camera.depth

2010年11月8日 没有评论

Camera.depth

var depth : float

描述:

摄像机渲染顺序中的摄像机的深度。

摄像机的渲染顺序是由深度决定的,由低到高。

如果你在项目中,有多个摄像机,并且有一些不能够覆盖整个屏幕,那么可以使用这个参数去控制摄像机渲染的顺序。参考:camera componentCamera.rect

C#

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() {
        camera.depth = Camera.main.depth + 1;
    }
}
分类: 游戏开发 标签:

线条渲染器(Line Renderer)

2010年11月8日 没有评论

线条渲染器,可以在在一个3D空间里,在一排2个以上的点之间,彼此之间绘制一条直线。因此,一个单独的线条渲染器组件可以被用于绘制任何东西,从一条简单的直线,到一个复杂的螺旋线都可以。这条线必须是连续的;如果你需要绘制2个或更多的完全独立的线,你应该使用多个GameObject,每一个都有它自己的线条渲染器。

线条渲染器不可以渲染一个像素点的细线。它可以渲染有一定宽度的告示板线,并且是可以增加纹理的。对于线条渲染,它和轨迹渲染器使用同一种算法。

线条渲染器检视器面板

属性

Materials 在此列表中,被用于渲染线条的第一种材质。
Positions 用于连接的3D矩阵表。
Size 一条线的段数。
Parameters 每一条线的参数列表。
StartWidth 第一条线位置的宽度。
EndWidth 最后一条线位置的宽度。
Start Color 第一条线位置的颜色。
End Color 最后一条线位置的宽度。
Use World Space 如果使能了,那么线条的起始位置将被忽略,并且在世界起源位置开始绘制。

细节

生成一个线条渲染器:

  1. 选择GameObject->Create Empty
  2. 选择Component->Miscellaneous->Line Renderer
  3. 拖拽一个纹理或者材料到线条渲染器上。如果你在材料上使用了粒子阴影,那么看起来将会更好。

提示

  • 线条渲染器适合使用在你需要将所有的高点摆放在一个帧上的效果。
  • 线条在你移动相机时,看起来就像是在旋转。这是正常的现象。
  • 线条渲染器只能用于渲染一个GameObject。
分类: 游戏开发 标签:

翻译Unity3D文档

2010年11月4日 没有评论

今天决定,在学习Unity3D的过程中,逐步翻译其文档,希望能坚持下来。翻译的可能不可能信达雅,毕竟不是专业人士。有词不达意的翻译,还望指出。

分类: 游戏开发 标签:

TortoiseSVN与Unity3D冲突?

2010年11月2日 没有评论

打开Unity3D,突然机器就蓝屏了,说是ati2dvag有问题,网上说是驱动有问题,可是其他的都很正常,只有打开Unity的时候,才会出问题,怀疑是软件问题,Ghost一遍,回到最干净的版本,一个软件,一个软件的安装,结果安装了TortoiseSVN后,再打开Unity就出问题了。明天继续测试,今天太累了,已经午夜12点半了。

分类: 游戏开发 标签: