unity3d绕一点生成物体
2015-09-17 21:05:13 liuweiyuxiang 阅读数 7440

1.transform.gameobject()可以使用物体的transform组件获取到物体本身

2.获取active为false的物体的两种方法

方法一:GameObject.Find()是不能获得active为false的物体的。可以定义一个public的 GameObject变量,如go,将go指向要引用的物体上,(可以使用拖拽的方法),这样在脚本里,只要使用go就能访问到go所引用的物体,不论该  物体的active属性是false或是true

方法二:通过transform.Find()函数去查找,不过要给要查找的物体加上父物体用父物体的transform组件去查找,没有父物体就给它添加一个空的父物体。如:我们想要获取到active为false的huaqun物体,则可以给花裙物体添加一个空的父物体为empty,然后为empty绑定脚本findNotAvtive.cs

脚本主要内容如下:

void Update () {
        GameObject go = transform.Find ("huaqun").gameObject;
        Debug.Log (go.name);
    }


这样无论huaqun物体的active属性是true还是false都能获取到花裙物体


2018-09-05 15:10:18 q764424567 阅读数 1488

一、前言

今天给大家分享一个如何点击图片生成物体的脚本,可以把这个脚本稍微封装一下,以后也可以方便使用。
主要试用与点击图片时候响应事件,具体用法还要大家多多摸索

二、效果

这里写图片描述

三、正文

步骤:

1.新建2个Image

这里写图片描述这里写图片描述这里写图片描述
就改下名字,其他属性都不用改

3.创建两个预制体在Resources文件夹

这里写图片描述
名字就没有改(懒…)

2.新建脚本test01.cs

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class test01 : MonoBehaviour
{
    //图片名字
    string imageName;
    //预制体对象
    GameObject part;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            //如果获取到对象的话
            if (OnePointColliderObject() != null)
            {
                //给图片名字赋值
                imageName = OnePointColliderObject().name;
                //创建对象
                InstantObject();
            }
        }
    }

    /// <summary>
    /// 点击对象
    /// </summary>
    /// <returns>点击对象获取到对象的名字</returns>
    public GameObject OnePointColliderObject()
    {
        //存有鼠标或者触摸数据的对象
        PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
        //当前指针位置
        eventDataCurrentPosition.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        //射线命中之后的反馈数据
        List<RaycastResult> results = new List<RaycastResult>();
        //投射一条光线并返回所有碰撞
        EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
        //返回点击到的物体
        if (results.Count > 0)
            return results[0].gameObject;
        else
            return null;
    }

    public void InstantObject()
    {
        switch (imageName)
        {
            case "Image_1":
                GameObject obj01 = (GameObject)Resources.Load("Cube");
                part = Instantiate(obj01, Vector3.zero, obj01.transform.rotation);
                break;
            case "Image_2":
                GameObject obj02 = (GameObject)Resources.Load("Sphere");
                part = Instantiate(obj02, Vector3.up, obj02.transform.rotation);
                break;
            default:
                break;
        }
    }
}


代码比较简单,就不多说了,都有注释。
主要讲一下OnePointColliderObject这个函数中的

  • EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
  • RaycastAll的主要特性就是使用光线投射碰撞:在还没有发生真正的物理碰撞之前,就响应碰撞。
  • public void RaycastAll(PointerEventData eventData, List raycastResults);

OK,大家可以试一下,有什么新奇的点子也可以留言哦

2018-09-04 16:42:44 weixin_42513339 阅读数 1953

一开始本人纠结于在VR中,怎么利用手柄来控制物体的旋转,物体位置不变。

相当于:地球仪。更通俗点来说,就是一个棍子插到地球仪上,然后拿着棍子就可以控制地球仪转。手柄相当于那根棍子。

代码如下:

myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);

这句代码实现了 myTransform 始终可以根据 target 旋转,rotationSpeed控制速度。

 

当然上面这句话仅仅只是始终面向,还没有加上一开始记录下target的初始旋转。不然一开始就要跟着手柄转,而不是自己随意控制。对于上句的理解,我理解完便贴上。

---------------------------------------------------------------------------------------------

 

2012-07-02 15:42:15 xy849288321 阅读数 1019

    Unity中最重要的就是游戏物体,理解什么是游戏物体以及如何使用它是非常重要的。

游戏中的任何东西都是游戏物体。游戏物体本身不能做什么事。在它们成为角色,环境或者特定的效果之前需要特定的属性。到那时这些物体中的每一个都会做许多不同的事情。

游戏物体是一个容器。它们是一个空的可以容纳不同模块的盒子,而这些模块组成了一个带有光照贴图的岛或者物理驱动的汽车。这些模块被称为组件。根据需要创建不同的物体,需要添加不同组件到这个游戏物体中。

    游戏物体包含组件,其中变换组件式游戏物体不可缺少的组件,所有游戏物体的变换属性都是通过使用变换组件启用的,变换组件在每个游戏物体中只有一个。游戏物体也可以包含其他组件。

    游戏物体和脚本的关系:当创建一个脚本并将其附加到一个游戏物体上时,这个脚本将显示在游戏物体的检视面板,就像组件一样。从技术角度来讲,脚本是作为组件的一种来编译的,并且Unity引擎像其他组件一样对待他。

    任何在脚本中申明的共有变量都将在游戏物体的检视面板中显示为可编辑或可连接的。编写脚本的时候,能够直接访问任何游戏物体类的成员。如果任何一个类作为一个组件附加在游戏物体上,就可以在脚本中使用成员名来直接访问这个组件。例如,键入transform等同于gameObject.transform。

 

本文参考:Unity3D中文手册
2018-04-08 17:46:57 zchhao_X_hao 阅读数 1680

一:

public GameObject itemPrefab;

void Store()

{

        if (transform.childCount == 0)
        {
                GameObject itemGameObject = Instantiate(itemPrefab) as GameObject;
                itemGameObject.transform.SetParent(this.transform);
                itemGameObject.transform.localScale = Vector3.one;
                itemGameObject.transform.localPosition = Vector3.zero;

        }

}

二:

public GameObject itemPrefab;

void Instantiate()

{

        GameObject. Instantiate(itemPrefab,transform.position,Quaternion.identity);

        //参数:实例化的目标,实例化的位置,每旋转前的初始角度(Quaternion为四元数),实际为(0,0,0,0)

        //也可以用transform.rotation,不过这个为父物体的旋转角度,会将父物体的旋转角度复制给实例化的物体

}

https://www.jianshu.com/p/7b4a53d24557

Unity3d 拖拽物体

阅读数 881

unity3D 物体 旋转

阅读数 585

transform.Rotate(0,5*Time.deltaTime,0);

博文 来自: rensongling

Unity3D物体旋转

阅读数 145

没有更多推荐了,返回首页