Bim*_*B S 10 unity-game-engine unityscript
我试图删除单击鼠标的对象.我正在使用新的Unity3D 4.3进行2D游戏.这是我正在使用的代码
void Update () {
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit))
{
isHit = false;
Destroy(GameObject.Find(hit.collider.gameObject.name));
}
}
}
Run Code Online (Sandbox Code Playgroud)
控件未进入内部if循环.(isHit未被设置为false).
Esa*_*Esa 19
你不能在新的2D东西上使用3D物理函数.请改用2D功能.例:
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
if(hit.collider != null)
{
Debug.Log ("Target Position: " + hit.collider.gameObject.transform.position);
}
Run Code Online (Sandbox Code Playgroud)
小智 6
这个问题有点陈旧,但我正在寻找一种方法来获得一个游戏对象,用鼠标点击统一2D,而Esa的回答几乎帮助了我,但是我没有能力让它工作,所以用一个一点研究我看到Camera.main.ScreenToWorldPoint正在返回相机屏幕区域的中心并且工作正常.它需要从相机和最近的GameObject输入Z位置的差异.我的相机默认设置为-10,我的GameObject为0,所以我需要做的就是将我的Input.mousePosition.z设置为10.所以如果你遇到问题与Esa的代码一起使用(比如我:()以下代码可以帮助您:
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10)), Vector2.zero);
if(hit.collider != null)
{
Debug.Log ("Target Position: " + hit.collider.gameObject.transform.position);
}
Run Code Online (Sandbox Code Playgroud)
首先将任何类型的2D对撞机附加到您的GameObject,然后选择其中一种解决方案;
第一种情况-如果彼此之间有多个GameObject,并且您尝试了解单击了特定GameObject,则:
void Update ()
{
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit2D[] hits = Physics2D.GetRayIntersectionAll (ray, Mathf.Infinity);
foreach (var hit in hits) {
if (hit.collider.name == name) {
MyFunction ();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
第二种情况-如果只有1个GameObject,并且您尝试了解是否单击了它:
void Update ()
{
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit2D hit = Physics2D.GetRayIntersection (ray, Mathf.Infinity);
if (hit.collider != null && hit.collider.name == name) {
MyFunction ();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您必须首先将网格碰撞器(任何碰撞器)与您的对象连接起来才能进入内部 If。然后,
Destroy(hit.collider.gameObject);
Run Code Online (Sandbox Code Playgroud)
会简单地完成工作。
这里可能还有其他工作。
void Update () {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit))
{
if(Input.GetMouseButtonDown(0))
{
isHit = false;
Destroy(hit.collider.gameObject);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38954 次 |
| 最近记录: |